Estou executando o comando aws s3 sync para copiar objetos de ou para um bucket do Amazon Simple Storage Service (Amazon S3). Porém, recebo um erro de acesso negado quando faço a chamada à API ListObjectsV2.
Breve descrição
Quando você executa o comando sync, o Amazon S3 emite a chamada da API ListObjectsV2 para verificar se o objeto existe no bucket de origem ou de destino. Se o objeto não existir em nenhum dos compartimentos, o Amazon S3 executará 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
Resolução
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Configurar a política do IAM
Observação: essa resolução pressupõe que as ações GetObject e PutObject já tenham sido concedidas ao usuário ou perfil do AWS Identity Access Management (IAM). Essa resolução aborda como resolver o erro de acesso negado causado por permissões impróprias do ListBucket ou pela sintaxe incorreta do comando sync com o Pagamento pelo solicitante.
Verifique se você tem a permissão s3:ListBucket nos buckets do Amazon S3 para os quais você copiará objetos. Você deve ter essa permissão para executar as ações da chamada da API ListObjectsV2.
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 a permissão s3:ListBucket na sua política do IAM e 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ê precisa de apenas uma das políticas para permitir a ação s3:ListBucket.
Importante: se a política do IAM ou a política do bucket já permitir a ação s3:ListBucket, verifique se há declarações na outra política que neguem explicitamente a ação. Uma declaração de negação explícita substitui uma declaração de permissão.
O seguinte exemplo de política do IAM concede permissão para s3:ListBucket:
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "Stmt1546506260896",
"Action": "s3:ListBucket",
"Effect": "Allow",
"Resource": "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET"
}]
}
A política de bucket de exemplo a seguir concede ao usuário permissões arn:aws:iam::123456789012:user/testuser para 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 Pagamento pelo solicitante
Se o seu bucket pertencer a outra conta e tiver a opção Pagamento pelo solicitante ativada, verifique se a política do bucket e a política do IAM concedem permissões para ListObjectsV2. Se as permissões ListObjectsV2 forem concedidas corretamente, verifique a sintaxe do comando sync. Se você não incluir a opção --request-payer requester ao executar o comando sync, receberá um erro de acesso negado.
Por exemplo, execute o seguinte comando sync, mas substitua requester-pays-bucket pelo nome do seu bucket:
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 baseadas em identidade para o Amazon S3