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

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

Solución

Si los permisos no están bien configurados, es posible que aparezca el error «Acceso denegado» en Amazon EMR o Amazon Simple Storage Service (Amazon S3). El error es similar al siguiente mensaje:

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 en primer lugar de las credenciales o el rol especificados en el código de su solicitud

Ejecute el siguiente comando en el nodo maestro del clúster de EMR. Sustituya s3://doc-example-bucket/abc/ por su ruta de Amazon S3.

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

Si este comando se ejecuta correctamente, las credenciales o el rol especificados en el código de la solicitud serán la causa del error «Acceso denegado». Confirme si su solicitud utiliza las credenciales esperadas o asume el rol esperado y tiene acceso a la ruta de Amazon S3. Compruebe si el rol tiene permiso para acceder a la ruta de Amazon S3 con el rol de AWS Identity and Access Management (IAM) mediante la AWS CLI. A continuación, realice una solicitud de prueba a la ruta S3.

Si el comando falla, confirme si está utilizando la versión más reciente de la Interfaz de la línea de comandos de AWS (AWS CLI). A continuación, compruebe lo siguiente para solucionar el error «Acceso denegado»:

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 «Acceso denegado».

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

Para solucionar este problema, ejecute el siguiente comando para comprobar si tiene el permiso de lectura necesario:

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

El resultado podría ser así:

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

Alternativa:

Ejecute el siguiente comando:

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

El resultado podría ser así:

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. Por ejemplo, las acciones de S3 de la siguiente política de IAM proporcionan el acceso de lectura y escritura necesario al bucket de S3 doc-example-bucket:

{
  "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, está utilizando 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 estos 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 conexión de VPC de Amazon S3

Si la tabla de enrutamiento de subred del clúster de EMR tiene una ruta a un punto de conexión de VPC de Amazon S3, confirme si la política del punto de conexión permite las operaciones necesarias de Amazon S3.

Para comprobar y modificar la política de punto de conexión mediante la CLI:

Ejecute el siguiente comando para revisar la política de punto de conexión. Sustituya vpce-xxxxxxxx por su ID de VPC.

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

Si es necesario, ejecute el siguiente comando para cargar una política de punto de conexión modificada. Sustituya el ID de VPC y la ruta del archivo JSON.

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

Para comprobar y modificar la política de punto de conexión mediante la consola de Amazon VPC:

  1. Abra la consola de Amazon VPC.
  2. En el panel de navegación, elija Puntos de conexión.
  3. Seleccione el punto de conexión de Amazon S3 (el que se encuentra en la tabla de enrutamiento de subred del clúster de EMR). A continuación, seleccione la pestaña Política para revisar la política de punto de conexión.
  4. Para añadir las acciones necesarias de Amazon S3, 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 de EC2 o el rol de IAM asignado realicen las operaciones necesarias de Amazon S3.

Para comprobar y modificar las políticas de bucket mediante la CLI:

Ejecute el siguiente comando para revisar una política de bucket. Sustituya doc-example-bucket por el nombre del bucket de origen o destino.

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

Si es necesario, ejecute el siguiente comando para cargar una política de bucket modificada. Sustituya el nombre del bucket y la ruta del archivo JSON.

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

Para comprobar y modificar las políticas de bucket con la consola de Amazon S3:

  1. Abra la consola de Amazon S3.
  2. Elija el bucket.
  3. Seleccione la pestaña Permisos.
  4. Elija Política de bucket para revisar y modificar la política de bucket.

Acceso a buckets de S3 en otra cuenta

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

Por ejemplo, la siguiente política de bucket 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 2 años