我有两个不同的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访问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"
}
]
}
这也很好,鲍勃现在可以访问PROD
S S3。但是,在DEV
帐户中执行aws s3 ls
时,Bob获取此消息An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied
。令人困惑的是,如果我分离让Bob假设PROD-S3-Access
的政策,他可以再次阅读DEV
的S3存储桶。有任何线索吗?
编辑:
问题实际上是由我没有注意到的条件引起的,它要求用户启用MFA。
仅将ALLOW
策略添加到用户不应删除访问。确实是奇怪的。
假设角色的替代方法是在DEV
许可中授予BOB,以直接访问PROD
存储桶。这需要两件事:
- iam dev bob 访问产品存储桶
- a 每个产品存储桶上的存储策略允许从Dev Bob 访问
这样,单个用户可以访问DEV和POD存储桶,从而可以在它们之间复制数据。