¿Por qué aparece el error Acceso denegado para ListObjectsV2 cuando ejecuto el comando sync en el bucket de Amazon S3?

3 minutos de lectura
0

Estoy ejecutando el comando sync de AWS S3 para copiar objetos a un bucket de Amazon Simple Storage Service (Amazon S3) o desde ese bucket. Sin embargo, cuando llamo la operación ListObjectsV2 se muestra el error Acceso denegado. ¿Cómo puedo resolver este problema?

Descripción corta

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

En concreto, ocurre lo siguiente:

  1. Amazon S3 indica la fuente y el destino para comprobar si el objeto existe.

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

Llamada 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) ya tiene permisos para hacer llamadas a GetObject y PutObject. Esta resolución explica cómo resolver el error de acceso denegado causado por permisos inadecuados de ListBucket o por el uso de una sintaxis incorrecta del comando sync con Requester Pays.

Resolución

Configuración de la política de IAM

Verifique que cuenta con permiso para usar s3:ListBucket en los buckets de Amazon S3 en los que está copiando objetos o desde los que está copiando objetos. Debe tener este permiso para realizar acciones ListObjectsV2.

Nota: s3:ListBucket es el nombre del permiso con el que el usuario puede enumerar los objetos de un bucket. ListObjectsV2 es el nombre de la llamada a la API que muestra los objetos de un bucket.

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

Si su usuario o rol pertenece a la cuenta del propietario del bucket, no necesita tanto las políticas de IAM como las del bucket para permitir s3:ListBucket. Solo necesita una de las dos para permitir la acción.

Importante: Si la política de IAM o del bucket ya permiten la acción s3:ListBucket, compruebe si la otra política contiene 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 otorga 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 otorga 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"
      ]
    }
  }]
}

Utilización del comando sync 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 ListObjectsV2. Si los permisos de ListObjectsV2 se conceden correctamente, compruebe la sintaxis del comando sync. Al utilizar el comando sync, debe incluir la opción --request-payer requester. De lo contrario, recibirá el error Acceso denegado.

Por ejemplo:

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

Información relacionada

Propietario del bucket que concede permisos de bucket entre cuentas

Políticas de bucket y de usuario

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años