Comment utiliser AWS DataSync pour transférer les données depuis ou vers un emplacement Amazon S3 multi-comptes ?

Lecture de 6 minute(s)
0

Je souhaite utiliser AWS DataSync pour transférer des données depuis ou vers un compartiment Amazon Simple Storage (Amazon S3) multi-comptes.

Brève description

Pour utiliser DataSync pour le transfert de données inter-comptes, procédez comme suit :

  1. Utilisez l'AWS Command Line Interface (AWS CLI) ou le kit SDK AWS pour créer un emplacement Amazon S3 inter-comptes dans DataSync.
  2. Créez une tâche DataSync qui transfère les données du compartiment source au compartiment de destination.

Gardez à l'esprit les limitations suivantes lorsque vous utilisez DataSync pour transférer des données entre des compartiments appartenant à des comptes S3 différents :

  • DataSync n'applique pas la liste de contrôle d'accès (ACL) à contrôle total du propriétaire du compartiment lors du transfert de données vers un compartiment de destination multicomptes. Cela entraîne des problèmes de propriété des objets dans le compartiment de destination.
  • Pour un emplacement S3 inter-comptes, seul un compartiment multi-comptes situé dans la même région est pris en charge. Si vous essayez de créer un emplacement S3 entre comptes et entre régions, les erreurs GetBucketLocation ou Unable to connect to S3 Endpoint s'affichent. Ainsi, si une tâche est créée dans le compte source, elle doit être créée dans la même région que le compartiment de destination. Si une tâche est créée dans le compte de destination, elle doit être créée dans la même région que le compartiment source.
  • Vous ne pouvez pas utiliser le rôle d'accès inter-comptes pour accéder à l'emplacement S3 multi-comptes.

Vous pouvez configurer la tâche DataSync dans le compte de destination pour extraire des données de la source en contournant les limitations précédentes.

Résolution

Effectuez les vérifications nécessaires

Supposons que le compte source soit propriétaire du compartiment S3 inter-comptes source et que le compte de destination soit propriétaire du compartiment S3 de destination et de la tâche DataSync. Effectuez les vérifications suivantes :

Utilisateur/rôle AWS Identity and Management (IAM) : vérifiez si les utilisateurs ou rôles IAM suivants disposent des autorisations requises :

  • L'utilisateur ou le rôle que vous utilisez pour créer l'emplacement S3 multicomptes
  • Le rôle que vous avez attribué à l'emplacement S3

