

# 生成列统计数据的先决条件
<a name="column-stats-prereqs"></a>

要生成或更新列统计数据，统计数据生成任务将代表您代入一个 AWS Identity and Access Management（IAM）角色。根据向该角色授予的权限，列统计数据生成任务可以读取 Amazon S3 数据存储中的数据。

配置列统计数据生成任务时，AWS Glue 允许您创建包含 `AWSGlueServiceRole` AWS 托管式策略以及指定数据源所需内联策略的角色。

如果您指定一个现有角色用于生成列统计数据，请确保它包含 `AWSGlueServiceRole` 策略或等效策略（或此策略的范围缩小版本），以及所需的内联策略。请按照下面的步骤创建新的 IAM 角色：

**注意**  
 要为由 Lake Formation 管理的表生成统计数据，用于生成统计数据的 IAM 角色需要具有完全的表访问权限。

配置列统计数据生成任务时，AWS Glue 允许您创建包含 `AWSGlueServiceRole` AWS 托管式策略以及指定数据源所需内联策略的角色。您也可以创建一个角色并附加以下策略中列出的权限，然后将该角色添加到列统计数据生成任务。

**创建 IAM 角色以生成列统计数据**

1. 要创建 IAM 角色，请参阅 [为 AWS Glue 创建 IAM 角色](https://docs.aws.amazon.com/glue/latest/dg/create-an-iam-role.html)。

1. 要更新现有的角色，进入 IAM 控制台后，请转到生成列统计数据进程正在使用的 IAM 角色。

1. 在**添加权限**选项卡中，选择**附加策略**。在新打开的浏览器窗口中，选择 `AWSGlueServiceRole` AWS 托管式策略。

1. 您还需要包含从 Amazon S3 数据位置读取数据所需的权限。

   在**添加权限**部分中，选择**创建策略**。在新打开的浏览器窗口中，创建将用于您的角色的新策略。

1. 在**创建策略**页面中，选择 **JSON** 选项卡。将以下 `JSON` 代码复制到策略编辑器字段中。
**注意**  
请将以下策略中的 account ID 替换为有效的 AWS 账户，将 `region` 替换为表所在的区域，并将 `bucket-name` 替换为 Amazon S3 存储桶的名称。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "S3BucketAccess",
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetObject"
               ],
               "Resource": [
               	"arn:aws:s3:::amzn-s3-demo-bucket/*",
   							"arn:aws:s3:::amzn-s3-demo-bucket"
               ]
           }
        ]
   }
   ```

------

1. （可选）如果您使用 Lake Formation 权限来提供对数据的访问权限，则该 IAM 角色需要具有 `lakeformation:GetDataAccess` 权限。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "LakeFormationDataAccess",
         "Effect": "Allow",
         "Action": "lakeformation:GetDataAccess",
         "Resource": [
           "*"
         ]
       }
     ]
   }
   ```

------

    如果该 Amazon S3 数据位置已注册到 Lake Formation，并且列统计数据生成任务所代入的 IAM 角色不具有对表的 `IAM_ALLOWED_PRINCIPALS` 组权限，则该角色需要具有对该表的 Lake Formation `ALTER` 和 `DESCRIBE` 权限。用于注册 Amazon S3 存储桶的角色需要具有对该表的 Lake Formation `INSERT` 和 `DELETE` 权限。

   如果该 Amazon S3 数据位置尚未注册到 Lake Formation，并且该 IAM 角色不具有对表的 `IAM_ALLOWED_PRINCIPALS` 组权限，则该角色需要具有对该表的 Lake Formation `ALTER`、`DESCRIBE`、`INSERT` 和 `DELETE` 权限。

1. 如果您已启用目录级别`Automatic statistics generation`选项，则 IAM 角色必须对默认 Data Catalog 具有 `glue:UpdateCatalog` 权限或 Lake Formation `ALTER CATALOG` 权限。您可以使用 `GetCatalog` 操作来验证目录属性。

1. （可选）对于写入加密 Amazon CloudWatch Logs 的列统计数据生成任务，密钥政策中需要包含以下权限。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "CWLogsKmsPermissions",
         "Effect": "Allow",
         "Action": [
           "logs:CreateLogGroup",
           "logs:CreateLogStream",
           "logs:PutLogEvents",
           "logs:AssociateKmsKey"
         ],
         "Resource": [
           "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue:*"
         ]
       },
       {
         "Sid": "KmsPermissions",
         "Effect": "Allow",
         "Action": [
           "kms:GenerateDataKey",
           "kms:Decrypt",
           "kms:Encrypt"
         ],
         "Resource": [
           "arn:aws:kms:us-east-1:111122223333:key/arn of key used for ETL cloudwatch encryption"
         ],
         "Condition": {
           "StringEquals": {
             "kms:ViaService": [
               "glue.us-east-1.amazonaws.com"
             ]
           }
         }
       }
     ]
   }
   ```

------

1. 用于运行列统计信息的角色必须拥有该角色的 `iam:PassRole` 权限。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "iam:PassRole"
         ],
         "Resource": [
           "arn:aws:iam::111122223333:role/columnstats-role-name"
         ]
       }
     ]
   }
   ```

------

1. 在您创建 IAM 角色以生成列统计数据时，该角色还必须具有以下的信任策略，以确保服务能够代入该角色。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "TrustPolicy",
         "Effect": "Allow",
         "Principal": {
           "Service": "glue.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------