Copiez les données d'un compartiment S3 vers un autre compte ou une autre région à l'aide du AWS CLI - Recommandations AWS

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Copiez les données d'un compartiment S3 vers un autre compte ou une autre région à l'aide du AWS CLI

Créé par Appasaheb Bagali (AWS) et Purushotham G K () AWS

Environnement : Production

Technologies : Stockage et sauvegarde

AWSservices : AWS CLI AWS Identity and Access Management ; Amazon S3

Récapitulatif

Ce modèle décrit comment migrer les données d'un compartiment Amazon Simple Storage Service (Amazon S3) d'un compte source vers AWS un compartiment S3 de destination d'un AWS autre compte, dans la AWS même région ou dans une région différente.

Le compartiment S3 source autorise AWS l'accès à Identity and Access Management (IAM) à l'aide d'une politique de ressources attachée. Un utilisateur du compte de destination doit assumer un rôle doté PutObject d'GetObjectautorisations pour le compartiment source. Enfin, vous exécutez copy des sync commandes pour transférer les données du compartiment S3 source vers le compartiment S3 de destination.

Les comptes sont propriétaires des objets qu'ils téléchargent dans des compartiments S3. Si vous copiez des objets entre comptes et régions, vous accordez au compte de destination la propriété des objets copiés. Vous pouvez modifier le propriétaire d'un objet en remplaçant sa liste de contrôle d'accès (ACL) parbucket-owner-full-control. Toutefois, nous vous recommandons d'accorder des autorisations programmatiques entre comptes au compte de destination, car cela ACLs peut être difficile à gérer pour plusieurs objets.

Avertissement : ce scénario nécessite que IAM les utilisateurs disposent d'un accès programmatique et d'informations d'identification à long terme, ce qui présente un risque de sécurité. Pour atténuer ce risque, nous vous recommandons de n'octroyer à ces utilisateurs que les autorisations dont ils ont besoin pour effectuer la tâche et de supprimer ces utilisateurs lorsqu'ils ne sont plus nécessaires. Les clés d'accès peuvent être mises à jour si nécessaire. Pour plus d'informations, consultez la section Mise à jour des clés d'accès dans le guide de IAM l'utilisateur.

Ce modèle couvre une migration ponctuelle. Pour les scénarios qui nécessitent une migration continue et automatique de nouveaux objets d'un compartiment source vers un compartiment de destination, vous pouvez plutôt utiliser S3 Batch Replication, comme décrit dans le modèle Copier les données d'un compartiment S3 vers un autre compte et une autre région à l'aide de S3 Batch Replication.

Conditions préalables et limitations

  • Deux AWS comptes actifs dans la même région ou dans des AWS régions différentes.

  • Un compartiment S3 existant dans le compte source. 

  • Si le chiffrement par défaut de votre compartiment Amazon S3 source ou de destination est activé, vous devez modifier les autorisations de AWS clé du Key Management Service (AWSKMS). Pour plus d'informations, consultez l'article AWS Re:Post à ce sujet.

  • Connaissance des autorisations entre comptes.

Architecture

Copier des données Amazon S3 vers un autre compte ou une autre région

Outils

Bonnes pratiques

Épopées

TâcheDescriptionCompétences requises

Créez un IAM utilisateur et obtenez la clé d'accès.

  1. Connectez-vous à la console AWS de gestion et créez un IAM utilisateur disposant d'un accès programmatique. Pour connaître les étapes détaillées, consultez la section Création d'IAMutilisateurs dans la IAM documentation. Il n'est pas nécessaire de joindre des politiques pour cet utilisateur.

  2. Générez une clé d'accès et une clé secrète pour cet utilisateur. Pour obtenir des instructions, consultez la section Clés de AWS compte et d'accès dans la AWS documentation.

AWS DevOps

Créez une politique IAM basée sur l'identité.

Créez une politique IAM basée sur l'identité nommée à l'S3MigrationPolicyaide des autorisations suivantes. Pour connaître les étapes détaillées, consultez la section Création de IAM politiques dans la IAM documentation.

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

Remarque : modifiez les noms des compartiments source et de destination en fonction de votre cas d'utilisation.

Cette politique basée sur l'identité permet à l'utilisateur qui assume ce rôle d'accéder au compartiment source et au compartiment de destination.

AWS DevOps

Créez un IAM rôle.

Créez un IAM rôle nommé S3MigrationRole en utilisant la politique de confiance suivante, puis attachez le rôle créé précédemmentS3MigrationPolicy. Pour connaître les étapes détaillées, consultez la section Création d'un rôle pour déléguer des autorisations à un IAM utilisateur dans la IAM documentation.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<destination_account>:user/<user_name>" }, "Action": "sts:AssumeRole", "Condition": {} } ] }

Remarque : modifiez le nom de ressource Amazon (ARN) du IAM rôle ou du nom d'utilisateur de destination dans la politique de confiance en fonction de votre cas d'utilisation.

