¿Por qué recibo un error de acceso denegado para ListObjectsV2 cuando ejecuto el comando de sincronización en mi bucket de Amazon S3?

Última actualización: 01/11/2021

Estoy ejecutando el comando aws s3 sync para copiar objetos desde o hacia un bucket de Amazon Simple Storage Service (Amazon S3). Sin embargo, recibo un error de acceso denegado cuando hago una llamada a la operación ListObjectsV2. ¿Cómo se soluciona esto?

Descripción corta

Cuando ejecuta el comando aws s3 sync, Amazon S3 emite las siguientes llamadas a la API: ListObjectsV2, CopyObject, GetObject y PutObject.

De manera específica, ocurre lo siguiente:

1.    Amazon S3 enumera los objetos de la fuente y el destino para comprobar si el objeto existe.

2.    Amazon S3 realiza a continuación las siguientes llamadas a la API:

Llamada a CopyObject para una operación de bucket a bucket
GetObject para una operación de bucket a local
PutObject para una operación de local a bucket

Nota: Esta resolución asume que el usuario o rol de AWS Identity Access Management (IAM) tiene permisos para hacer las llamadas a GetObject y PutObject. Esta resolución explica cómo resolver el error de acceso denegado ocasionado por permisos inadecuados de ListBucket o por el uso de una sintaxis incorrecta del comando de sincronización con pago por solicitante.

Resolución

Configuración de la política de IAM

Verifique que cuenta con permiso para s3:ListBucket en los buckets de Amazon S3 a los que va a copiar o desde los que va a copiar objetos. Debe contar con este permiso para llevar a cabo acciones ListObjectsV2.

Nota: s3:ListBucket es el nombre del permiso que permite a un usuario enumerar los objetos en un bucket. ListObjectsV2 es el nombre de la llamada a la API que enumera los objetos de un bucket.

Si su usuario o rol de IAM pertenece a otra cuenta de AWS, compruebe si sus políticas de IAM y bucket permiten llevar a cabo la acción s3:ListBucket. Debe tener permiso para s3:ListBucket tanto en su política del IAM como en la del bucket.

Si su usuario o rol pertenece a la cuenta del propietario del bucket, entonces no necesita ambas políticas de IAM y el bucket para permitir s3:ListBucket. Solo necesita uno de ellos para permitir la acción.

Importante: Si la política del IAM o el bucket ya permiten la acción s3:ListBucket, compruebe la otra política en busca de declaraciones de denegación explícita de la acción. Una declaración de denegación explícita anula una declaración de permiso.

A continuación, se muestra un ejemplo de política de IAM que concede acceso a s3:ListBucket:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "Stmt1546506260896",
    "Action": "s3:ListBucket",
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET"
  }]
}

El siguiente es un ejemplo de política de bucket que concede al usuario arn:aws:iam::123456789012:user/testuser acceso a s3:ListBucket:

{
  "Id": "Policy1546414473940",
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "Stmt1546414471931",
    "Action": "s3:ListBucket",
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET",
    "Principal": {
      "AWS": [
        "arn:aws:iam::123456789012:user/testuser"
      ]
    }
  }]
}

Uso del comando de sincronización con pago por solicitante

Si el bucket pertenece a otra cuenta de AWS y tiene habilitado el pago por solicitante, asegúrese de que la política del bucket y los permisos de IAM conceden permisos de ListObjectsV2. Si los permisos de ListObjectsV2 se conceden correctamente, compruebe la sintaxis de su comando de sincronización. Al utilizar el comando de sincronización, es necesario incluir la opción --request-payer requester. De lo contrario, recibirá un error de “Access Denied” (Acceso denegado).

Por ejemplo:

aws s3 sync ./ s3://requester-pays-bucket/ --request-payer requester

¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?