Je fais du travail pour un client qui a 2 comptes AWS distincts. Nous devons déplacer tous les fichiers d'un compartiment sur l'un de leurs comptes S3 vers un nouveau compartiment sur le deuxième compte.
Nous pensions que s3cmd permettrait cela, en utilisant le format:
s3cmd cp s3://bucket1 s3://bucket2 --recursive
Cependant cela ne me permet d'utiliser que les clés d'un compte et je ne peux pas spécifier les comptes du 2ème compte.
Existe-t-il un moyen de le faire sans télécharger les fichiers et les télécharger à nouveau sur le 2ème compte?
Vous n'êtes pas obligé d'ouvrir des autorisations à tout le monde. Utilisez les stratégies de compartiment ci-dessous sur la source et la destination pour copier d'un compartiment dans un compte vers un autre à l'aide d'un utilisateur IAM
Seau à copier à partir de: SourceBucket
Seau vers lequel copier: DestinationBucket
ID de compte AWS source: XXXX–XXXX-XXXX
Utilisateur IAM source: src–iam-user
La politique ci-dessous signifie - l'utilisateur IAM - XXXX–XXXX-XXXX:src–iam-user
a s3:ListBucket
et s3:GetObject
privilèges on SourceBucket/*
et s3:ListBucket
et s3:PutObject
privilèges sur DestinationBucket/*
Sur le SourceBucket, la stratégie doit être comme:
{
"Id": "Policy1357935677554",
"Statement": [{
"Sid": "Stmt1357935647218",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": "arn:aws:s3:::SourceBucket",
"Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
}, {
"Sid": "Stmt1357935676138",
"Action": ["s3:GetObject"],
"Effect": "Allow",
"Resource": "arn:aws:s3:::SourceBucket/*",
"Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
}]
}
Sur DestinationBucket, la stratégie doit être:
{
"Id": "Policy1357935677555",
"Statement": [{
"Sid": "Stmt1357935647218",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": "arn:aws:s3:::DestinationBucket",
"Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
}, {
"Sid": "Stmt1357935676138",
"Action": ["s3:PutObject"],
"Effect": "Allow",
"Resource": "arn:aws:s3:::DestinationBucket/*",
"Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
}]
}
La commande à exécuter est s3cmd cp s3://SourceBucket/File1 s3://DestinationBucket/File1
La bande passante à l'intérieur d'AWS ne compte pas, vous pouvez donc économiser de l'argent et du temps en faisant tout cela à partir d'une boîte à l'intérieur d'AWS, tant que les compartiments sont dans la même région.
Quant à le faire sans avoir le fichier touché quelque part sur un ordinateur - ne le pense pas.
Sauf: comme ils effectuent des téléchargements en masse à partir des disques durs que vous leur envoyez, ils peuvent faire de même pour vous pour un transfert de compartiment à compartiment.
Je suggère d'utiliser Cloudberry s3 Explorer, comme une solution simple pour faire bouger les choses rapidement. Il vous permet également d'utiliser des services de transfert sans bande passante interne.
Vous pouvez également utiliser les outils cloudberry sdk pour intégrer dans vos applications.
Bonne chance Jon
Même si les rôles et les politiques sont une manière vraiment élégante, j'ai une autre solution:
Sur votre machine locale (bureau ou tout serveur en dehors d'AWS), créez un nouveau profil avec les informations d'identification des comptes source-compartiment.
aws --profile $ {YOUR_CUSTOM_PROFILE} configurer
remplissez aws_access_key_id et aws_secret_access_key (vous pouvez ignorer Région et Sortie)
Enregistrez vos informations d'identification de destination en tant que variables d'environnement
export AWS_ACCESS_KEY_ID = AKI ...
exporter AWS_SECRET_ACCESS_KEY = CN ...
Maintenant, faites la synchronisation, mais ajoutez le paramètre "profil" crucial
aws --profile $ {YOUR_CUSTOM_PROFILE} synchronisation s3 s3: // $ {SOURCE_BUCKET_NAME} s3: // $ {DESTINATION_BUCKET_NAME}