表优化的先决条件 - Amazon Lake Formation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

表优化的先决条件

表优化器会代入您在为表启用压缩时指定的 Amazon Identity and Access Management (IAM) 角色的权限。该 IAM 角色必须具有读取数据和更新数据目录中元数据的权限。您可以创建一个 IAM 角色并附加以下内联策略:

  • 添加以下内联策略,以向 Amazon S3 授予对未注册到 Lake Formation 的数据位置的读/写权限。此策略还包括更新数据目录中表的权限,以及允许 Amazon Glue 在 Amazon CloudWatch 日志中添加日志并发布指标的权限。对于 Amazon S3 中未注册到 Lake Formation 的源数据,访问权限由 Amazon S3 和 Amazon Glue 操作的 IAM 权限策略决定。

    请将以下内联策略中的 bucket-name 替换为您的 Amazon S3 存储桶名称,请将 aws-account-idregion 替换为有效的 Amazon 账户和数据目录所在的区域,将 database_name 替换为数据库的名称,并将 table_name 替换为表的名称。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::<bucket-name>/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::<bucket-name>" ] }, { "Effect": "Allow", "Action": [ "glue:UpdateTable", "glue:GetTable" ], "Resource": [ "arn:aws:glue:<region>:<aws-account-id>:table/<database-name>/<table-name>", "arn:aws:glue:<region>:<aws-account-id>:database/<database-name>", "arn:aws:glue:<region>:<aws-account-id>:catalog" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:<region>:<aws-account-id>:log-group:/aws-glue/iceberg-compaction/logs:*" } ] }
  • 使用以下策略为注册到 Lake Formation 的数据启用压缩功能。

    如果该压缩角色不具有对表的 IAM_ALLOWED_PRINCIPALS 组权限,则该角色需要具有对该表的 Lake Formation ALTERDESCRIBEINSERTDELETE 权限。

    有关向 Lake Formation 注册 Amazon S3 存储桶的更多信息,请参阅向数据湖添加 Amazon S3 位置

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "glue:UpdateTable", "glue:GetTable" ], "Resource": [ "arn:aws:glue:<region>:<aws-account-id>:table/<databaseName>/<tableName>", "arn:aws:glue:<region>:<aws-account-id>:database/<database-name>", "arn:aws:glue:<region>:<aws-account-id>:catalog" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:<region>:<aws-account-id>:log-group:/aws-glue/iceberg-compaction/logs:*" } ] }
  • (可选)如果要压缩的 Iceberg 表包含使用服务器端加密进行加密的 Amazon S3 存储桶中数据,该压缩角色需要具有解密 Amazon S3 对象并生成新数据密钥以将对象写入加密存储桶的权限。将以下策略添加到需要的 Amazon KMS 密钥。我们仅支持在存储桶级加密。

    { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<aws-account-id>:role/<compaction-role-name>" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }
  • (可选)对于注册到 Lake Formation 的数据位置,用于注册该位置的角色需要具有解密 Amazon S3 对象并生成新数据密钥以将对象写入加密存储桶的权限。有关更多信息,请参阅注册加密的 Amazon S3 位置

  • (可选)如果 Amazon KMS 密钥存储在其他 Amazon 账户中,则需要为该压缩角色添加以下权限。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": ["arn:aws:kms:<REGION>:<KEY_OWNER_ACCOUNT_ID>:key/<KEY_ID>" ] } ] }
  • 用于运行压缩的角色必须拥有该角色的 iam:PassRole 权限。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::<account-id>:role/<compaction-role-name>" ] } ] }
  • 将以下信任策略添加到该角色,以便 Amazon Glue 服务代入该 IAM 角色来运行压缩进程。

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