Como resolvo os erros de permissão de “Acesso negado” quando executo uma consulta no Amazon Athena?
Quero executar uma consulta do Amazon Athena, mas recebo o erro “Acesso negado”.
Breve descrição
Os erros de consulta de “Acesso negado” geralmente estão relacionados a problemas de permissões com outros serviços da AWS ou contas da AWS com as quais o Athena interage. Exemplos de serviços com os quais o Athena normalmente interage incluem o AWS Identity and Access Management (IAM), o Amazon Simple Storage Service (Amazon S3) e o AWS Key Management Service (AWS KMS).
Os seguintes motivos podem causar um erro de “Acesso negado”:
- A política do Catálogo de Dados do AWS Glue não permite acesso ao usuário do IAM ou perfil do IAM.
- A entidade IAM não tem permissão para ler o bucket de dados de origem do S3 nem gravar os resultados no bucket de resultados da consulta.
- As políticas de bucket do S3 não liberam as permissões necessárias para a entidade IAM quando a tabela e os buckets do Athena estão em contas diferentes.
- O proprietário do objeto é diferente do proprietário do bucket do S3.
- Você não tem acesso à chave do AWS KMS usada para ler ou gravar os dados criptografados.
Para solucionar o erro de “Acesso negado”, confirme se você definiu as permissões corretas para seu caso de uso. Para obter mais informações sobre erros relacionados a permissões, consulte Permissões.
Resolução
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Verifique se a política do Catálogo de Dados do Glue permite acesso à entidade IAM
Você recebe a seguinte mensagem de erro:
"Insufficient permissions to execute the query. User: arn:aws:iam:: 1111222233334444:user/athena_user is not authorized to perform: glue:GetTable on resource: arn:aws:glue:us-east-1:1111222233334444:database/doc_example_database with an explicit deny Query Id: example_query_ID".
O erro anterior ocorre quando sua política do Catálogo de Dados nega acesso ao Catálogo de Dados. O exemplo de política a seguir inclui uma instrução Deny explícita que nega o acesso de athena_user ao Catálogo do AWS Glue:
{ "Version": "2012-10-17", "Statement": [ { "Principal": { "AWS": [ "arn:aws:iam::1111222233334444:user/athena_user" ] }, "Effect": "Deny", "Action": [ "glue:*" ], "Resource": [ "arn:aws:glue:us-east-1:1111222233334444:*" ] } ] }
Para resolver esse problema, altere a instrução Deny explícita para Allow. Para ver exemplos de políticas que incluem uma instrução Allow explícita, consulte Exemplos de permissões no nível de bancos de dados e tabelas. Para alterar sua política do Catálogo de Dados do AWS Glue, consulte Configurações do Catálogo de Dados.
Para obter uma lista completa das permissões necessárias do AWS Glue, consulte Política gerenciada pela AWS: AmazonAthenaFullAccess.
Verifique se a entidade IAM tem as permissões necessárias para acessar os buckets
Se você receber a seguinte mensagem de erro, não terá acesso ao bucket de dados de origem:
"Your query has the following errors:com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID:###; S3 Extended Request ID:###=; Proxy: null), S3 Extended Request ID:###= (Path: s3://my-athena-source-bucket/athena_data.csv)".
Se você receber a seguinte mensagem de erro, não terá acesso ao bucket de resultados da consulta:
"Your query has the following errors: Access denied when writing output to url: s3://my-athena-result-bucket/Unsaved/2021/05/07/example_query_ID.csv . Please ensure you are allowed to access the S3 bucket. If you are encrypting query results with KMS key, please ensure you are allowed to access your KMS key".
A entidade IAM que executa as consultas deve ter acesso aos dois buckets. Para conceder as permissões necessárias, anexe a seguinte política do IAM à entidade IAM:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::my-athena-source-bucket" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::my-athena-source-bucket/data/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:AbortMultipartUpload", "s3:PutObject", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:s3:::my-athena-result-bucket", "arn:aws:s3:::my-athena-result-bucket/*" ] } ] }
Observação: substitua my-athena-source-bucket pelo nome do seu bucket de dados de origem e my-athena-source-bucket/data/ pelo local dos dados de origem. Substitua my-athena-result-bucket pelo nome do seu bucket de resultados de consultas.
Para obter a lista completa de políticas, consulte Políticas gerenciadas pela AWS para o Amazon Athena.
Adicione uma política de bucket do S3 com as permissões necessárias para consultas entre contas
Se a tabela do Athena e o bucket do S3 estiverem na mesma conta, você não precisará adicionar uma política baseada em recursos ao bucket do S3. No entanto, se você já adicionou uma política de bucket, verifique se ela concede permissões do S3 à entidade IAM que está consultando os dados.
Se a tabela do Athena e o bucket do S3 estiverem em contas diferentes, adicione uma política baseada em recursos ao bucket do S3 que conceda acesso à entidade IAM.
No exemplo a seguir, o usuário do Athena está na Conta A e o bucket do S3 está na Conta B.
O exemplo de política baseada em recursos a seguir permite explicitamente que o athena_user na conta A acesse o bucket my-athena-source-bucket do S3 na conta B:
{ "Version": "2012-10-17", "Id": "Policy1620692934647", "Statement": [ { "Sid": "Stmt1620692932186", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::1111222233334444:user/athena_user" }, "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::my-athena-source-bucket", "arn:aws:s3:::my-athena-source-bucket/data/*" ] } ] }
Observação: substitua my-athena-source-bucket pelo nome do seu bucket de dados de origem e my-athena-source-bucket/data/ pelo local dos dados de origem. Substitua 1111222233334444 pelo ID da conta de usuário do IAM na Conta A e athena_user pelo nome do usuário do IAM na Conta A.
Para conceder acesso ao bucket a todos os usuários na Conta A, substitua a chave Principal por uma chave que especifique root ("arn:aws:iam::1111222233334444:root").
Observação: essa política de bucket do S3 permite que todas as ações do S3 sejam executadas em my-athena-source-bucket. Você pode atualizar as ações do S3 com base no fato de o bucket do S3 ser o bucket de dados de origem ou o bucket de resultados de consultas. Para obter mais informações, consulte Configurar o acesso entre contas a objetos de buckets.
Confirme se a política de bucket do S3 não inclui declarações que negam explicitamente o acesso à conta A ou a seus usuários do IAM. Além disso, certifique-se de que sua política não inclua condições que possam negar as solicitações. Para obter mais informações, consulte Como solucionar erros 403 Acesso Negado do Amazon S3?
Atualize sua política de chave do AWS KMS
Se você criptografou seus dados de origem ou se sua consulta do Athena usa uma chave do AWS KMS para gravar resultados criptografados, execute as seguintes ações:
- Confirme se a política do usuário do IAM permite as ações necessárias do AWS KMS.
- Confirme se a política de chaves do AWS KMS permite o acesso ao usuário.
O seguinte exemplo de política de chaves do AWS KMS dá permissão à conta 1111222233334444 para usar políticas do IAM para permitir todas as ações na chave do KMS:
{ "Sid": "Enable IAM policies", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::1111222233334444:root" }, "Action": "kms:*", "Resource": "*" }
Observação: na política anterior, substitua 1111222233334444 pelo ID da sua conta.
Para obter mais informações, consulte Políticas-chave em AWS KMS e Permite o acesso ao Conta da AWS e habilita políticas do IAM.
Certifique-se de que o proprietário do bucket do S3 tenha acesso aos objetos
Por padrão, a conta que carrega um objeto do S3 em um bucket é proprietária do objeto. Isso é verdade mesmo quando outra conta é proprietária do bucket. Se usuários em outras contas puderem carregar objetos no seu bucket, verifique a conta que possui os objetos que seus usuários não podem acessar. Execute o comando GetObjectAcl para verificar o proprietário do objeto.
Se o proprietário do bucket do S3 e o proprietário do objeto forem diferentes, este último poderá conceder a você o controle total do objeto. O proprietário do objeto deve executar o comando PutObjectAcl com o parâmetro bucket-owner-full-control.
Para alterar a propriedade do objeto para a conta que possui o bucket do S3, execute o comando cp da AWS CLI. Certifique-se de executar o comando cp na conta do bucket para copiar o objeto sobre si mesmo.
Para obter mais informações, consulte Por que não consigo acessar um objeto que foi enviado ao meu bucket do Amazon S3 por outra conta da AWS?
Informações relacionadas
- Tópicos
- Analytics
- Tags
- Amazon Athena
- Idioma
- Português
Vídeos relacionados


Conteúdo relevante
- Resposta aceita
feita há 9 meses
feita há um ano
AWS OFICIALAtualizada há 8 meses