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

3 minuto de leitura
0

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 faço para resolver isso?

Breve descrição

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 bucket para bucket
GetObject para uma operação bucket para local
PutObject para uma operação local para bucket

Observação: essa resolução pressupõe que as chamadas GetObject e PutObject já tenham sido concedidas ao usuário ou perfil do AWS Identity Access Management (IAM). Esta resolução aborda como resolver o erro de acesso negado causado por permissões impróprias ListBucket ou pelo uso de uma sintaxe incorreta do comando sync com Solicitante paga.

Resolução

Configurar a política do IAM

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

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

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

Se seu usuário ou perfil pertencer à conta do proprietário do bucket, você não precisará das políticas do IAM e do bucket para permitir s3:ListBucket. Você só precisa de uma delas 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 a outra política para ver se há declarações que neguem explicitamente a ação. Uma declaração de negação explícita substitui uma declaraçã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 do bucket que concede ao usuário arn:aws:iam::123456789012:user/testuser acesso 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"
      ]
    }
  }]
}

Usar o comando sync com Solicitante paga

Se seu bucket pertencer a outra conta da AWS e tiver Solicitante paga ativado, verifique se sua política do bucket e as permissões do IAM concedem permissões ListObjectsV2. Se as permissões ListObjectsV2 forem concedidas corretamente, verifique a sintaxe do comando sync. Ao usar o comando sync, você deve incluir a opção --request-payer requester. Caso contrário, receberá um erro de acesso negado.

Por exemplo:

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

Informações relacionadas

Proprietário do bucket concede permissões de bucket entre contas

Políticas do bucket e políticas do usuário

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos