Pourquoi est-ce que je reçois un message d’erreur Access Denied (Accès refusé) pour ListObjectsV2 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). Toutefois, je reçois un message d’erreur Access Denied (Accès refusé) lorsque j’appelle l’opération ListObjectsV2. Comment 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 passe :

1. Amazon S3 répertorie la source et la destination pour vérifier si l’objet existe.

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

Appel CopyObject pour une opération compartiment à compartiment
GetObject pour une opération locale dans un compartiment
PutObject pour une opération locale vers un compartiment

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

Résolution

Configuration de la politique IAM

Vérifiez que vous êtes autorisé à utiliser s3:ListBucket sur les compartiments Amazon S3 vers ou depuis lesquels vous copiez des objets. Vous devez disposer de cette autorisation pour effectuer des actions ListObjectsV2.

Remarque : s3:ListBucket est le nom de l’autorisation qui permet à un utilisateur de répertorier les objets d’un compartiment. ListObjectsV2 est le nom de l’appel d’API qui répertorie les objets d’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 avoir l’autorisation d’accéder à 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 à la fois des politiques IAM et du compartiment pour autoriser s3:ListBucket. Vous n’avez besoin que de l’un d’entre eux pour autoriser l’action.

Important : Si la politique IAM ou la politique de bucket autorisent 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.

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"
  }]
}

Voici un exemple de politique de compartiment qui permet à l’utilisateur arn:aws:iam::123456789012:user/testuser d’accéder à 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 AWS et que Requester Pays est activé, vérifiez que votre politique de compartiment et vos autorisations IAM accordent toutes deux des autorisations ListObjectsV2. Si les autorisations ListObjectsV2 sont correctement accordées, vérifiez la syntaxe de votre commande de synchronisation. Lorsque vous utilisez la commande sync (synchronisation), vous devez inclure l’option de demande --request-payer requester. Dans le cas contraire, vous recevez le message d’erreur Access Denied (Accès refusé).

Par exemple :

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

Informations connexes

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

Politiques relatives aux compartiments et politiques relatives aux utilisateurs

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans