Copier des fichiers d’un bucket S3 d’un compte Amazon à un autre

Aujourd’hui je me suis retrouvé dans un cas assez particulier. Je souhaitais copier l’intégralité d’un bucket Amazon S3 vers un autre bucket sachant que les deux étaient sur deux comptes différents.
Généralement j’utilise l’outil payant CloudBerry S3 Explorer PRO pour parcourir mes différents buckets S3. L’avantage de ce logiciel, qu’il partage avec d’autres d’ailleurs, est qu’il permet de travailler avec plusieurs threads pour démultiplier la vitesse d’exécution. En effet, lors d’une copie par exemple, le logiciel doit copier fichier par fichier et quand la quantité de fichiers devient importante, la latence du réseau et le temps de réponse du serveur ne sont plus négligeables. En utilisant plusieurs threads pour faire la copie, on divise le temps nécessaire pour copier l’ensemble des fichiers.

Une solution simple, mais coûteuse en bande passante (et qui peut donc avoir un impact financier important), reste de copier dans un premier temps les fichiers d’un bucket vers un PC, puis, du PC vers le bucket de destination. Mais cette solution n’est pas la plus efficace. Il existe la possibilité de copier directement des fichiers d’un bucket à l’autre, avec une seule requête S3, et sans gaspiller de la bande passante.

Le problème de cette solution c’est qu’elle renvoie l’erreur Access Denied et que pour le résoudre, il faut mettre en place une règle sur le bucket. Cependant après quelques recherches, j’ai fini par trouver les règles à appliquer.

Dans un premier temps, il faut donner l’accès en lecture au compte propriétaire du bucket de destination aux données du bucket de source. Pour se faire, il va vous falloir récupérer l’AWS Account ID du compte propriétaire du bucket de destination. Il est disponible sur la page Your Security Credentials dans la section Account Identifiers.
Ensuite il faut appliquer la règle suivante sur le bucket source :

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam:::root"
      },
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::/*",
        "arn:aws:s3:::"
      ],
      "Condition": {}
    }
  ]
}

Quand vous remplacez il faut enlever les – qui séparer chaque groupe de chiffre pour avoir quelque chose qui ressemble à 123456789012.

Voilà qui devrait résoudre vos problèmes.

Tagged , , ,

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *