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

Dernière mise à jour : 26/04/2022

Je souhaite utiliser AWS DataSync pour transférer des données vers ou depuis un compartiment Amazon Simple Storage (Amazon S3) inter-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) bucket-owner-full-control lors du transfert de données vers un compartiment de destination inter-comptes, ce qui entraîne des problèmes de propriété d'objet dans le compartiment de destination.
  • Pour un emplacement S3 inter-comptes, seul un compartiment inter-comptes situé dans la même région est pris en charge. Si vous utilisez un emplacement S3 inter-comptes et inter-régions, vous recevez les erreurs GetBucketLocation ou Unable to connect to S3 endpoint (Impossible de se connecter à un point de terminaison S3).
  • Vous ne pouvez pas utiliser le rôle d'accès inter-comptes pour accéder à l'emplacement S3 inter-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 que l'utilisateur ou le rôle IAM que vous utilisez pour créer l'emplacement S3 inter-comptes et que le rôle IAM que vous avez affecté à l'emplacement S3 disposent des autorisations requises.

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 S3 de destination : assurez-vous que l'emplacement S3 de destination est créé conformément aux instructions fournies dans la sectionCréation d'un emplacement pour Amazon S3.

Utilisez l'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:1111222233334444:location/loc-0f8xxxxxxxxe4821"
}

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
  • 1111222233334444 par l'ID du compte 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 la section Création d'une tâche.

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.


Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?