¿Por qué mi trabajo de AWS Glue devuelve el error 403 de acceso denegado?

8 minutos de lectura
0

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

Breve descripción

Por lo general, aparece un error de acceso denegado por una de las siguientes razones:

  • 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 conexión 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), cuya política no otorga los permisos mínimos requeridos al rol de IAM para usar la clave.
  • El bucket de S3 tiene activada la función Pago por solicitante.
  • El acceso al bucket de S3 está restringido por las políticas de control de servicios de AWS Organizations.

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

Resolución

Comprobar que el rol de IAM tenga los permisos necesarios para acceder al bucket de S3

El rol de IAM que ejecuta el trabajo de AWS Glue necesita acceder al bucket de S3. Puede conceder los permisos necesarios al rol de IAM adjuntando 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, cree y adjunte una política administrada por el cliente para obtener permisos para colocar objetos de S3 mientras escribe.

Haga lo siguiente para actualizar los permisos del rol de IAM para acceder al bucket:

1.    Abra la consola de IAM.

2.    Abra 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, expanda cada política para ver su documento de política de JSON.

4.    En los documentos de la política de JSON, busque las políticas con el nombre del bucket. Después, confirme que esas políticas permiten las acciones de S3 correctas en el bucket.

5.    Si el rol de IAM no concede el acceso necesario al bucket, agregue una política que conceda los permisos adecuados. Por ejemplo, la siguiente política de IAM otorga 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/*"
      ]
    }
  ]
}

Asegúrese de reemplazar DOC-EXAMPLE-BUCKET en la política por el nombre de su bucket de S3.

Comprobar que la política de bucket otorgue los permisos necesarios para el rol de IAM

Revise si en la política de bucket aparece lo siguiente:

  • Cualquier declaració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.

Haga lo siguiente para revisar y modificar la política de bucket a fin de conceder el acceso necesario al rol de IAM:

1.    Abra la consola de Amazon S3.

2.    Seleccione Buckets en el panel de navegación.

3.    En la lista de buckets, abra el bucket que quiera revisar.

4.    Seleccione Permisos y, a continuación, desplácese hacia abajo hasta la sección Política de bucket.

5.    Revise la política de bucket para ver si hay alguna declaración que deniegue el acceso del rol al bucket.

6.    Modifique la política de bucket para editar o eliminar cualquier declaración que deniegue el acceso del rol de IAM al bucket.

Para ver ejemplos de políticas de bucket, consulte Ejemplos de política de bucket.

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

De forma predeterminada, un objeto de S3 pertenece a la cuenta de AWS que lo cargó. Esto es así 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 sus usuarios o roles no pueden acceder. Puede comprobar el propietario del objeto ejecutando el comando GetObjectAcl.

Si los usuarios/roles de IAM de otras cuentas cargan objetos a su bucket de S3, configure la propiedad del objeto de S3. A continuación, añada 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, el propietario del objeto se convierte automáticamente en el propietario del bucket siempre que el objeto se cargue con la ACL bucket-owner-full-control. Para obtener más información, consulte When other AWS accounts upload objects to my Amazon S3 bucket, how can I require that they grant me full control of the objects?

Comprobar que la política de punto de conexión de Amazon VPC permite realizar las acciones necesarias en el bucket de S3

Asegúrese de que la política de punto de conexión de VPC incluya los permisos necesarios para acceder a los buckets y objetos de S3 cuando se cumplan las dos condiciones siguientes:

  • Su trabajo de AWS Glue lee o escribe objetos en S3.
  • La conexión se enruta a S3 mediante un punto de conexión de VPC.

Por ejemplo, la siguiente política de punto de conexión de VPC solo permite acceso al bucket DOC-EXAMPLE-BUCKET. Si su bucket no aparece como recurso permitido en la política, los usuarios o roles no podrán acceder a él a través del punto de conexión de VPC.

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

Asegúrese de reemplazar DOC-EXAMPLE-BUCKET en la política por el nombre de su bucket de S3.

Si los usuarios o roles cargan objetos con una ACL, debe actualizar la política de punto de conexión 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/*"
    }
  ]
}

Comprobar que la política de claves de AWS KMS permite el acceso al rol de IAM

Si su trabajo de extracción, transformación y carga (ETL) lee o escribe datos cifrados en Amazon S3, compruebe lo siguiente:

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

Incluya los siguientes permisos en la política del rol de IAM para permitir las acciones de AWS KMS necesarias:

{
  "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"
  }
}

Reemplace el ARN de la política por el ARN de su elección.

Para obtener más información, consulte Setting up encryption in AWS Glue.

Revise 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, consulte Using key policies in AWS KMS.

Incluir el encabezado de Pago por solicitante si el bucket tiene activada la función Pago por solicitante

Si el bucket de S3 tiene activada la función Pago por solicitante, todas las solicitudes al bucket procedentes del trabajo de AWS Glue deben incluir el encabezado de Pago por solicitante. Las solicitudes de AWS Glue a Amazon S3 no incluyen el encabezado de Pago por solicitante de forma predeterminada. Sin este encabezado, se produce un error en la llamada de la API a un bucket de Pago por solicitante y se produce una excepción de acceso denegado. Para añadir el encabezado de Pago por solicitante a un script de ETL, utilice 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, consulte How can I access Amazon S3 Requester Pays buckets from AWS Glue, Amazon EMR, or Amazon Athena?

Comprobar que las políticas de control de servicios de AWS Organizations conceden acceso a S3

Si utiliza AWS Organizations, revise las políticas de control de servicios para asegurarse 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 de acceso denegado.

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

Para obtener más información, consulte Habilitar todas las características en la organización.


Información relacionada

¿Cómo soluciono los errores 403 Access Denied (Acceso denegado) de Amazon S3?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años