我在同步附加到两个单独 AWS 账户的两个 S3 存储桶时遇到问题。
有两个 AWS 账户 - 由第三方管理的账户 A 和我管理的账户 B。我希望将文件从账户 A 中的 S3 存储桶提取到账户 B 中的 S3 存储桶。
帐户 A 向我提供了以下说明:
- 在账户 B 中,创建一个名为
LogsUser
的新 IAM 用户。将以下策略附加到用户:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::ACCOUNTID:role/12345-LogAccess-role"
}
]
}
配置 AWS CLI 以更新配置和凭证文件。具体来说,
~/.aws/config
文件看起来像:[profile LogsUser] role_arn = arn:aws:iam::ACCOUNTID:role/12345-LogAccess-role source_profile = LogsUser
还有
~/.aws/credentials
文件看起来像aws_access_key_id = YOUR_ACCESS_KEY_ID aws_secret_access_key = YOUR_SECRET_ACCESS_KEY
从这里,我可以使用
$ aws s3 ls --profile LogsUser s3://bucket-a
成功查询账户 A 存储桶中的日志文件。 .
我已经设置了bucket-b
但是,在帐户 B 中,我无法查询 bucket-b
中的任何文件。 。例如,$ aws s3 ls --profile LogsUser s3://bucket-b
返回An error occurred (AccessDenied) when calling the AssumeRole operation: Access denied
.
是否可以在配置文件或我的 IAM 策略中添加其他内容以允许访问 bucket-b
使用--profile LogsUser
选项?我可以访问 bucket-b
使用其他--profile
设置,但我不希望同步到本地文件系统,然后同步到另一个存储桶。
所需的结果是运行类似 aws s3 sync s3://bucket-a s3://bucket-b --profile UserLogs
的命令.
最佳答案
例如,如果您要将“账户 A”S3 存储桶对象复制到“账户 B”S3 存储桶,请按照以下步骤操作。
为“账户 A”中的 S3 存储桶创建一个策略,如下所示。为此,您需要“帐户 B”号码,要找到 B 帐号,请转至支持 → 支持中心并从那里复制帐号。
设置“账户 A”存储桶策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DelegateS3Access",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ACCOUNT_B_NUMBER:root"
},
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::ACCOUNT_A_BUCKET_NAME/*",
"arn:aws:s3:::ACCOUNT_A_BUCKET_NAME"
]
}
]
}
登录“账户 B”并创建新的 IAM 用户或为现有用户附加以下策略。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::ACCOUNT_A_BUCKET_NAME",
"arn:aws:s3:::ACCOUNT_A_BUCKET_NAME/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::ACCOUNT_B_BUCKET_NAME",
"arn:aws:s3:::ACCOUNT_B_BUCKET_NAME/*"
]
}
]
}
使用“账户 B”IAM 用户(您已使用上述用户策略创建 IAM)配置 AWS CLI
aws s3 sync s3://ACCOUNT_A_BUCKET_NAME s3://ACCOUNT_B_BUCKET_NAME --source-region ACCOUNT_A_REGION-NAME --region ACCOUNT_B_REGION-NAME
这样我们就可以通过不同的 AWS 账户复制 S3 存储桶对象。
如果您有多个 awscli 配置文件,请在命令末尾使用 --profile
和配置文件名称。
关于amazon-web-services - 如何使用多个AWS账户同步多个S3存储桶?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57331196/