Cette politique de confiance permet à l'IAMutilisateur nouvellement créé d'assumerS3MigrationRole.

AWS DevOps
TâcheDescriptionCompétences requises

Créez et attachez une politique de compartiment S3.

Connectez-vous à la console AWS de gestion de votre compte source et ouvrez la console Amazon S3. Choisissez votre compartiment S3 source, puis choisissez Permissions. Sous Politique de compartiment, choisissez Modifier, puis collez la politique de compartiment suivante. Choisissez Save (Enregistrer).

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DelegateS3Access", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::<destination_account>:role/<RoleName>"}, "Action": ["s3:ListBucket", "s3:GetObject", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::awsexamplesourcebucket/*", "arn:aws:s3:::awsexamplesourcebucket" ] } ] }

Remarque : assurez-vous d'inclure l'ID de AWS compte du compte de destination et de configurer le modèle de politique de compartiment en fonction de vos besoins.

Cette politique basée sur les ressources permet au rôle de destination S3MigrationRole d'accéder aux objets S3 du compte source.

Administrateur du cloud
TâcheDescriptionCompétences requises

Créez un compartiment S3 de destination.

Connectez-vous à la console AWS de gestion de votre compte de destination, ouvrez la console Amazon S3, puis choisissez Create bucket. Créez un compartiment S3 en fonction de vos besoins. Pour plus d'informations, consultez la section Création d'un compartiment dans la documentation Amazon S3. 

Administrateur du cloud
TâcheDescriptionCompétences requises

Configurez AWS CLI avec les informations d'identification utilisateur nouvellement créées.

  1. Installez la dernière version du AWSCLI. Pour obtenir des instructions, consultez la section Installation ou mise à jour de la dernière version AWS CLI de la AWS CLI documentation.

  2. Exécutez $ aws configure et mettez à jour CLI avec la clé d'AWSaccès de l'utilisateur que vous avez créé. Pour plus d'informations, consultez la section Configuration et paramètres des fichiers d'identification dans la AWS CLI documentation.

AWS DevOps

Assumez le rôle de migration S3.

  1. Utilisez le AWS CLI pour supposer que S3MigrationRole :

    aws sts assume-role \ --role-arn "arn:aws:iam::<destination_account>:role/S3MigrationRole" \ --role-session-name AWSCLI-Session

    Cette commande génère plusieurs informations. Dans le bloc d'informations d'identification, vous avez besoin du AccessKeyIdSecretAccessKey, etSessionToken. Cet exemple utilise les variables d'environnement RoleAccessKeyIDRoleSecretKey, etRoleSessionToken. Notez que l'horodatage du champ d'expiration est indiqué dans le fuseau UTC horaire. L'horodatage indique la date d'expiration des informations d'identification temporaires du IAM rôle. Si les informations d'identification temporaires expirent, vous devez les appeler sts:AssumeRole API à nouveau.

  2. Créez trois variables d'environnement pour assumer le IAM rôle. Ces variables d'environnement sont renseignées avec le résultat suivant :

    # Linux export AWS_ACCESS_KEY_ID=RoleAccessKeyID export AWS_SECRET_ACCESS_KEY=RoleSecretKey export AWS_SESSION_TOKEN=RoleSessionToken # Windows set AWS_ACCESS_KEY_ID=RoleAccessKeyID set AWS_SECRET_ACCESS_KEY=RoleSecretKey set AWS_SESSION_TOKEN=RoleSessionToken
  3. Vérifiez que vous avez assumé le IAM rôle en exécutant la commande suivante :

    aws sts get-caller-identity

Pour plus d'informations, consultez le centre de AWS connaissances.

AWSadministrateur

Copiez et synchronisez les données du compartiment S3 source vers le compartiment S3 de destination.

Lorsque vous avez assumé le rôle, S3MigrationRole vous pouvez copier les données à l'aide de la commande copy (cp) ou de synchronisation (sync).

Copier (voir la référence des AWS CLI commandes pour plus de détails) :

aws s3 cp s3:// DOC-EXAMPLE-BUCKET-SOURCE / \ s3:// DOC-EXAMPLE-BUCKET-TARGET / \ --recursive --source-region SOURCE-REGION-NAME --region DESTINATION-REGION-NAME

Synchroniser (voir la référence des AWS CLI commandes pour plus de détails) :

aws s3 sync s3:// DOC-EXAMPLE-BUCKET-SOURCE / \ s3:// DOC-EXAMPLE-BUCKET-TARGET / \ --source-region SOURCE-REGION-NAME --region DESTINATION-REGION-NAME
Administrateur du cloud

Résolution des problèmes

ProblèmeSolution

Une erreur s'est produite (AccessDenied) lors de l'appel de l'ListObjectsopération : Accès refusé

  • Assurez-vous que vous avez assumé le rôleS3MigrationRole.

  • Exécutez aws sts get-caller-identity pour vérifier le rôle utilisé. Si la sortie n'affiche pas le ARN forS3MigrationRole, reprenez le rôle et réessayez.

Ressources connexes