web-dev-qa-db-fra.com

Accès refusé lors de la synchronisation entre les godets S3 sur différents comptes AWS

J'essaie de configurer la synchronisation entre deux godets sur différents comptes AWS.

J'ai eu cp travaillant avec:

@ubuntu:~$ s3cmd cp -v s3://src/dir/ s3://dest/folder --recursive

Je suis l'utilisateur qui possède /src/dir et j'ai ajouté:

{
"Version": "2012-10-17",
"Id": "Policy1477299702471",
"Statement": [
    {
        "Sid": "Stmt1477299696163",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::awsid:user/name"
        },
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::bucket/*"
    }
]}

À la stratégie d'autorisations de seau sur le godet de test.

Maintenant je suis après aws sync Pour travailler, comme en utilisant s3 cp n'est pas recommandé pour utiliser avec cron.

J'ai essayé

user@ubuntu:~$ aws s3 sync --dryrun s3://src/ s3://dest/ --region eu-central-1

mais je reçois accès refusé:

erreur fatale: une erreur s'est produite (accès) lors de l'appel de l'opération ListObjects: Accès refusé

Comment puis-je obtenir l'accès refusé s'il s'agit de l'utilisateur qui possède le godet et de se synchroniser?

7
OrigamiEye

La cause de votre erreur ListObjects est que vous avez attribué la permission d'accéder au contenu de votre godet (arn:aws:s3:::bucket/*) Mais vous n'avez pas donné des autorisations au seau lui-même (arn:aws:s3:::bucket). La commande ListObjects nécessite un accès au godet.

Pour tester cela, j'ai fait ce qui suit:

  • Utilisé deux comptes AWS: compte a, compte b
  • Créé bucket-a en compte a
  • Créé bucket-b en compte b
  • Créé un utilisateur iam user-a En compte A avec des autorisations pour accéder à bucket-a
  • Ajout d'une stratégie de godet à bucket-b:

    {
      "Id": "CopyBuckets",
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "Stmt1",
          "Action": "s3:*",
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::bucket-b",
            "arn:aws:s3:::bucket-b/*"
          ],
          "Principal": {
            "AWS": [
              "arn:aws:iam::<account-a-id>:user/user-a"
            ]
          }
        }
      ]
    }
    

J'ai ensuite déclenché la synchronisation en utilisant user-a en compte A:

aws s3 sync s3://bucket-a s3://bucket-b --profile user-a

Cela a fonctionné avec succès.

13
John Rotenstein