Question Accès refusé lors de la synchronisation entre des compartiments s3 sur différents comptes AWS


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

j'ai eu cp travailler 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 compartiment sur le compartiment de test.

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

j'ai essayé

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

mais l'accès est refusé:

erreur irrécupérable: une erreur s'est produite (AccessDenied) lors de l'appel de l'opération ListObjects: Accès refusé

Comment puis-je obtenir un accès refusé s'il s'agit de l'utilisateur qui possède le compartiment et que la synchronisation est en cours d'exécution?


7
2017-10-24 11:13


origine




Réponses:


La cause de votre ListObjects erreur est que vous avez attribué la permission d'accéder au Contenu de votre seau (arn:aws:s3:::bucket/*) mais vous n'avez pas donné de permissions au seau lui-même (arn:aws:s3:::bucket). le ListObjects commande nécessite l’accès au compartiment.

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

  • Utilisé deux comptes AWS: Compte A, Compte B
  • Créé bucket-a dans le compte A
  • Créé bucket-b dans le compte B
  • Créé un utilisateur IAM user-a dans le compte A avec les autorisations d'accès bucket-a
  • Ajout d'une politique de compartimentage à 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 dans le compte A:

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

Cela a fonctionné avec succès.


12
2017-10-27 07:12



Bonjour, les régions dans lesquelles le seau est en jeu ne sont pas pertinentes? - OrigamiEye
Les noms de compartiment Amazon S3 sont globalement uniques. Par conséquent, les ARN (noms de ressources Amazon) pour les compartiments S3 n'ont pas besoin du compte ni de la région (car ils peuvent être dérivés du nom de compartiment). Cependant, lorsque vous appelez le aws s3 sync commande, la région est importante car vous devez envoyer la demande au compartiment qui est Faire la copie (le compartiment source). - John Rotenstein
Méfiez-vous des autorisations manquantes sur les éléments synchronisés. Lorsque vous effectuez une synchronisation, vous devez également utiliser l'option --grants pour spécifier que le nom canonique du compte B est autorisé, sinon les objets synchronisés ne seront accessibles qu'au propriétaire d'origine à partir du compte A. - CarlR
Si vous souhaitez que le propriétaire correct des objets soit copié dans le compartiment de destination, vous devez exécuter la commande sync à partir du compte de destination et non du compte source. Donc, la logique ici serait inversée. - Josh Bernfeld
Ou utiliser --acl bucket-owner-full-control - John Rotenstein