Politique de compartiment source : assurez-vous que la politique de compartiment source autorise les utilisateurs/rôles IAM du compte de destination à accéder au compartiment. La politique présentée dans l'exemple suivant accorde l'accès au compartiment source aux utilisateurs et aux rôles IAM :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::1111222233334444:role/datasync-config-role",
          "arn:aws:iam::1111222233334444:role/datasync-transfer-role"
        ]
      },
      "Action": [
        "s3:GetBucketLocation",
        "s3:ListBucket",
        "s3:ListBucketMultipartUploads"
      ],
      "Resource": [
        "arn:aws:s3:::example-source-bucket"
      ]
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::1111222233334444:role/datasync-config-role",
          "arn:aws:iam::1111222233334444:role/datasync-transfer-role"
        ]
      },
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:DeleteObject",
        "s3:GetObject",
        "s3:ListMultipartUploadParts",
        "s3:PutObjectTagging",
        "s3:GetObjectTagging",
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::example-source-bucket/*"
      ]
    }
  ]
}

Dans la politique précédente, veillez à remplacer les valeurs suivantes :

  • example-source-bucket par le nom du compartiment source
  • 1111222233334444 par l'ID du compte de destination
  • datasync-config-role par le rôle IAM utilisé pour la configuration de DataSync (exemple : création d'un emplacement S3 source et de la tâche dans DataSync)
    Remarque : vous pouvez également utiliser un utilisateur IAM. Cet article traite de l'utilisation du rôle IAM.
  • dataysnc-transfer-role par le rôle IAM attribué lors de la création de l'emplacement S3 source
    Remarque : DataSync utilise ce rôle pour accéder aux données inter-comptes.

Emplacement de destination S3 :

Utilisez AWS CLI ou le SDK pour créer un emplacement S3 inter-comptes source dans DataSync

Remarque : la création d'un emplacement S3 inter-comptes n'est pas prise en charge dans la console de gestion AWS.

Vous pouvez créer l'emplacement S3 inter-comptes à l'aide de l'une des méthodes suivantes :

  • Utilisez un fichier de configuration JSON.
  • Utilisez les options de la commande AWS CLI.

Utilisation d'un fichier de configuration JSON

1.    Créez un fichier de configuration JSON input.template pour l'emplacement S3 inter-comptes avec les paramètres suivants :

{
  "Subdirectory": "",
  "S3BucketArn": "arn:aws:s3:::[Source bucket]",
  "S3StorageClass": "STANDARD",
  "S3Config": {
    "BucketAccessRoleArn": "arn:aws:iam::1111222233334444:role/datasync-transfer-role"
  }
}

2.    Créez un emplacement S3 en exécutant la commande AWS CLI suivante :

aws datasync create-location-s3 --cli-input-json file://input.template --region example-DataSync-Region

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 de l'AWS CLI.

Pour plus d'informations, voircreate-location-s3.

Une fois l'emplacement S3 créé, la sortie suivante s'affiche :

{
"LocationArn": "arn:aws:datasync:example-Region:123456789012:location/loc-0f8xxxxxxxxe4821"
}

Notez que 123456789012 est l'ID du compte pour le compte source.

Utilisation des options de la commande AWS CLI

Exécutez la commande AWS CLI suivante avec les options appropriées :

aws datasync create-location-s3 --s3-bucket-arn arn:aws:s3:::example-source-bucket --s3-storage-class STANDARD --s3-config BucketAccessRoleArn="arn:aws:iam::1111222233334444:role/datasync-transfer-role" --region example-DataSync-Region

Veillez à remplacer les valeurs suivantes dans la commande :

  • example-source-bucket par le nom du compartiment source
  • example-DataSync-Region par la région dans laquelle vous allez créer la tâche DataSync.

Création d'une tâche DataSync

Configurez la tâche DataSync et démarrez-la à partir de la console DataSync. Pour plus d'informations, consultez Démarrer votre tâche AWS DataSync.

Erreurs inconnues et résolution

Erreur : error creating DataSync Location S3: InvalidRequestException: Please provide a bucket in the xxx region where DataSync is currently used (erreur lors de la création de l'emplacement S3 DataSync - InvalidRequestException - Veuillez indiquer un compartiment dans la région xxx dans laquelle DataSync est actuellement utilisé)

Si vous recevez cette erreur, confirmez si le compartiment et les politiques IAM incluent les autorisations requises suivantes :

"Action": [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:ListBucketMultipartUploads"
]

Si vous obtenez cette erreur lors de l'utilisation d'un compartiment inter-comptes, assurez-vous que les compartiments se trouvent dans la même région que votre tâche DataSync

Problèmes liés à la propriété des objets S3

DataSync ne prend pas en charge l'utilisation d'un compartiment inter-comptes comme emplacement de destination. Par conséquent, vous ne pouvez pas utiliser la liste de contrôle d'accès (ACL) bucket-owner-full-control. Si la tâche DataSync s'exécute à partir du compte du compartiment source, les objets chargés vers le compte du compartiment de destination peuvent présenter un problème de propriété d'objet. Pour résoudre ce problème, si le compartiment de destination ne contient aucun objet utilisant des ACL, pensez à désactiver les ACL sur le compartiment de destination. Pour plus d'informations, consultez la section Contrôle de la propriété des objets et désactivation des listes de contrôle d'accès pour votre compartiment. Sinon, une bonne pratique consiste à configurer la tâche DataSync dans le compte de destination pour extraire les données de la source.


Informations connexes

Utilisation d'AWS DataSync pour migrer des données entre des compartiments Amazon S3

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