我正在尝试在两个帐户之间的 awscli 上使用“aws s3 sync”。
帐户 A,我拥有。帐户 B,由第三方拥有。
账户 B 通过 role:assumeDevOps 假设授予了账户 A 上的 user:jon 对存储桶的权限。
Jon 假设 AssumeDevOps 可以访问帐户 B 上的存储桶。但现在我必须同步到帐户 A 上的存储桶。
我收到拒绝访问的提示。可能是因为 Jon 所担任的角色对我帐户上的存储桶没有权限。
我该怎么做呢?
有关于这种具体情况的文献吗?
答案1
基本上,您需要创建一个策略来允许访问您这边的 S3 存储桶和一个角色,并将该策略附加到该角色。
然后,帐户 B 中的用户需要承担您创建的允许访问您的存储桶的角色。
我相信这是您正在寻找的文章(更为详细的文章): https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html
这是一篇更具体的文章: https://aws.amazon.com/premiumsupport/knowledge-center/copy-s3-objects-account/
答案2
执行命令所需的凭据aws s3 sync
需要:
- 源存储桶的读取权限,和
- 目标存储桶的写入权限
由于您正在承担源账户的角色(该账户已具有源存储桶的读取权限),因此您需要授予该角色写入目标存储桶的权限在您的帐户中。
这可以通过目标存储桶上的存储桶策略来完成,其内容如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::destination-bucket/*",
"arn:aws:s3:::destination-bucket"
],
"Principal": {"AWS":"arn:aws:iam::bbbbbbbbbbbb:role/assumeDevOps"}
}
]
}