Pourquoi des erreurs d'accès refusé s'affichent-elles sur les actions ListObjects ou ListObjectsV2 lorsque j'exécute une commande de synchronisation sur mon compartiment Amazon S3 ?

Date de la dernière mise à jour : 29/05/2020

J'exécute la commande aws s3 sync pour copier les répertoires et les préfixes de mon système local vers un compartiment Amazon Simple Storage Service (Amazon S3), ou d'un compartiment vers un autre. Toutefois, je reçois des erreurs d'accès refusé sur les actions ListObjects ou ListObjectsV2 au cours de l'opération. Comment puis-je résoudre ce problème ?

Résolution

Vérifiez que vous disposez de l'autorisation pour s3:ListBucket sur les compartiments Amazon S3 vers ou depuis lesquels vous copiez des objets. Vous devez disposer de cette autorisation pour pouvoir effectuer l'action ListObjects ou ListObjectsV2.

Remarque : s3:ListBucket est le nom de l'autorisation qui permet à un utilisateur de répertorier les objets d'un compartiment. ListObjects ou ListObjectsV2 est le nom de l'appel d'API qui répertorie les objets d'un compartiment.

Si votre utilisateur ou rôle AWS Identity and Access Management (IAM) appartient au même compte AWS que le compartiment, vérifiez que votre stratégie IAM ou la stratégie de compartiment vous permet d'utiliser l'action s3:ListBucket. Si vous appartenez au même compte, vous n'avez pas besoin à la fois de la stratégie IAM et de la stratégie de compartiment pour autoriser s3:ListBucket. Vous n'avez besoin que d'une seule des deux pour autoriser l'action.

Important : si la stratégie IAM ou la stratégie de compartiment autorise déjà l'action s3:ListBucket, recherchez dans l'autre stratégie les instructions qui refusent explicitement l'action. Une instruction de refus explicite remplace une autorisation explicite.

Si votre utilisateur ou rôle IAM appartient à un autre compte que le compartiment S3, vous devez avoir l'autorisation d'accéder à s3:ListBucket sur stratégie IAM et la stratégie de compartiment.

Voici un exemple de stratégie IAM qui accorde l'accès à s3:ListBucket :

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

Voici un exemple de stratégie de compartiment qui accorde à l'utilisateur arn:aws:iam::123456789012: user/testuser l'accès à 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"
      ]
    }
  }]
}