Pourquoi un message d’erreur Accès refusé pour ListObjectsV2 s’affiche lorsque j’exécute la commande de synchronisation sur mon compartiment Amazon S3 ?

Lecture de 3 minute(s)
0

J’exécute la commande aws s3 sync pour copier des objets depuis ou vers un compartiment Amazon Simple Storage Service (Amazon S3). Mais je reçois un message d’erreur Accès refusé lorsque j’effectue l’appel d’API ListObjectsV2.

Brève description

Lorsque vous exécutez la commande de synchronisation, Amazon S3 émet l’appel d’API ListObjectsV2 pour vérifier si l’objet existe dans le compartiment d’origine ou de destination. Si l’objet n’existe dans aucun des compartiments, Amazon S3 effectue les appels d’API suivants :

  • Appel CopyObject pour une opération d’un compartiment à un autre
  • GetObject pour une opération d’un compartiment vers l’emplacement local
  • PutObject pour une opération de l’emplacement local vers un compartiment

Solution

Remarque : si des erreurs surviennent lorsque vous exécutez des commandes de l’interface de la ligne de commande AWS (AWS CLI), consultez la page Résoudre les erreurs liées à AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Configuration de la politique IAM

Remarque : cette solution suppose que les appels GetObject et PutObject sont déjà accordés à l’utilisateur ou au rôle de gestion des identités et des accès AWS (AWS IAM). Cette solution explique comment résoudre l’erreur d’accès refusé provoquée par des autorisations ListBucket incorrectes ou par l’utilisation d’une syntaxe de commande de synchronisation incorrecte avec Requester Pays.

Vérifiez que vous disposez de l’autorisation s3:ListBucket sur les compartiments Amazon S3 vers ou depuis lesquels vous allez copier des objets. Vous devez disposer de cette autorisation pour effectuer des appel d’API ListObjectsV2.

Si votre utilisateur ou votre rôle IAM appartiennent à un autre compte AWS, vérifiez si vos politiques IAM et de compartiment autorisent l’action s3:ListBucket. Vous devez avoir l’autorisation s3:ListBucket à la fois sur votre politique IAM et sur votre politique de compartiment.

Si votre utilisateur ou votre rôle appartient au compte du propriétaire du compartiment, vous n’avez pas besoin des deux politiques, IAM et du compartiment, pour autoriser s3:ListBucket. Une seule des deux politiques suffit pour autoriser l’action s3:ListBucket.

Important : si la politique IAM ou la politique de compartiment autorise déjà l’action s3:ListBucket, vérifiez si l’autre politique ne contient pas de déclarations qui refusent explicitement l’action. Une instruction de refus explicite remplace une instruction d’autorisation.

L’exemple de politique IAM suivant accorde l’autorisation s3:ListBucket :

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

L’exemple de politique de compartiment suivant accorde à l’utilisateur arn:aws:iam::123456789012:user/testuser des autorisations pour 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"  
      ]  
    }  
  }]  
}

Utilisation de la commande de synchronisation avec Requester Pays

Si votre compartiment appartient à un autre compte et que Requester Pays est activé, vérifiez que vos politiques IAM et de compartiment accordent toutes deux des autorisations ListObjectsV2. Si les autorisations ListObjectsV2 sont correctement accordées, vérifiez la syntaxe de votre commande de synchronisation. Si vous n’incluez pas l’option --request-payer requester lorsque vous exécutez la commande de synchronisation, vous obtenez une erreur d’accès refusé.

Par exemple, exécutez la commande de synchronisation suivante, mais remplacez requester-pays-bucket par le nom de votre compartiment :

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

Informations complémentaires

Le propriétaire du compartiment accorde des autorisations de compartiment entre comptes

Identity-based policies for Amazon S3

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 4 mois