Можно ли копировать между учетными записями AWS с помощью AWS CLI?

Возможно ли использование AWS CLI для копирования содержимого веток S3 между учетными записями AWS? Я знаю, что можно копировать/синхронизировать между ведрами в одной учетной записи, но мне нужно получить содержимое старой учетной записи AWS в новую. У меня AWS CLI настроен с двумя профилями, но я не вижу, как я могу использовать оба профиля в одной команде copy/sync.

Ответ 1

Очень просто. Пусть говорят:

Старая учетная запись AWS = [email protected]

Новая учетная запись AWS = [email protected]

Loginto консоль AWS как [email protected]

Перейдите в выбранное вами ведро и примените следующую политику:

{
  "Statement": [
    {
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::bucket_name",
      "Principal": {
        "AWS": [
          "[email protected]"
        ]
      }
    },
    {
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::bucket_name/*",
      "Principal": {
        "AWS": [
          "[email protected]"
        ]
      }
    }
  ]
}

Я бы предположил, что bucket_name и [email protected] очевидны для вас в политике выше

Теперь убедитесь, что вы используете AWS-CLI с учетными данными [email protected]

Запустите команду ниже, и копия произойдет как шарм:

aws s3 cp s3://bucket_name/some_folder/some_file.txt  s3://[email protected]_acount/fromold_account.txt

Конечно, убедитесь, что [email protected] имеет права записи для своего собственного ведра [email protected]_acount, который используется в приведенной выше команде для сохранения материала, скопированного из [email protected] bucket.

Надеюсь, что это поможет.

Ответ 2

Хорошо, теперь у меня это работает! Спасибо за ваши ответы. В конце я использовал комбинацию между @slayedbylucifer и @Sony Kadavan. Для меня работала новая политика в виде корзины и новая политика пользователя.

Я добавил следующую политику ведра (Account A):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::myfoldername",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111111111111:user/myusername"
                ]
            }
        },
        {
            "Action": [
                "s3:*"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::myfoldername",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111111111111:user/myusername"
                ]
            }
        }
    ]
}

И следующая политика пользователя (учетная запись B):

    {
       "Version": "2012-10-17",
       "Statement":{
          "Effect":"Allow",
          "Action":"s3:*",
          "Resource":"arn:aws:s3:::myfoldername/*"
       }

}

И использовал следующую команду aws cli (опция региона требовалась, потому что учетные записи были в разных регионах):

aws --region us-east-1 s3 sync s3://myfoldername s3://myfoldername-accountb

Ответ 3

В моем случае ниже указанная команда будет работать, надеюсь, что это сработает и для вас. У меня есть две разные учетные записи AWS в разных регионах, и я хочу скопировать содержимое моего старого ковша в новое одно ведро. У меня AWS CLI настроен с двумя профилями.

Используется следующая команда aws cli:

aws s3 cp --profile <profile1> s3://source_bucket_path/ --profile <profile2> s3://destination_bucket_path/ --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --recursive

Ответ 4

Да, вы можете. Сначала необходимо создать пользователя IAM во второй учетной записи и делегировать ему права - прочитать/записать/перечислить на конкретном ведре S3. После этого предоставите эти учетные данные пользователям IAM в свой CLI, и он будет работать.

Как делегировать разрешения: Делегирование разрешений для разных пользователей IAM - Управление идентификацией и доступом AWS: http://docs.aws.amazon.com/IAM/latest/UserGuide/DelegatingAccess.html#example-delegate-xaccount-roles

Sample S3 policy for delegation:

{
   "Version": "2012-10-17",
   "Statement" : {
      "Effect":"Allow",
      "Sid":"AccountBAccess1",
      "Principal" : {
          "AWS":"111122223333"
      },
      "Action":"s3:*",
      "Resource":"arn:aws:s3:::mybucket/*"
   }
}

Когда вы делаете это на производственных настройках, будьте более ограничительными в разрешениях. Если вам нужна копия из ведра в другую. Затем с одной стороны вам нужно дать только List и Get (not Put)