Pré-requisitos de otimização de tabelas
O otimizador de tabela assume as permissões do perfil do AWS Identity and Access Management (IAM) que você especificou ao habilitar as opções de otimização (compactação, retenção de snapshot e exclusão de arquivos órfãos) para uma tabela. Você pode criar um único perfil para todos os otimizadores ou criar perfis separados para cada otimizador.
nota
O otimizador de exclusão de arquivos órfãos não exige as permissões glue:updateTable
ou s3:putObject
. Os otimizadores de expiração e compactação de snapshots exigem o mesmo conjunto de permissões.
O perfil do IAM deve ter as permissões para ler dados e atualizar metadados no catálogo de dados. Você pode criar um perfil do IAM e anexar as políticas em linha a seguir:
-
Adicione a seguinte política em linha que concede ao Amazon S3 permissões de leitura/gravação no local para dados que não estão registrados no AWS Lake Formation. Essa política também inclui permissões para atualizar a tabela no catálogo de dados e permitir que o AWS Glue adicione logs em logs do Amazon CloudWatch e a publicação de métricas. Para dados de origem no Amazon S3 que não estão registrados no Lake Formation, o acesso é determinado pelas políticas de permissões do IAM para o Amazon S3 e ações AWS Glue.
Nas políticas em linha a seguir, substitua
bucket-name
pelo nome do bucket do Amazon S3,aws-account-id
eregion
por um número de conta da AWS e por uma região do catálogo de dados válidos,database_name
pelo nome do seu banco de dados etable_name
pelo nome da tabela.{ "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:*", "arn:aws:logs:<region>
:<aws-account-id>
:log-group:/aws-glue/iceberg-retention/logs:*", "arn:aws:logs:<region>
:<aws-account-id>
:log-group:/aws-glue/iceberg-orphan-file-deletion/logs:*" } ] } -
Use a política a seguir para habilitar a compactação de dados registrados no Lake Formation.
Se o perfil de otimização não tiver permissões do grupo
IAM_ALLOWED_PRINCIPALS
concedidas na tabela, ele exigirá as permissõesALTER
,DESCRIBE
,INSERT
eDELETE
do Lake Formation na tabela.Para obter mais informações sobre o registro de um bucket do Amazon S3 com o Lake Formation, consulte Adicionar um local do Amazon S3 ao seu data lake.
{ "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:*", "arn:aws:logs:<region>
:<aws-account-id>
:log-group:/aws-glue/iceberg-retention/logs:*", "arn:aws:logs:<region>
:<aws-account-id>
:log-group:/aws-glue/iceberg-orphan-file-deletion/logs:*" } ] } -
(Opcional) Para otimizar tabelas Iceberg com dados em buckets criptografados do Amazon S3 usando criptografia no lado do servidor, o perfil de compactação exigirá permissões para descriptografar objetos do Amazon S3 e gerar uma nova chave de dados para gravar objetos nos buckets criptografados. Adicione a seguinte política à chave do AWS KMS desejada. Oferecemos suporte somente à criptografia em nível de bucket.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
<aws-account-id>
:role/<optimizer-role-name>
" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" } -
(Opcional) Para locais de dados registrados no Lake Formation, o perfil usado para registrar a localização exige permissões para descriptografar objetos do Amazon S3 e gerar uma nova chave de dados para gravar objetos nos buckets criptografados. Para obter mais informações, consulte Registrar um local do Amazon S3.
-
(Opcional) Se a chave do AWS KMS estiver armazenada em uma conta da AWS diferente, você precisará incluir as permissões a seguir no perfil de compactação.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": ["arn:aws:kms:
<REGION>
:<KEY_OWNER_ACCOUNT_ID>
:key/<KEY_ID>
" ] } ] } -
A função que você usa para executar a compactação deve ter a permissão
iam:PassRole
da função.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::
<account-id>
:role/<optimizer-role-name>
" ] } ] } -
Adicione a política de confiança a seguir à função para que o serviço AWS Glue assuma o perfil do IAM para executar o processo de compactação.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "glue.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }