¿Por qué falla la solicitud de Amazon EMR y se produce la excepción de Amazon S3 HTTP 403 «Acceso denegado»?

6 minutos de lectura
0

Cuando envío una solicitud a un clúster de Amazon EMR, esta falla y se produce una excepción de AmazonS3 HTTP 403 «Acceso denegado».

Resolución

Si no configura los permisos correctamente, es posible que aparezca el error «Access denied» en Amazon EMR o Amazon Simple Storage Service (Amazon S3).

Ejemplo de mensaje de error:

java.io.IOException: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 8B28722038047BAA; S3 Extended Request ID: puwS77OKgMrvjd30/EY4CWlC/AuhOOSNsxfI8xQJXMd20c7sCq4ljjVKsX4AwS7iuo92C9m+GWY=), S3 Extended Request ID: puwS77OKgMrvjd30/EY4CWlC/AuhOOSNsxfI8xQJXMd20c7sCq4ljjVKsX4AwS7iuo92C9m+GWY=

Comprobación de las credenciales o el rol de IAM especificados en el código de la aplicación

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

Use el comando ls en el nodo principal del clúster de Amazon EMR:

aws s3 ls s3://doc-example-bucket/abc/

Nota: Sustituya s3://doc-example-bucket/abc/ por su ruta de Amazon S3.

Si el comando anterior se procesa correctamente, las credenciales o el rol de AWS Identity and Access Management (IAM) están provocando el error Access Denied.

Para resolver este problema, siga estos pasos:

  1. Confirme que la aplicación usa las credenciales esperadas o asume el rol de IAM esperado.
  2. Para comprobar que el rol tiene permisos para usar la ruta de Amazon S3, utilice AWS CLI para asumir el rol de IAM. A continuación, realice una solicitud de prueba a la ruta S3.

Comprobación de la política del rol de perfil de instancia de Amazon EC2

Si el perfil de instancia de Amazon Elastic Compute Cloud (Amazon EC2) no tiene los permisos de lectura y escritura necesarios en los buckets de S3, es posible que aparezca el error Access Denied.

Nota: De forma predeterminada, las solicitudes heredan el acceso a Amazon S3 del rol de IAM para el perfil de instancia de Amazon EC2. Compruebe que las políticas de IAM asociadas al rol permitan las operaciones de S3 necesarias en los buckets de origen y destino.

Para comprobar si tiene el permiso de lectura requerido, use el comando Is:

aws s3 ls s3://doc-example-bucket/myfolder/

Resultado de ejemplo:

An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied

Alternativa:

Use el siguiente comando:

hdfs dfs -ls s3://doc-example-bucket/myfolder

Resultado de ejemplo:

ls: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: RBT41F8SVAZ9F90B; S3 Extended Request ID: ih/UlagUkUxe/ty7iq508hYVfRVqo+pB6/xEVr5WHuvcIlfQnFf33zGTAaoP2i7cAb1ZPIWQ6Cc=; Proxy: null), S3 Extended Request ID: ih/UlagUkUxe/ty7iq508hYVfRVqo+pB6/xEVr5WHuvcIlfQnFf33zGTAaoP2i7cAb1ZPIWQ6Cc=

Asegúrese de que el rol de perfil de instancia tenga los permisos de lectura y escritura necesarios para los buckets de S3.

Ejemplo de política de IAM:

{  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ListObjectsInBucket",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::doc-example-bucket"
      ]
    },
    {
      "Sid": "AllObjectActions",
      "Effect": "Allow",
      "Action": "s3:*Object*",
      "Resource": [
        "arn:aws:s3:::doc-example-bucket/*"
      ]
    }
  ]
}

Comprobación del rol de IAM para la asignación de roles de EMRFS

Si utiliza una configuración de seguridad para especificar los roles de IAM para EMRFS (Amazon EMR File System, Sistema de archivos de EMR), use la asignación de roles. Su solicitud hereda los permisos de S3 del rol de IAM en función de la configuración de la asignación de roles.

La política de IAM asociada a los roles debe tener los permisos de S3 necesarios en los buckets de origen y destino. Para especificar los roles de IAM para solicitudes de EMRFS a Amazon S3, consulte Definición de una configuración de seguridad con roles de IAM para EMRFS.

