Por que estou recebendo um erro de acesso negado para ListObjectsV2 quando executo o comando de sincronização no meu bucket do Amazon S3?

Última atualização: 2021-03-26

Estou executando o comando aws s3 sync para copiar objetos de ou para um bucket do Amazon Simple Storage Service (Amazon S3). No entanto, estou recebendo um erro de acesso negado quando chamo a operação ListObjectsV2. Como resolver isso?

Descrição breve

Quando você executa o comando aws s3 sync, o Amazon S3 emite as seguintes chamadas de API: ListObjectsV2, CopyObject, GetObject e PutObject.

Mais especificamente, acontece o seguinte:

1.    O Amazon S3 lista a origem e o destino para verificar se o objeto existe.

2.    Em seguida, o Amazon S3 executa as seguintes chamadas de API:

Chamada CopyObject para uma operação de bucket para bucket
GetObject para uma operação de bucket para local
PutObject para uma operação de local para bucket

Observação: este artigo pressupõe que as chamadas GetObject e PutObject já foram concedidas ao usuário ou à função do AWS Identity Access Management (IAM). Este artigo aborda como resolver o erro de acesso negado causado por permissões de ListBuckets inadequadas.

Resolução

Verifique se você tem a permissão para s3:ListBucket nos buckets do Amazon S3 dos/para os quais você está copiando objetos. Você deve ter essa permissão para executar ações ListObjectsV2.

Observação: s3:ListBucket é o nome da permissão que permite que um usuário liste os objetos em um bucket. ListObjectsV2 é o nome da chamada de API que lista os objetos em um bucket.

Se o seu usuário ou função do IAM pertencer a outra conta da AWS, verifique se as políticas do IAM e do bucket permitem a ação s3:ListBucket. Você deve ter permissão para s3:ListBucket na política do IAM e na política de bucket.

Se o usuário ou a função pertencer à conta do proprietário do bucket, você não precisará das políticas do IAM e do bucket para permitir s3:ListBucket. Apenas uma delas será necessária para permitir a ação.

Importante: se a política do IAM ou a política do bucket já permitirem a ação s3:ListBucket, verifique se há instruções que negam explicitamente essa ação na outra política. Uma instrução de negação explícita substitui uma instrução de permissão.

Veja a seguir um exemplo de política do IAM que concede acesso a s3:ListBucket:

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

Veja a seguir um exemplo de política de bucket que concede acesso a s3:ListBucket para o usuário arn:aws:iam::123456789012:user/testuser:

{
  "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"
      ]
    }
  }]
}