2
votes

Comment réparer AccessDenied en appelant CopyObject

J'essaie de copier des fichiers d'un compartiment d'un compte A vers un autre compartiment mais d'un compte B. Lorsque j'essaye de synchroniser les fichiers avec la commande

aws s3 sync s3: // BUCKET_A s3: // BUCKET_B

Il renvoie la sortie suivante:

{
    "Version": "2012-10-17",
    "Statement": [
      {
          "Effect": "Allow",
          "Action": [
              "s3:ListBucket",
              "s3:GetObject",
              "s3:PutObject",
              "s3:PutObjectAcl"
          ],
          "Resource": [
              "arn:aws:s3:::BUCKET_A",
              "arn:aws:s3::: BUCKET_A/*"
          ]
      },
      {
          "Effect": "Allow",
          "Action": [
              "s3:ListBucket",
              "s3:GetObject",
              "s3:PutObject",
              "s3:PutObjectAcl"
          ],
          "Resource": [
              "arn:aws:s3:::BUCKET_B",
              "arn:aws:s3:::BUCKET_B/*"
          ]
      }
    ]
}

Ceci est la politique qui a été attachée à l'utilisateur créé dans le compte B (où seront copiés les fichiers du bucket A):

copy failed: s3://BUCKET_A to s3://BUCKET_B An error occurred (AccessDenied) when calling the CopyObject operation: Access Denied

Je manque probablement une autorisation? Je ne trouve pas l'autorisation CopyObject d'ajouter dans ma politique d'utilisateur / de compartiment


0 commentaires

3 Réponses :


3
votes

Du côté de votre stratégie de rôle IAM, vous aurez besoin des éléments suivants:

{
         "Sid": "Example permissions",
         "Effect": "Allow",
         "Principal": {
            "AWS": "arn:aws:iam::your_iam_policy"
         },
         "Action": [
              "s3:ListBucket",
              "s3:GetObject",
              "s3:PutObject",
              "s3:PutObjectAcl"
          ],
         ],
         "Resource": [
            "arn:aws:s3:::BUCKET_B"
         ]
      }

Vous devez ajouter ces autorisations à BUCKET_B

  {
    "Version": "2012-10-17",
    "Statement": [
      {
          "Effect": "Allow",
          "Action": [
              "s3:ListBucket",
              "s3:GetObject",
              "s3:PutObject",
              "s3:PutObjectAcl"
          ],
          "Resource": [
              "arn:aws:s3:::BUCKET_A",
              "arn:aws:s3::: BUCKET_A/*"
          ]
      },
      {
          "Effect": "Allow",
          "Action": [
              "s3:ListBucket",
              "s3:GetObject",
              "s3:PutObject",
              "s3:PutObjectAcl"
          ],
          "Resource": [
              "arn:aws:s3:::BUCKET_B",
              "arn:aws:s3:::BUCKET_B/*"
          ]
      }
    ]
}


5 commentaires

Si vos buckets ne sont pas multi-comptes, vous devez simplement vous assurer que le rôle a accès à votre bucket sur lequel vous écrivez. S'il s'agit de comptes croisés, vous devez autoriser les autorisations Iamrole du côté de la stratégie de compartiment.


Les seaux sont dans différents comptes aws. J'ai fait ce qui suit: medium.com/tensult/… . J'ai accès à la liste mais lorsque je veux copier d'un seau à un autre, l'autorisation est refusée comme je l'ai dit dans la question: /!


Mes excuses, essayez également de suivre ceci, docs.aws.amazon.com/AmazonS3/latest/dev/…


salut tortue! Pas de problème :) J'ai résolu le problème. Apparemment, la permission que j'ai manquée était pour l'utilisateur B dans le seau de stratégie du compte A. Laissez-moi nettoyer le code et vérifier et je répondrai à nouveau avec la solution finale!


Dans mon cas, j'ai ajouté IAMFullAccess donc il n'y a pas eu d'erreur. Merci à @ user8128927



1
votes

Vous devrez configurer l'AWS CLI sur votre machine locale avec l'utilisateur IAM sur le compte B.

Vous pouvez avoir autant de profils que vous le souhaitez sur votre configuration cli locale. Reportez-vous à Configuration de l'AWS CLI pour plus de détails.

Maintenant, lors de la copie, ajoutez le paramètre --profile à votre commande de synchronisation. par exemple.

aws s3 sync s3://BUCKET_A s3://BUCKET_B --profile <NEW-AWS-CLI-PROFILE-FOR-ACCOUNT-B>


0 commentaires

-1
votes

AWSS3MIGRATION

1. CREATECREDENTIAL pour le compte à partir duquel vous exécutez la commande aws_s3_sync_bucketsource_bucketdest: awsgui, mysecuritycredential, acess_keys, create_new_access_key;

1b. exécutez la commande: aws_configure dans le shell bash;

2. awsgui, s3, bucket_x1, aperçu, sélectionnez tous les répertoires, actions, make_everything_public;

3. awsgui, s3, bucket_x1, permission, control_list, accès public;

4. awsgui, s3, bucket_x1, vue d'ensemble, sélectionnez tous les dirs, actions, changez la classe storege en standard.

5. faites également le point 2, 3, 4 pour le bucket_2.

LÉGENDE: bucket_x1 est la source, bucket_x2 est la destination.


0 commentaires