Comment puis-je copier des objets S3 depuis un autre compte AWS ?

Lecture de 5 minute(s)
0

Je souhaite copier des objets Amazon Simple Storage Service (Amazon S3) entre des comptes AWS. Ensuite, je veux m'assurer que les objets copiés appartiennent au compte de destination.

Résolution

Important : Dans S3, les objets ne sont pas toujours automatiquement détenus par le compte AWS qui les charge. Lorsque vous modifiez la propriété de l'objet, il est recommandé d'utiliser le paramètre Bucket owner enforced (Propriétaire du compartiment imposé). Toutefois, cette option désactive toutes les ACL de compartiment et les ACL de tous les objets de votre compartiment.

Lorsque le paramètre Bucket owner enforced (Propriétaire du compartiment imposé) est appliqué dans S3 Object Ownership (la propriété des objets S3), le même propriétaire du compartiment est automatiquement propriétaire de tous les objets d'un compartiment Amazon S3. La fonctionnalité Bucket owner enforced (Propriétaire du compartiment imposé) désactive également toutes les listes de contrôle d'accès (ACL). Cela simplifie la gestion de l'accès aux données stockées dans Amazon S3. Toutefois, pour les compartiments existants, un objet S3 appartient toujours au compte AWS qui l'a chargé, sauf si vous désactivez volontairement les ACL.

Si votre méthode actuelle de partage d'objets repose sur l'utilisation des ACL, identifiez les principaux utilisateurs qui utilisent les ACL pour accéder aux objets. Pour plus d'informations sur la manière de vérifier les autorisations avant de désactiver les ACL, consultez la section Conditions préalables à la désactivation des ACL.

Si vous ne parvenez pas à désactiver vos ACL, procédez comme suit pour devenir propriétaire des objets jusqu'à ce que vous puissiez ajuster votre politique de compartiment :

1.    Dans le compte source, créez une politique gérée par le client AWS Identity and Access Management (IAM) qui accorde à une identité IAM (utilisateur ou rôle) les autorisations appropriées. L'utilisateur IAM doit être autorisé à récupérer des objets du compartiment source et les remettre dans le compartiment de destination. Vous pouvez utiliser une politique IAM similaire à l'exemple suivant :

{
  "Version": "2012-10-17",
  "Statement": \[
    {
      "Effect": "Allow",
      "Action": \[
        "s3:ListBucket",
        "s3:GetObject"
      \],
      "Resource": \[
        "arn:aws:s3:::source-DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::source-DOC-EXAMPLE-BUCKET/\*"
      \]
    },
    {
      "Effect": "Allow",
      "Action": \[
        "s3:ListBucket",
        "s3:PutObject",
        "s3:PutObjectAcl"
      \],
      "Resource": \[
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/\*"
      \]
    }
  \]
}

Remarque : cet exemple de politique IAM inclut uniquement les autorisations minimales requises pour répertorier des objets et copier des objets entre des compartiments de différents comptes. Vous devez personnaliser les actions S3 autorisées en fonction de votre cas d'utilisation. Par exemple, si l'utilisateur doit copier des objets ayant des balises d'objet, vous devez également accorder des autorisations pour s3:GetObjectTagging. Si vous rencontrez une erreur, essayez d'effectuer ces étapes en tant qu'utilisateur administrateur.

2.    Dans le compte source, associez la politique gérée par le client à l'identité IAM que vous souhaitez utiliser pour copier des objets vers le compartiment de destination.

3.    Dans le compte de destination, définissez S3 Object Ownership (la propriété des objets S3) sur le compartiment de destination comme étant la préférence du propriétaire du compartiment. Une fois que vous avez défini S3 Object Ownership (la propriété des objets S3), les nouveaux objets chargés avec la liste de contrôle d'accès (ACL) définie sur bucket-owner-full-control appartiennent automatiquement au compte du compartiment.

4.    Dans le compte de destination, modifiez la politique de compartiment du compartiment de destination afin d'autoriser le compte source à charger des objets. En outre, incluez une condition dans la politique de compartiment qui exige le chargement d'objets pour définir l'ACL sur bucket-owner-full-control. Vous pouvez utiliser une instruction similaire à l'exemple suivant :

Remarque : remplacez destination-DOC-EXAMPLE-BUCKET par le nom du compartiment de destination. Remplacez ensuite arn:aws:iam::222222222222:user/Jane par l'Amazon Resource Name (ARN) de l'identité IAM du compte source.

{
  "Version": "2012-10-17",
  "Id": "Policy1611277539797",
  "Statement": \[
    {
      "Sid": "Stmt1611277535086",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::222222222222:user/Jane"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/\*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control"
        }
      }
    },
    {
      "Sid": "Stmt1611277877767",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::222222222222:user/Jane"
      },
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET"
    }
  \]
}

Cet exemple de politique de compartiment inclut uniquement les autorisations minimales requises pour charger un objet avec l'ACL requise. Vous devez personnaliser les actions S3 autorisées en fonction de votre cas d'utilisation. Par exemple, si l'utilisateur doit copier des objets ayant des balises d'objet, vous devez également accorder des autorisations pour s3:GetObjectTagging

5.    Une fois que vous avez configuré la politique IAM et la politique de compartiment, l'identité IAM du compte source doit charger des objets vers le compartiment de destination. Assurez-vous que l'ACL est réglée sur Bucket-Owner-Full-Control. Par exemple, l'identité IAM source doit exécuter la commande cp AWS CLI avec l'option --acl :

aws s3 cp s3://source-DOC-EXAMPLE-BUCKET/object.txt s3://destination-DOC-EXAMPLE-BUCKET/object.txt --acl bucket-owner-full-control

Remarque : si vous recevez des erreurs lors de l'exécution des commandes de l'AWS CLI, assurez-vous que vous utilisez la version la plus récente de l'AWS CLI.

Lorsque vous définissez S3 Object Ownership (la propriété de l'objet S3) comme étant le propriétaire du compartiment préféré, les objets que vous chargez avec bucket-owner-full-control appartiennent au compte du compartiment de destination.

Important : si votre compartiment S3 a été chiffré par défaut avec AWS Key Management Service (AWS KMS), vous devez également modifier les autorisations de clé AWS KMS. Pour obtenir des instructions, consultez Mon compartiment Amazon S3 est chiffré par défaut à l'aide d'une clé AWS KMS personnalisée. Comment puis-je autoriser les utilisateurs à effectuer des chargements depuis et vers le compartiment ?

Informations connexes

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

Comment modifier la propriété d'un compartiment Amazon S3 lorsque les objets sont chargés par d'autres comptes AWS ?

Utilisation d'une politique basée sur les ressources pour déléguer l'accès à un compartiment Amazon S3 dans un autre compte

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an