¿Por qué aparece el error «Acceso denegado» cuando ejecuto una consulta en Amazon Athena?

8 minutos de lectura
0

Cuando ejecuto una consulta en Amazon Athena, aparece el error «Acceso denegado».

Descripción breve

Puede aparecer un error de «Acceso denegado» por los siguientes motivos:

  • El usuario de AWS Identity and Access Management (IAM) no tiene uno o más de los siguientes permisos:
  • Leer el bucket de datos de origen.
  • Escribir los resultados en el bucket de resultados de consulta.
  • Las políticas de bucket de Amazon Simple Storage Service (Amazon S3) no conceden los permisos necesarios al usuario de IAM.
  • El propietario del objeto difiere del propietario del bucket de Amazon S3.
  • No tiene acceso a la clave de AWS Key Management Service (AWS KMS) que se usa para leer o escribir los datos cifrados.
  • La política del Catálogo de datos de AWS Glue no permite el acceso al usuario de IAM.

Resolución

Para solucionar el error de «Acceso denegado», confirme lo siguiente. Para obtener más información, consulte Solución de problemas en Athena.

Asegurarse de que el usuario de IAM tenga los permisos necesarios para acceder al bucket de datos de origen y al bucket de resultados de la consulta

Si no tiene acceso al bucket de datos de origen, le aparecerá un error similar al siguiente:

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)

Si no tiene acceso al bucket de resultados de la consulta, le aparecerá un error similar al siguiente:

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

El usuario de IAM que ejecuta las consultas necesita acceder al bucket de datos de origen y al bucket de resultados de la consulta. Puede conceder el permiso necesario al usuario de IAM adjuntando una política de IAM al usuario o rol de IAM. La siguiente política de IAM concede los permisos mínimos para el bucket de datos de origen y el bucket de resultados de consulta:

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

Asegúrese de sustituir lo siguiente en este ejemplo de política:

  • my-athena-source-bucket por el nombre de su bucket de datos de origen
  • my-athena-source-bucket/data/ por la ubicación de los datos de origen
  • my-athena-result-bucket por el nombre del bucket de resultados de consulta

Para obtener la lista completa de políticas, consulte Políticas administradas de AWS para Amazon Athena.

Adjuntar la política de bucket de Amazon S3 con los permisos necesarios para las consultas entre cuentas

No es necesario adjuntar políticas de bucket de S3 si su tabla de Athena y sus buckets de S3 están en la misma cuenta. Sin embargo, si tiene políticas de bucket de S3, asegúrese de que concedan las acciones de S3 necesarias al usuario o rol de IAM. Si su tabla de Athena y sus buckets de S3 están en cuentas diferentes, tiene que adjuntar las políticas de bucket de S3 que concedan el acceso necesario al usuario de IAM.

Puede adjuntar una política de bucket de S3 similar a la siguiente en la cuenta B para conceder acceso al usuario de IAM athena_user de la cuenta A. Esta política de ejemplo permite explícitamente al usuario de IAM acceder al bucket de S3 my-athena-source-bucket de la cuenta 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/*"
      ]
    }
  ]
}

Asegúrese de sustituir lo siguiente en este ejemplo de política:

  • my-athena-source-bucket por el nombre de su bucket de datos de origen
  • my-athena-source-bucket/data/ por la ubicación de los datos de origen
  • 1111222233334444 por el ID de la cuenta A
  • athena_user por el nombre del usuario de IAM de la cuenta A

Para conceder acceso al bucket a todos los usuarios de la cuenta A, sustituya la clave de ** principal** por una clave que especifique la raíz. Por ejemplo, «arn:aws:iam::1111222233334444:root».

Nota: Esta política concede todas las acciones de S3 a my-athena-source-bucket. Puede actualizar las acciones de S3 en función de si el bucket de S3 es el bucket de origen o el bucket de resultados de consulta. Para obtener más información, consulte la sección Política de buckets o políticas de usuario de IAM de Acceso entre cuentas en Athena a los buckets de Amazon S3.

Confirme que la política de bucket de S3 no incluya declaraciones que denieguen explícitamente el acceso a la cuenta A o a sus usuarios de IAM. Además, asegúrese de que su política no incluya condiciones que puedan denegar las solicitudes. Para obtener más información, consulte ¿Cómo soluciono los errores 403 de acceso denegado de Amazon S3? Para definir los permisos con privilegios mínimos para el bucket de S3, consulte Cómo definir los permisos con privilegios mínimos para las acciones convocadas por servicios de AWS.

Actualizar la política de claves de AWS KMS

Si sus datos de origen están cifrados o su consulta de Athena escribe los resultados cifrados con una clave de AWS KMS, asegúrese de lo siguiente:

Este es un ejemplo de una política de claves de AWS KMS que permite todas las acciones de AWS KMS a todos los usuarios del ID de cuenta 1111222233334444:

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

Asegúrese de actualizar esta política en función de su caso de uso. Para obtener más información, consulte Políticas de claves en AWS KMS y Permisos para datos cifrados en Amazon S3.

Asegúrese de que el propietario del bucket de S3 tenga acceso a los objetos

De forma predeterminada, un objeto de S3 es propiedad de la cuenta AWS que lo subió. Esto es válido aunque el bucket sea propiedad de otra cuenta. Si otras cuentas pueden subir objetos a su bucket, compruebe la cuenta que sea propietaria de los objetos a los que sus usuarios no pueden acceder. Puede comprobar quién es el propietario del objeto ejecutando el comando GetObjectAcl.

Si el propietario del bucket de S3 y el del objeto son diferentes, el propietario del objeto puede concederle el control total del objeto. El propietario del objeto puede hacerlo ejecutando el comando PutObjectAcl con el parámetro bucket-owner-full-control. Para cambiar la propiedad del objeto a la cuenta propietaria del bucket de S3, ejecute el comando cp de la Interfaz de la línea de comandos de AWS (AWS CLI) desde la cuenta del bucket para copiar el objeto sobre sí mismo.

Nota: Si recibe errores al ejecutar los comandos de la AWS CLI, asegúrese de utilizar la versión más reciente de la AWS CLI.

Para obtener más información, consulte ¿Por qué no puedo acceder a un objeto que ha subido otra cuenta de AWS a mi bucket de Amazon S3?

Compruebe que la política del catálogo de datos de AWS Glue permita el acceso al usuario o rol de IAM

Si ya tiene una política del catálogo de datos de AWS Glue, asegúrese de que permita el acceso al usuario o rol de IAM. Por ejemplo, si tiene la siguiente política en su catálogo de datos, se deniega el acceso al catálogo de datos al usuario de IAM athena_user:

{
  "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 ejemplos de políticas, consulte Ejemplos de políticas basadas en recursos para AWS Glue.

Con esta política en el catálogo de datos, las consultas de Athena ejecutadas por el usuario podrían fallar dando el siguiente error:

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

Además, asegúrese de que el usuario o rol de IAM que ejecute las consultas tenga los permisos necesarios para acceder a los recursos de AWS Glue. Para obtener una lista completa de los permisos de AWS Glue necesarios, consulte la Política gestionada de AmazonAthenaFullAccess. Asegúrese de que la política de recursos del catálogo de datos no deniegue las acciones de AWS Glue necesarias. Para obtener más información, consulte Acceso detallado a bases de datos y tablas en el catálogo de datos de AWS Glue.


Información relacionada

Gestión de identidades y accesos en Athena

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años