Por que recebo o erro “Acesso negado” quando executo uma consulta no Amazon Athena?

8 minuto de leitura
0

Quando executo uma consulta do Amazon Athena, recebo o erro “Acesso negado”.

Breve descrição

Você pode receber um erro de “Acesso negado” pelos seguintes motivos:

  • O usuário do AWS Identity and Access Management (IAM) não tem uma ou mais das seguintes permissões:
  • Ler o bucket de dados de origem.
  • Gravar os resultados no bucket de resultados de consultas.
  • As políticas de bucket do Amazon Simple Storage Service (Amazon S3) não permitem as permissões necessárias ao usuário do IAM.
  • 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.
  • A política do Catálogo de Dados do AWS Glue não permite acesso ao usuário do IAM.

Resolução

Para solucionar o erro “Acesso negado”, confirme o seguinte. Para obter mais informações, consulte Solução de problemas no Athena.

Certifique-se de que o usuário 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:

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: 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 . 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

O usuário do IAM que executa as consultas precisa acessar o bucket de dados de origem e o bucket de resultados de consultas. Você pode conceder a permissão necessária ao usuário do IAM anexando uma política do IAM ao usuário/perfil do IAM. A política do IAM a seguir possibilita permissões mínimas ao bucket de dados de origem e ao bucket de resultados de consultas:

{
  "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/*"
      ]
    }
  ]
}

Certifique-se de substituir o seguinte neste exemplo de política:

  • 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 tiver políticas de bucket do S3, certifique-se de que elas concedam as ações necessárias do S3 ao usuário/perfil do IAM. 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 ao usuário do IAM.

Você pode anexar uma política de bucket do S3 semelhante à seguinte na conta B para conceder acesso ao usuário do IAM athena_user na conta A. Esse exemplo de política permite explicitamente que o usuário do IAM acesse o bucket do S3 my-athena-source-bucket 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/*"
      ]
    }
  ]
}

Certifique-se de substituir o seguinte neste exemplo de política:

  • 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 pelo ID da conta A
  • athena_user pelo nome do usuário do IAM na conta A

Para conceder acesso ao bucket para todos os usuários na conta A, substitua a chave Principal por uma chave que especifique root. Por exemplo, “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, consulte a seção Política de bucket ou políticas de usuário do IAM em Acesso entre contas no Athena a buckets do Amazon S3.

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 de acesso negado do Amazon S3? Para definir permissões de privilégio mínimo para o bucket do S3, consulte Como definir permissões de privilégio mínimo para ações chamadas por serviços da AWS.

Atualize sua política de chaves do AWS KMS

Se seus dados de origem estiverem criptografados ou se a sua consulta do Athena gravar resultados criptografados usando uma chave do AWS KMS, certifique-se do seguinte:

Este é um exemplo de uma política de chaves do AWS KMS que permite todas as ações do AWS KMS para todos os usuários no ID 1111222233334444:

{
  "Sid": "Enable IAM policies",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::1111222233334444:root"
   },
  "Action": "kms:*",
  "Resource": "*"
}

Certifique-se de atualizar essa política com base no seu caso de uso. 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, um objeto do S3 pertence à conta da AWS que o carregou. Isso vale inclusive para buckets que pertencem a outra conta. Se outras contas puderem carregar objetos no seu bucket, verifique a conta que possui os objetos que seus usuários não podem acessar. Você pode verificar o proprietário do objeto executando o comando GetObjectAcl.

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 Command Line Interface (AWS CLI) na conta do bucket para copiar o objeto sobre si mesmo.

Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar utilizando a versão mais recente da AWS CLI.

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?

Verificar se a política do Catálogo de Dados do AWS Glue permite acesso ao usuário/perfil do IAM

Se você tiver uma política existente do Catálogo de Dados do AWS Glue, certifique-se de que essa política permita o acesso ao usuário/perfil do IAM. Por exemplo, se você tiver a seguinte política no seu catálogo de dados, o usuário 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:*"
      ]
    }
  ]
}

Para ver exemplos de políticas, consulte Exemplos de políticas de controle de acesso baseadas em recursos do AWS Glue.

Com essa política no Catálogo de dados, as consultas do Athena executadas pelo usuário poderão falhar com o seguinte 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 Política gerenciada do 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.


Informações relacionadas

Gerenciamento de identidade e acesso no Athena

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos