
Иногда приходится копировать данные с одного AWS региона в другой. Или, с одного аккаунта (одного региона), в другой AWS аккаунт какого-то региона. Все в голове не удержишь, та и гуглить всегда лень. По этому, решил оставить заметку чтобы она была под рукой.
Для начала, нужно знать от куда и куда мы копируем данные:

Где:
- Source bucket — Это AWS S3 корзина с который будут скопированы данные (Например ваш аккаунт имеет ID: 666666666666).
- User policy/role — Полиси\Роль от которой будем копировать данные.
- Destination bucket — Собственно, AWS S3 бакет в который будем копировать данные (Например ваш аккаунт имеет ID: 777777777777).
В данном примере, я буду копировать данные с одного AWS региона в другой. Но так же, можно выполнять копирование с одного AWS аккаунта в другой. Суть не изменится.
Открываем AWS Console аккаунта в который будете копировать данные. И переходим в «Support Center» через вкладку «Support» и после этого получаем ID вашего аккаунта:

Например: 777777777777. Идем дальше.
После того как вы узнали ИД аккаунта в который будете копировать данные, переходим в аккаунт с которого вы копируете данные ( У меня это аккаунт 666666666666) и после чего, переходим во S3 и находим вашу корзину(бакет). В Данном бакете, имеется вкладка «Permissions». Кликаем по ней и переходим в «Bucket Policy» полиси через которые, собственно, и выполняеться зазрешение или запрешение опираций с корзиной:

В поле стоит вставить следующий текст:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DelegateS3Access",
"Effect": "Allow",
"Principal": {"AWS": "777777777777"},
"Action": ["s3:ListBucket","s3:GetObject"],
"Resource": [
"arn:aws:s3:::YOUR_SOURCE_AWS_S3_BUCKET_NAME_HERE/*",
"arn:aws:s3:::YOUR_SOURCE_AWS_S3_BUCKET_NAME_HERE"
]
}
]
}
Или, вот такая полиси:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GrantCopy",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::777777777777:root"
},
"Action": [
"s3:Get*",
"s3:List*"
],
"Resource": [
"arn:aws:s3:::YOUR_SOURCE_AWS_S3_BUCKET_NAME_HERE",
"arn:aws:s3:::YOUR_SOURCE_AWS_S3_BUCKET_NAME_HERE/*"
]
}
]
}
или:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GrantCopy",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::DESTINATION_BUCKET_ACCOUNT_NUMBER:user/YOUR_USER_HERE"
]
},
"Action": [
"s3:Get*",
"s3:List*"
],
"Resource": [
"arn:aws:s3:::YOUR_SOURCE_AWS_S3_BUCKET_NAME_HERE",
"arn:aws:s3:::YOUR_SOURCE_AWS_S3_BUCKET_NAME_HERE/*"
]
}
]
}
После чего, нажимаем на «Save» кнопку.
Далее, нужно создать пользователя в аккаунту (Destination) куда будете копировать данные (777777777777). Например, у меня он будет называться так: s3-user-sync. Для этого пользователя нужно прикрепить полиси чтобы он мог скопировать данные, а полиси выглядит так:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::YOUR_SOURCE_AWS_S3_BUCKET_NAME_HERE",
"arn:aws:s3:::YOUR_SOURCE_AWS_S3_BUCKET_NAME_HERE/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::YOUR_DESTINATION_AWS_S3_BUCKET_NAME_HERE",
"arn:aws:s3:::YOUR_DESTINATION_AWS_S3_BUCKET_NAME_HERE/*"
]
}
]
}
Собственно, вот и все.
Копируем данных с S3 в другой AWS регион/аккаунт в Unix/Linux
После всех действий можно выполнить копирование, команда выглядит так:
$ aws s3 sync s3://YOUR_SOURCE_AWS_S3_BUCKET_NAME_HERE s3://YOUR_DESTINATION_AWS_S3_BUCKET_NAME_HERE --source-region SOURCE_REGION_NAME_HERE --region DESTINATION_REGION_NAME_HERE
Например:
$ aws s3 sync s3://my-us-west-2-bucket s3://my-us-east-1-bucket --source-region us-west-2 --region us-east-1
Как-то так.
Полезное чтиво:
Работа с AWS S3 через командную строку в Unix/Linux
У меня все, на этому данная статья «Копирование данных с S3 в другой AWS регион/аккаунт в Unix/Linux» завершена.