Перенос или копирование объектов между S3 buckets в разных аккаунтах
На текущем проекте используем известные решительно всем AWS - Amazon Web Services. Там есть решительно все, что нужно для современных веб-сервисов. В заметке пойдет речь об одном из сервисов Amazon, S3 - Simple Storage Services.
Боль
На проекте мы используем несколько аккаунтов AWS и получилось так, что нужно перенести кучу данных в S3 bucket одного аккаунта на другой. А это для меня оказалось неочевидным, поэтому пришлось немного разобраться. А результат, кроме выполненной работы, эта статья.
Коротко
Нужно пользователю целевого аккаунта, у которого есть права писать в целевой бакет, дать права на чтение (как минимум) из бакета-источника. Дальше воспользоваться aws-cli.
Более подробно
Что понадобится
- S3 buckets 2 штуки
source
иdestination
(по одной на каждый аккаунт) - IAM User (например,
copy_user
) с доступом Programmatic access через Access key ID и secret access key (в целевом аакаунте AWS) - User Policy для пользователя выше
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListAllMyBuckets"],
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::source/*","arn:aws:s3:::destination/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::source/*","arn:aws:s3:::destination/*"
]
}
]
}
- Bucket Policy для бакета
source
, что бы дать пользователю из целевого аккаунта доступ к нему
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAll",
"Effect": "Allow",
"Principal": {
"AWS": ["arn:aws:iam::111122223333:user/copy_user"]
},
"Action": ["s3:*"],
"Resource": ["arn:aws:s3:::from-source", "arn:aws:s3:::from-source/*"]
}
]
}
- AWS CLI tool (есть на каждом инстансе EC2)
- Инстанс EC2 c Linux.
Дальше куча вариантов с помощью консольной утилиты AWS. Простейший - скопировать все:
aws s3 cp s3://source/ s3://destination/ --recursive
Спасибо за внимание! Написать мне demshin@gmail.com или @demshin.