我有两个不同的AWS账户DEV
和PROD
,并且我想在DEV
中创建一个用户来管理两个账户中的S3存储桶。我创建了用户Bob,该用户附加了以下策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::some-dev-bucket/*",
"arn:aws:s3:::another-dev-bucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "*"
}
]
}
这实际上有效,Bob可以列出所有存储桶并访问其中的一些存储桶。为了允许Bob访问PROD
帐户中的S3存储桶,我在此处创建了PROD-S3-Access
角色,并具有适当的权限和允许DEV
用户使用它的信任关系。回到DEV
,我创建了一个新策略,允许Bob担任以下角色:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::prod-account-id:role/PROD-S3-Access"
}
]
}
这也很好,Bob现在可以访问PROD
的S3。但是,在aws s3 ls
帐户中进行DEV
时,Bob会收到此消息An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied
。令人困惑的是,如果我放弃让Bob担任PROD-S3-Access
的策略,他可以再次读取DEV
的S3存储桶。有任何线索吗?
编辑:
问题实际上是由我没有注意到的状况引起的,该状况要求用户启用MFA。
答案 0 :(得分:1)
仅向用户添加ALLOW
策略不应删除访问权限。确实,这很奇怪。
承担角色的另一种方法是授予DEV
中的Bob权限,以直接访问PROD
存储桶。这需要两件事:
这样,单个用户就可以访问DEV和PROD存储桶,从而可以在它们之间复制数据。