Saltar al contenido

¿Por qué mi trabajo de AWS Glue devuelve el error «403 Access Denied»?

8 minutos de lectura
0

Mi trabajo de AWS Glue devuelve el error «403 Access Denied» cuando el trabajo intenta leer o escribir en un bucket de Amazon Simple Storage Service (Amazon S3).

Descripción corta

Los siguientes ejemplos son los motivos más comunes por los que puede aparecer el error «Access Denied»:

  • El rol de AWS Identity and Access Management (IAM) carece de los permisos necesarios para acceder al bucket.
  • Las políticas de bucket de Amazon S3 no conceden los permisos necesarios al rol de IAM.
  • El propietario del bucket de S3 difiere del propietario del objeto.
  • La política de punto de enlace de Amazon Virtual Private Cloud (Amazon VPC) no incluye los permisos necesarios para acceder al bucket de S3.
  • El objeto está cifrado por AWS Key Management Service (AWS KMS). La política de AWS KMS no concede los permisos mínimos requeridos al rol de IAM para usar la clave.
  • El bucket de S3 tiene activada la opción Pago por solicitante.
  • Las políticas de control de servicios de AWS Organizations restringen el acceso al bucket de S3.

Resolución

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

Actualización de los permisos del rol de IAM para acceder al bucket de S3

El rol de IAM que ejecuta el trabajo de AWS Glue necesita acceder al bucket de S3. Para conceder los permisos necesarios al rol de IAM, adjunta una política de IAM al rol de IAM. También se recomienda adjuntar la política administrada AWSGlueServiceRole al rol de IAM para confirmar que se proporcionan los permisos de trabajo básicos de AWS Glue. Además, crea y adjunta una política administrada por el cliente para obtener permisos para colocar objetos de S3 mientras escribes.

Para actualizar los permisos del rol de IAM para acceder al bucket, sigue estos pasos:

  1. Abre la consola de IAM.
  2. Abre el rol de IAM que está asociado al trabajo de AWS Glue y que requiere acceso al bucket.
  3. En la pestaña Permisos del usuario o rol de IAM, expande cada política para ver su documento de política de JSON.
  4. En los documentos de la política de JSON, busca las políticas con el nombre del bucket. Después, confirma que esas políticas permiten las acciones de S3 correctas en el bucket. Si el rol de IAM no concede el acceso necesario al bucket, agrega una política que conceda los permisos adecuados. Por ejemplo, la siguiente política de IAM concede acceso al rol de IAM para poner objetos (s3:PutObject) en el bucket de S3 DOC-EXAMPLE-BUCKET:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "ExampleStmt",
          "Action": "s3:PutObject",
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
          ]
        }
      ]
    }

Nota: Sustituye DOC-EXAMPLE-BUCKET en la política por el nombre de tu bucket de S3.

Actualización de la política de bucket para conceder los permisos necesarios al rol de IAM

Revisa la política de bucket para ver las siguientes configuraciones:

  • Cualquier instrucción que deniegue explícitamente al bucket el acceso al rol de IAM.
  • Cualquier permiso y condición que falten y que pudieran restringir el acceso al rol de IAM.

Para revisar y modificar la política de bucket a fin de conceder el acceso necesario al rol de IAM, sigue estos pasos:

  1. Abre la consola de Amazon S3.
  2. En el panel de navegación, selecciona Buckets.
  3. Selecciona el bucket de S3.
  4. En la página Permisos, en Política de bucket, revisa la política de bucket para ver si hay instrucciones que denieguen el acceso del rol al bucket.
  5. Modifica la política de bucket para editar o eliminar cualquier instrucción que deniegue el acceso del rol de IAM al bucket.

Para ver ejemplos de políticas de bucket, consulta Ejemplos de políticas de bucket de Amazon S3.

Actualización del propietario de un objeto

De forma predeterminada, la cuenta de AWS que carga un objeto es propietaria del objeto de S3. Esta configuración se cumple incluso cuando el bucket es propiedad de otra cuenta. Si otras cuentas pueden cargar objetos al bucket, compruebe a qué cuenta pertenecen los objetos a los que la identidad de IAM no puede acceder. Para comprobar qué cuenta es la propietaria del objeto, ejecuta el comando GetObjectAcl.

