Como resolvo os erros de permissão de “Acesso negado” quando executo uma consulta no Amazon Athena?
Quando executo uma consulta do Amazon Athena, recebo o erro “Acesso negado”.
Breve descrição
Os erros de consulta de Acesso Negado geralmente estão relacionados a problemas de permissão 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 à entidade do IAM (usuário ou perfil).
- 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 Amazon S3.
- Você não tem acesso à chave do AWS Key Management Service (AWS KMS) usada para ler ou gravar os dados criptografados.
Solução
Para solucionar o erro de Acesso Negado, confirme as seguintes permissões para seu caso de uso. Para obter mais informações, consulte Solução de problemas no Athena.
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solucionar erros 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 Glue Data Catalog permite acesso à entidade IAM
Se você usa uma política do Glue Data Catalog, certifique-se de que a política permita acesso à entidade IAM. Por exemplo, se você tiver a seguinte política no seu catálogo de dados, a entidade do IAM athena_user não terá acesso ao catálogo de dados:
{ "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:*" ] } ] }
Por exemplos de políticas, consulte Exemplos de políticas baseadas em recursos para o AWS Glue.
Quando a política anterior está no Catálogo de Dados, as consultas do Athena que o usuário executa podem falhar com a seguinte resposta 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"
Além disso, certifique-se de que o usuário/perfil do IAM que executa essas consultas tenha as permissões necessárias para acessar os recursos do AWS Glue. Para obter uma lista completa das permissões necessárias do AWS Glue, consulte a política gerenciada pela AWS: AmazonAthenaFullAccess.
Certifique-se de que as ações necessárias do AWS Glue não sejam negadas pela política de recursos do Catálogo de Dados. Para obter mais informações, consulte Acesso refinado a bancos de dados e tabelas no Catálogo de Dados do AWS Glue.
Certifique-se de que a entidade do IAM tenha as permissões necessárias para acessar o bucket de dados de origem e o bucket de resultados de consultas
Você receberá um erro semelhante ao seguinte se não tiver acesso ao bucket de dados de origem:
“Sua consulta tem os seguintes erros: com.amazonaws.services.s3.model.AmazonS3Exception: Acesso negado (Serviço: Amazon S3; Código de status: 403; Código de erro: Acesso negado; ID da solicitação: 72VA5FB0ASWCQFPD; S3 Extended Request ID: cykX1CZ/KfxpL/h8/DOQoCBJ88qFGYqt6J52Jqh87qBfyN8c2P2azRiYjjJE1HL7i0Mg9xxxxxx=; Proxy: null), S3 Extended Request ID: cykX1CZ/KfxpL/h8/DOQoCBJ88qFGYqt6J52Jqh87qBfyN8c2P2azRiYjjJE1HL7i0Mg9xxxxxx= (Path: s3://my-athena-source-bucket/athena_data.csv)"
Você receberá um erro semelhante ao seguinte se não tiver acesso ao bucket de resultados de consultas:
"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 . Verifique se você tem permissão para acessar o bucket do S3. Se você estiver criptografando os resultados da consulta com a chave KMS, certifique-se de ter permissão para acessar sua chave KMS”
A entidade do IAM que executa as consultas precisa acessar o bucket de dados de origem e o bucket de resultados de consultas. Para conceder as permissões necessárias para a entidade do IAM, anexe uma política do IAM à entidade do IAM.
Exemplo de política do 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/*" ] } ] }
Na política anterior, substitua as seguintes variáveis:
- my-athena-source-bucket pelo nome do seu bucket de dados de origem
- my-athena-source-bucket/data/ pela localização dos dados de origem
- 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.
Anexar a política de bucket do Amazon S3 com as permissões necessárias para consultas entre contas
Você não precisará anexar políticas de bucket do S3 se a tabela do Athena e os buckets do S3 estiverem na mesma conta. No entanto, se você já anexou 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 os buckets do S3 estiverem em contas diferentes, você deverá anexar as políticas de bucket do S3 que concedem o acesso necessário à entidade do IAM.
Na conta que tem o bucket S3, anexe uma política de bucket do S3 que conceda acesso ao athena\ _user na outra conta. O exemplo de política a seguir permite explicitamente que um usuário do IAM da conta A acesse o bucket my-athena-source-bucket 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/*" ] } ] }
No exemplo de política anterior, substitua as seguintes variáveis:
- my-athena-source-bucket pelo nome do seu bucket de dados de origem
- my-athena-source-bucket/data/ pela localização dos dados de origem
- 1111222233334444 com o ID da conta de usuário do IAM (conta A)
- athena_user pelo nome do usuário do IAM (na conta A)
Para conceder acesso ao bucket a todos os usuários na outra conta, substitua a chave Principal por uma chave que especifique **root ** (“arn:aws:iam: :1111222233334444:root”).
**Observação:**Essa política 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 origem ou o bucket de resultados de consultas. Para obter mais informações, Acesso entre contas a objetos de bucket.
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 soluciono os erros 403 de acesso negado do Amazon S3?
Atualize sua política de chave do AWS KMS
Se seus dados de origem estiverem criptografados ou sua consulta do Athena usar uma chave do AWS KMS para gravar resultados criptografados, confirme as seguintes permissões:
- A política do usuário do IAM permite as ações necessárias do AWS KMS.
- A política da chave do AWS KMS permite o acesso ao usuário.
O exemplo a seguir de política de chaves do AWS KMS permite todas as ações do AWS KMS para todos os usuários na conta 1111222233334444:
{ "Sid": "Enable IAM policies", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::1111222233334444:root" }, "Action": "kms:*", "Resource": "*" }
**Observação:**Na política anterior, substitua as variáveis de exemplo pelas suas variáveis.
Para obter mais informações, consulte Políticas de chave no AWS KMS e Permissões para dados criptografados no Amazon S3.
Certificar-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 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 pode fazer isso executando 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 posso acessar um objeto que foi carregado no meu bucket do Amazon S3 por outra conta da AWS?
Informações relacionadas
Vídeos relacionados
Conteúdo relevante
- feita há 15 diaslg...
- feita há 15 diaslg...
- Resposta aceitafeita há 13 diaslg...
- feita há um mêslg...
- AWS OFICIALAtualizada há 3 meses
- AWS OFICIALAtualizada há 9 meses