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

Date de la dernière mise à jour : 07/01/2022

Je souhaite copier des objets Amazon Simple Storage Service (Amazon S3) dans d'autres comptes AWS. Ensuite, je souhaite m'assurer que le compte de destination possède les objets copiés. Comment dois-je procéder ?

Résolution

Important : les objets dans Amazon S3 ne sont plus automatiquement détenus par le compte AWS qui les charge. Par défaut, le paramètre Appliqué par le propriétaire du compartiment est activé pour tout nouveau compartiment. Il est également recommandé d'utiliser le paramètre Appliqué par le propriétaire du compartiment lors de la modification de la propriété de l'objet. Notez toutefois que cette option désactive toutes les listes ACL de compartiment et toutes les listes ACL sur tous les objets de votre compartiment.

Avec le paramètre Appliqué par le propriétaire du compartiment dans la propriété de l'objet S3, tous les objets d'un compartiment Amazon S3 sont automatiquement détenus par le propriétaire du compartiment. La fonction Appliqué par le propriétaire du compartiment désactive également toutes les listes de contrôle d'accès (ACL), ce qui simplifie la gestion des accès pour les données stockées dans S3. Toutefois, pour les compartiments existants, un objet Amazon S3 est toujours détenu par le compte AWS qui l'a chargé, sauf si vous désactivez explicitement les listes ACL. Pour modifier la propriété des objets d'un compartiment existant, consultez Comment puis-je modifier la propriété d'objets détenus publiquement dans mon compartiment S3 ?

Si votre méthode existante de partage d'objets repose sur l'utilisation de listes de contrôle d'accès, identifiez les principaux qui utilisent des listes ACL pour accéder aux objets. Pour plus d'informations sur la façon de vérifier les autorisations avant de désactiver les ACL, consultez Conditions préalables à la désactivation des listes ACL.

Si vous ne parvenez pas à désactiver vos listes de contrôle d'accès, 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 stratégie gérée par le client AWS Identity and Access Management (IAM) qui accorde des autorisations appropriées à une identité IAM (utilisateur ou rôle). L'utilisateur IAM doit avoir accès pour récupérer des objets du compartiment source et les remettre dans le compartiment de destination. Vous pouvez utiliser une stratégie IAM similaire à la suivante :

{
    "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 stratégie IAM inclut uniquement les autorisations minimales requises pour lister des objets et copier des objets dans 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 qui ont des balises d'objet, vous devez également accorder des autorisations pour S3:GetObjectTagging. Si vous rencontrez une erreur, essayez de procéder comme suit en tant qu'utilisateur admin.

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

3.    Dans le compte de destination, définissez Propriété d'objet S3 sur le compartiment de destination sur le propriétaire du compartiment préféré. Une fois que vous avez défini la propriété d'objet S3, les nouveaux objets téléchargés avec la liste de contrôle d'accès (ACL) définie sur bucket-owner-full control sont automatiquement détenus par le compte du compartiment.

4.    Dans le compte de destination, modifiez la stratégie de compartiment du compartiment de destination pour accorder au compte source les autorisations de téléchargement d'objets. En outre, incluez une condition dans la stratégie de compartiment qui requiert des téléchargements d'objets pour définir la liste ACL sur bucket-owner-full-control. Vous pouvez utiliser une déclaration similaire à celle qui suit:

Remarque : remplacez destination-DOC-EXAMPLE-BUCKET avec le nom du compartiment de destination. Ensuite, remplacez arn:aws:iam::222222222222:user/Jane par le Amazon Resource Name (ARN) de l'identité IAM à partir 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"
        }
    ]
}

Remarque : cet exemple de stratégie de compartiment inclut uniquement les autorisations minimales requises pour télécharger un objet avec la liste 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 qui ont des balises d'objet, vous devez également accorder des autorisations pour S3:getObjectTagging

5.    Après avoir configuré la stratégie IAM et la stratégie de compartiment, l'identité IAM du compte source doit charger des objets dans le compartiment de destination. Assurez-vous que l'ACL est définie sur bucket-owner-full-control. Par exemple, l'identité IAM source doit exécuter la commande AWS CLI cp 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 de commandes AWS CLI, vérifiez que vous utilisez la version la plus récente d'AWS CLI.

Avec la propriété d'objet S3 définie sur propriétaire du compartiment préféré, les objets chargés avec une ACL définie sur bucket-owner-full-control sont automatiquement détenus par le compte du compartiment de destination.

Important : si votre compartiment S3 a un chiffrement par défaut avec AWS Key Management Service (AWS KMS) activé, alors vous devez également modifier les autorisations de la clé AWS KMS. Pour obtenir des instructions, consultez Mon compartiment Amazon S3 a le chiffrement par défaut utilisant une clé AWS KMS personnalisée. Comment puis-je permettre aux utilisateurs de télécharger et de charger vers le compartiment ?