Comment copier des objets S3 depuis un autre compte AWS ?

Date de la dernière mise à jour : 27/03/2020

Je souhaite copier des objets Amazon Simple Storage Service (Amazon S3) d’un compartiment vers un autre compte AWS. Ensuite, je souhaite m'assurer que mon compte (le compte de destination) possède bien les objets copiés. Comment procéder ?

Brève description

Pour vous assurer qu'un compte de destination devienne bien propriétaire d'un objet S3 copié à partir d'un autre compte, accordez au compte de destination les autorisations nécessaires pour effectuer la copie entre comptes. Suivez ces étapes pour configurer des autorisations entre comptes afin de copier des objets à partir du compartiment source d'un compte A vers le compartiment de destination d'un compte B :

1.    Attachez une stratégie de compartiment au compartiment source dans le compte A.

2.    Attachez une stratégie AWS Identity and Access Management (IAM) à un utilisateur ou à un rôle dans le compte B.

3.    Utilisez l'utilisateur ou le rôle IAM du compte B pour effectuer la copie entre comptes.

Important : si le chiffrement par défaut est activé pour le compartiment source ou de destination, avec AWS Key Management Service (AWS KMS), vous devez également modifier les autorisations liées à la clé AWS KMS. Pour obtenir des instructions, consultez Mon compartiment Amazon S3 a le chiffrement par défaut à l'aide d'une clé AWS KMS personnalisée. Comment puis-je permettre aux utilisateurs de télécharger et de charger vers le compartiment ? 

Par défaut, un objet S3 appartient au compte qui a chargé l'objet. C'est pourquoi l'octroi au compte de destination des autorisations pour effectuer la copie entre comptes garantit que la destination devienne propriétaire des objets copiés. Vous pouvez également modifier la propriété d'un objet en remplaçant sa liste de contrôle d'accès (ACL) par bucket-ower-full-control. Cependant, les listes ACL d'objets peuvent être difficiles à gérer pour plusieurs objets. Il est donc recommandé d'accorder des autorisations entre comptes par programmation au compte de destination.

La propriété des objets est importante pour gérer les autorisations à l'aide d'une stratégie de compartiment. Pour qu'une stratégie de compartiment s'applique à un objet dans le compartiment, l'objet doit être détenu par le compte qui possède le compartiment. Vous pouvez également gérer les autorisations d'objet à l'aide de la liste ACL de l'objet. Cependant, les listes ACL d'objets peuvent être difficiles à gérer pour plusieurs objets. Il est donc recommandé d'utiliser la stratégie de compartiment comme méthode centralisée pour définir les autorisations.

Résolution

Attacher une stratégie de compartiment au compartiment source dans le compte A

1.    Obtenez l'Amazon Resource Name (ARN) de l'identité IAM (utilisateur ou rôle) dans le compte B (compte de destination).

2.    Depuis le compte A, attachez une stratégie de compartiment au compartiment source qui permet à l’identité IAM du compte B de recevoir des objets, similaire à la suivante : 

Important : Pour la valeur de Principal, remplacez arn : aws : iam::222222222222 : user/Jane par l'ARN de l'identité IAM dans le Compte B.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DelegateS3Access",
            "Effect": "Allow",
            "Principal": {"AWS": "arn:aws:iam::222222222222:user/Jane"},
            "Action": ["s3:ListBucket","s3:GetObject"],
            "Resource": [
                "arn:aws:s3:::awsexamplesourcebucket/*",
                "arn:aws:s3:::awsexamplesourcebucket"
            ]
        }
    ]
}

Attacher une stratégie IAM à un utilisateur ou un rôle dans le compte B

1.    Depuis le compte B, créez une stratégie gérée par le client IAM qui autorise un utilisateur ou un rôle IAM à copier des objets depuis le compartiment source du compte A vers le compartiment de destination du compte B. La stratégie peut être similaire à l'exemple suivant :

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

2.    Attachez la stratégie gérée par le client à l'utilisateur ou au rôle IAM que vous souhaitez utiliser pour copier des objets entre les comptes.

Utiliser l'utilisateur ou le rôle IAM du compte B pour effectuer la copie entre comptes

Une fois que vous avez configuré la stratégie de compartiment et la stratégie IAM, l'utilisateur ou le rôle IAM du compte B peut effectuer la copie du compte A vers le compte B. Le compte B deviendra alors le propriétaire des objets copiés.

Pour synchroniser tout le contenu d'un compartiment source d'un compte A vers un compartiment de destination d'un compte B, l'utilisateur ou le rôle IAM du compte B peut exécuter la commande sync à l'aide de l'interface de ligne de commande AWS (CLI AWS) :

aws s3 sync s3://awsexamplesourcebucket s3://awsexampledestinationbucket