¿Cómo soluciono los errores de permiso de «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».

Breve descripción

Los errores de consulta de Acceso denegado suelen estar relacionados con problemas de permisos con otros servicios de AWS o cuentas de AWS con las que Athena interactúa. Algunos ejemplos de servicios con los que Athena interactúa habitualmente son AWS Identity and Access Management (IAM), Amazon Simple Storage Service (Amazon S3) y AWS Key Management Service (AWS KMS).

Los siguientes motivos pueden causar un error de Acceso denegado:

  • La política del Catálogo de datos de AWS Glue no permite el acceso a la entidad de IAM (usuario o rol).
  • La entidad de IAM no tiene permisos para leer el bucket de datos de origen de S3 ni para escribir los resultados en el bucket de resultados de la consulta.
  • Las políticas de bucket de S3 no conceden los permisos necesarios a la entidad de IAM cuando la tabla y los buckets de Athena están en cuentas diferentes.
  • El propietario del objeto difiere del propietario del bucket de Amazon S3.
  • No tiene acceso a la clave de AWS KMS que se usa para leer o escribir los datos cifrados.

Resolución

Para solucionar el error de Acceso denegado, confirme los siguientes permisos para su caso de uso. Para obtener más información, consulte Solución de problemas en Athena.

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Troubleshoot AWS CLI errors. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.

Comprobar que la política del catálogo de datos de Glue permita el acceso a la entidad de IAM

Si usa una política de Glue Data Catalog, asegúrese de que la política permita el acceso a la entidad 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 a la entidad 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 Resource-based policy examples for AWS Glue.

Cuando la política anterior está en el catálogo de datos, las consultas de Athena que ejecuta el usuario pueden fallar y mostrar la siguiente respuesta de 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».

Asegúrese de que la entidad 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 Política administrada de AWS: 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 las bases de datos y las tablas en AWS Glue Data Catalog.

Comprobar que la entidad 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; código de estado: 403; código de error: 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».

La entidad de IAM que ejecuta las consultas necesita acceder al bucket de datos de origen y al bucket de resultados de la consulta. Para conceder los permisos necesarios a la entidad de IAM, adjunte una política de IAM a la entidad de IAM.

Ejemplo de política de 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/*"
      ]
    }
  ]
}

En la política anterior, sustituya las siguientes variables:

  • 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 ya ha adjuntado una política de bucket, compruebe que concede permisos de S3 a la entidad de IAM que consulta los datos.

Si su tabla de Athena y sus buckets de S3 están en cuentas diferentes, adjunte las políticas de bucket de S3 que concedan acceso a la entidad de IAM.

En la cuenta que tenga el bucket de S3, adjunte una política de bucket de S3 que conceda acceso a la entidad athena_user en la otra cuenta. El siguiente ejemplo de política permite explícitamente a un usuario de IAM de la cuenta A 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/*"
      ]
    }
  ]
}

En el ejemplo de política anterior, sustituya las siguientes variables:

  • 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 de usuario de IAM (cuenta A)
  • athena_user por el nombre del usuario de IAM (cuenta A)

Para conceder acceso al bucket a todos los usuarios de la otra cuenta, sustituya la clave Principal por una clave que especifique root ("arn:aws:iam::1111222233334444:root").

Nota: La política anterior 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 Acceso entre cuentas a objetos de bucket.

Confirme que la política de bucket de S3 no incluya instrucciones 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 puedo solucionar los errores 403 de acceso denegado de Amazon S3?

Actualizar la política de claves de AWS KMS

Si los datos de origen están cifrados o si la consulta de Athena utiliza una clave de AWS KMS para escribir los resultados cifrados, confirme los siguientes permisos:

  • La política del usuario de IAM permite las acciones de AWS KMS necesarias.
  • La política de claves de AWS KMS permite el acceso al usuario.

El siguiente ejemplo de política de claves de AWS KMS permite todas las acciones de AWS KMS a todos los usuarios de la cuenta 1111222233334444:

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

Nota: En la política anterior, sustituya las variables de ejemplo por sus variables.

Para obtener más información, consulte Key policies in AWS KMS y Permisos para datos cifrados en Amazon S3.

Comprobar que el propietario del bucket de S3 tenga acceso a los objetos

De forma predeterminada, la cuenta que sube un objeto de S3 a un bucket es la propietaria del objeto. Esto es así incluso cuando el bucket es propiedad de otra cuenta. Si los usuarios de 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. Ejecute el comando GetObjectAcl para comprobar el propietario del objeto.

Si el propietario del bucket de S3 y el del objeto son diferentes, el propietario del objeto puede concederle el control total del objeto. Para ello, el propietario del objeto debe ejecutar 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 AWS CLI desde la cuenta del bucket para copiar el objeto sobre sí mismo.****

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

Información relacionada

Gestión de identidades y accesos en Athena

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año