Si las identidades de IAM de otras cuentas cargan objetos a tu bucket de S3, configura Propiedad de objetos de S3. A continuación, agrega una política de bucket que exija que los objetos se carguen con la lista de control de acceso (ACL) bucket-owner-full-control. Al agregar la política de bucket, la política cambia automáticamente el propietario del objeto al propietario del bucket siempre que el objeto se cargue con la ACL bucket-owner-full-control. Para obtener más información, consulta Cuando otras cuentas de AWS carguen objetos en mi bucket de Amazon S3, ¿cómo puedo exigir que me concedan el control total sobre esos objetos?

Actualización de la política de punto de enlace de Amazon VPC

Actualiza la política de punto de enlace de VPC para que incluya los permisos necesarios para acceder a los buckets y objetos de S3 cuando se cumplan las dos condiciones siguientes:

  • Tu trabajo de AWS Glue lee o escribe objetos en Amazon S3.
  • La conexión usa un punto de enlace de VPC para enrutar a Amazon S3.

Por ejemplo, la siguiente política de punto de enlace de VPC solo permite acceso al bucket DOC-EXAMPLE-BUCKET. Si tu bucket no aparece como recurso permitido en la política, los usuarios o roles no podrán usar el punto de enlace de VPC para acceder al bucket:

{
  "Statement": [
    {
      "Sid": "Access-to-specific-bucket-only",
      "Principal": "*",
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
    }
  ]
}

Nota: Sustituye DOC-EXAMPLE-BUCKET en la política por el nombre de tu bucket de S3.

Si los usuarios o roles cargan objetos con una ACL, debes actualizar la política de punto de enlace de VPC para conceder acceso a la acción PutObjectAcl. Por ejemplo:

{
  "Statement": [
    {
      "Sid": "Access-to-specific-bucket-only",
      "Principal": "*",
      "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
    }
  ]
}

Actualización de la política de claves de AWS KMS para permitir el acceso al rol de IAM

Si tu trabajo de extracción, transformación y carga (ETL) lee o escribe datos cifrados en Amazon S3, el trabajo debe tener las siguientes configuraciones:

  • La política del rol de IAM debe incluir los permisos necesarios para las acciones de AWS KMS.
  • La política de claves de AWS KMS debe incluir los permisos necesarios para el rol de IAM.

Para permitir las acciones de AWS KMS necesarias, incluye los siguientes permisos en la política del rol de IAM:

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Decrypt",
      "kms:Encrypt",
      "kms:GenerateDataKey"
    ],
    "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
  }
}

Nota: Sustituye el nombre de recurso de Amazon (ARN) de la política por el ARN de tu elección.

Para obtener más información, consulta Configuración del cifrado en AWS Glue.

Revisa la política de claves de KMS para comprobar si permite el acceso al rol del trabajo de AWS Glue. Para obtener más información sobre las políticas de claves, consulta Políticas de claves en AWS KMS.

Revisión de la opción Pago por solicitante en el bucket de S3

Si el bucket de S3 tiene activada la opción Pago por solicitante, todas las solicitudes al bucket procedentes del trabajo de AWS Glue deben incluir el encabezado de Pago por solicitante. De forma predeterminada, las solicitudes de AWS Glue a Amazon S3 no incluyen el encabezado de Pago por solicitante. Sin este encabezado, se produce un error en la llamada a la API a un bucket de Pago por solicitante y se produce una excepción «Access Denied». Para agregar el encabezado de Pago por solicitante a un script de ETL, utiliza hadoopConfiguration().set() para incluir fs.s3.useRequesterPaysHeader en la variable de GlueContext o en la variable de sesión de Apache Spark. Para obtener más información, consulta ¿Cómo puedo acceder a buckets de pago por solicitante de Amazon S3 desde AWS Glue, Amazon EMR o Athena?

Revisión de las políticas de control de servicios de AWS Organizations

Si utilizas AWS Organizations, revisa las políticas de control de servicios para asegurarte de que se permite el acceso a Amazon S3. Por ejemplo, la siguiente política deniega explícitamente el acceso a Amazon S3 y produce un error «Access Denied»:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}

Para obtener más información, consulta Activación de todas las características para una organización con AWS Organizations.

Información relacionada

¿Cómo soluciono los errores de acceso denegado 403 de Amazon S3?

OFICIAL DE AWSActualizada hace un año