Возможно ли использование AWS CLI для копирования содержимого веток S3 между учетными записями AWS? Я знаю, что можно копировать/синхронизировать между ведрами в одной учетной записи, но мне нужно получить содержимое старой учетной записи AWS в новую. У меня AWS CLI настроен с двумя профилями, но я не вижу, как я могу использовать оба профиля в одной команде copy/sync.
Можно ли копировать между учетными записями AWS с помощью AWS CLI?
Ответ 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)