Por que recebo 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). 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

AWS OFICIAL
AWS OFICIALAtualizada há 7 meses