Comprobación de la política de punto de enlace de VPC de Amazon S3

Si la tabla de enrutamiento de subred del clúster de EMR tiene una ruta a un punto de enlace de nube virtual privada (VPC) de Amazon S3, confirme si la política del punto de enlace permite las operaciones necesarias de Amazon S3.

Uso de AWS CLI

Use el comentario describe-vpc-endpoints de AWS CLI para comprobar la política de punto de enlace:

aws ec2 describe-vpc-endpoints --vpc-endpoint-ids "vpce-########"

Nota: Sustituya vpce-######## por el ID de su VPC.

Use el comando modify-vpc-endpoint para modificar la política de punto de enlace:

aws ec2 modify-vpc-endpoint --vpc-endpoint-id "vpce-########" --policy-document file://policy.json

Nota: Sustituya**--vpc-endpoint-id** y la ruta del archivo JSON.

Uso de la consola de Amazon VPC

Siga estos pasos:

  1. Abra la consola de Amazon VPC.
  2. En el panel de navegación, elija Puntos de enlace.
  3. Seleccione el punto de enlace de Amazon S3 que se encuentra en la tabla de enrutamiento de subred del clúster de EMR.
  4. Seleccione la pestaña Política.
  5. Seleccione Editar política.

Comprobación de las políticas de buckets de origen y destino de S3

Las políticas de buckets especifican las acciones permitidas o denegadas en el caso de las entidades principales. Las políticas de buckets de origen y destino deben permitir que el rol del perfil de instancia o el rol de IAM asignado realicen las operaciones necesarias de Amazon S3.

Para modificar las políticas de buckets, utilice AWS CLI o la consola de Amazon S3.

Uso de AWS CLI

Use el comando get-bucket-policy para obtener la política de buckets:

aws s3api get-bucket-policy --bucket doc-example-bucket

Nota: Sustituya doc-example-bucket por el nombre del bucket de origen o destino.

Modifique la política y, a continuación, guárdela en un archivo JSON.

A continuación, use el comando put-bucket-policy para agregar la política modificada al bucket:

aws s3api put-bucket-policy --bucket doc-example-bucket --policy file://policy.json

Nota: Sustituya el nombre del bucket y la ruta del archivo JSON.

Uso de la consola de Amazon S3

Consulte las instrucciones en Adición una política de bucket mediante la consola de Amazon S3.

Importante: Si su solicitud accede a un bucket de S3 que pertenece a otra cuenta de AWS, el propietario de la cuenta debe incluir su rol de IAM en la política de buckets.

Por ejemplo, la siguiente política de buckets otorga a todos los roles y usuarios de IAM de emr-account acceso total a s3://doc-example-bucket/myfolder.

{
  "Id": "MyCustomPolicy",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowRootAndHomeListingOfCompanyBucket",
      "Principal": {
        "AWS": [
          "arn:aws:iam::emr-account:root"
        ]
      },
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::doc-example-bucket"
      ],
      "Condition": {
        "StringEquals": {
          "s3:prefix": [
            "",
            "myfolder/"
          ],
          "s3:delimiter": [
            "/"
          ]
        }
      }
    },
    {
      "Sid": "AllowListingOfUserFolder",
      "Principal": {
        "AWS": [
          "arn:aws:iam::emr-account:root"
        ]
      },
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::doc-example-bucket"
      ],
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "myfolder/*"
          ]
        }
      }
    },
    {
      "Sid": "AllowAllS3ActionsInUserFolder",
      "Principal": {
        "AWS": [
          "arn:aws:iam::emr-account:root"
        ]
      },
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
       "arn:aws:s3:::doc-example-bucket/myfolder/*",
        "arn:aws:s3:::doc-example-bucket/myfolder*"
      ]
    }
  ]
}

Información relacionada

¿Por qué falla mi trabajo de Spark o Hive en Amazon EMR con una «Ralentización» HTTP 503 de AmazonS3Exception?

¿Por qué mi aplicación de Amazon EMR falla con AmazonS3Exception HTTP 404 «No encontrado»?

Error responses

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

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 4 meses