Копирование данных с S3 в другой AWS регион/аккаунт в Unix/Linux

Иногда приходится копировать данные с одного 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» полиси через которые, собственно, и выполняеться зазрешение или запрешение опираций с корзиной:

AWS S3 bucket policies

В поле стоит вставить следующий текст:

{
    "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» завершена.

This entry was posted in Без рубрики. Bookmark the permalink.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.