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