Pourquoi est-ce que j'obtiens une erreur Access Denied (Accès refusé) pour ListObjectsV2 lorsque j'exécute la commande sync sur mon compartiment Amazon S3 ?

Dernière mise à jour : 10/08/2022

J'exécute la commande aws s3 sync pour copier des objets vers ou depuis un compartiment Amazon Simple Storage Service (Amazon S3). Cependant, je reçois une erreur Access Denied (Accès refusé) lorsque j'appelle l'opération ListObjectsV2. Comment puis-je résoudre ce problème ?

Brève description

Lorsque vous exécutez la commande aws s3 sync, Amazon S3 émet les appels d'API suivants : ListObjectsV2, CopyObject, GetObject et PutObject.

Plus précisément, voici ce qui se produit :

1.    Amazon S3 répertorie la source et la destination afin de vérifier si l'objet existe.

2.    Amazon S3 effectue ensuite les appels d'API suivants :

Appel CopyObject pour une opération de compartiment à compartiment
GetObject pour une opération de compartiment à emplacement local
PutObject pour une opération d'emplacement local à compartiment

Remarque : cette solution suppose que les appels GetObject et PutObject sont déjà accordés à l'utilisateur ou rôle AWS Identity Access Management (IAM). Cette solution explique comment résoudre l'erreur Access Denied (Accès refusé) causée par des autorisations ListBucket inappropriées ou par l'utilisation incorrecte de la syntaxe de commande sync avec le paiement par le demandeur.

Solution

Configuration de la politique IAM

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 effectuer les actions ListObjectsV2.

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

Si votre utilisateur ou votre rôle IAM appartient à un autre compte AWS, vérifiez si vos politiques IAM et de compartiment autorisent l'action s3:ListBucket. Vous devez disposer de l'autorisation pour s3:ListBucket 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 de ces deux politiques à la fois pour autoriser s3:ListBucket. Une seule suffit pour autoriser l'action.

Important : si la politique IAM ou celle de compartiment autorise déjà l'action s3:ListBucket, vérifiez l'autre politique afin de vous assurer qu'elle ne comporte aucune instruction refusant explicitement l'action. Une instruction de refus explicite prime sur une instruction d'autorisation.

Voici un exemple de politique IAM qui autorise l'accès à s3:ListBucket :

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

L'exemple suivant de politique de compartiment autorise l'accès arn:aws:iam::123456789012:user/testuser à 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 sync avec le paiement par le demandeur

Si votre compartiment appartient à un autre compte AWS et que le paiement par le demandeur est activé, vérifiez que votre politique de compartiment et les autorisations IAM accordent des autorisations ListObjectsV2. Si les autorisations ListObjectsV2 sont correctement accordées, vérifiez la syntaxe de votre commande sync. Lorsque vous utilisez la commande sync, vous devez inclure l'option --request-payer requester. Autrement, une erreur Access Denied (Accès refusé) s'affichera.

Par exemple :

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

Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?