Thank you for reading this post, don't forget to subscribe!
Иногда приходится копировать данные с одного 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» полиси через которые, собственно, и выполняется разрешение или запрещение операций с корзиной:
В поле стоит вставить следующий текст:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "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" ] } ] } |
Или, вот такая полиси:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
{ "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/*" ] } ] } |
или
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
{ "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. Для этого пользователя нужно прикрепить полиси чтобы он мог скопировать данные, а полиси выглядит так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
{ "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