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. Pero aparece un error de acceso denegado cuando hago la llamada a la API ListObjectSv2.
Breve descripción
Cuando se ejecuta el comando sync, Amazon S3 emite la llamada a la API ListObjectsV2 para comprobar si el objeto existe en el bucket de origen o de destino. Si el objeto no existe en ninguno de los buckets, 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
Resolución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Troubleshoot AWS CLI errors. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.
Configuración de la política de IAM
Nota: Esta resolución asume que el usuario o rol de AWS Identity Access Management (IAM) ya tiene permisos para realizar las acciones 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.
Compruebe que cuenta con el permiso s3:ListBucket en los buckets de Amazon S3 en los que copiará objetos o desde los que copiará objetos. Debe tener este permiso para realizar acciones de llamada a la API ListObjectsV2.
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 la acción 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 la acción s3:ListBucket. Solo necesita una de las políticas para permitir la acción s3:ListBucket.
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.
El siguiente ejemplo de política de IAM concede el permiso s3:ListBucket:
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "Stmt1546506260896",
"Action": "s3:ListBucket",
"Effect": "Allow",
"Resource": "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET"
}]
}
El siguiente ejemplo de política de bucket concede al usuario arn:aws:iam::123456789012:user/testuser permisos para la acción 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 y tiene activado el pago por solicitante, asegúrese de que la política del bucket y la política de IAM conceden permisos ListObjectsV2. Si los permisos ListObjectsV2 se conceden correctamente, compruebe la sintaxis del comando sync. Si no incluye la opción --request-payer requester al ejecutar el comando sync, aparecerá un error de acceso denegado.
Por ejemplo, ejecute el siguiente comando sync, pero sustituya requester-pays-bucket por el nombre de su bucket:
aws s3 sync ./ s3://requester-pays-bucket/ --request-payer requester
Información relacionada
Ejemplo 2: propietario del bucket que concede permisos de bucket entre cuentas
Políticas basadas en identidad para Amazon S3