【发布时间】:2018-01-11 05:42:42
【问题描述】:
我有 2 个 ID 为 111111 和 222222 的 AWS 账户,我正在尝试以下操作
- 两个账户应通过担任相同角色访问 AWS
- 假定角色授予每个访问权限以读取/写入帐户 111111 上的 s3 存储桶
- 帐户 111111 可以在除
/production/*之外的任何地方写信 - 帐户 222222 只能写入
/production/*
我在账户 111111 上创建了名为 myBucket 的 s3 存储桶,并在其中设置了以下存储桶策略
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Deny",
"NotPrincipal": {
"AWS": "arn:aws:iam::222222:root"
},
"Action": [
"s3:PutObject",
"s3:GetObjectVersion",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::myBucket/production/*"
},
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::111111:root",
"arn:aws:iam::222222:root"
]
},
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::myBucket"
}
]
}
然后我使用以下 IAM 策略在账户 111111 上创建一个用户
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": [
"s3:RestoreObject",
"s3:PutObjectAcl",
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::myBucket/*"
},
{
"Sid": "",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::myBucket"
}
]
}
以上内容应该足以让帐户 111111 担任该角色并能够写入 /myBucket/*,/myBucket/production/* 除外,这工作正常。
当账户 222222 担任该角色时,问题就出现了。它可以做与账户 111111 相同的事情(写到 /myBucket/* 除了/myBucket/production/*),这不是本意。
我怀疑这里的问题是一旦帐户 222222 担任该角色,它似乎来自同一个帐户,但我不确定。
在这种情况下如何识别源帐户,以便我可以在帐户 222222 上设置策略,即使它已在帐户 111111 上担任角色?
【问题讨论】:
-
第二个代码 sn-p 与第一个代码相矛盾,它允许
myBucket下的所有内容。您说第二个是允许 1111111 采取策略,但它只是提供对存储桶的无限制访问。 -
实际上第二个是在用户身上,虽然它确实为账户 111111 上的该用户提供了不受限制的访问权限,但 AWS DENY 策略始终优先于 ALLOW,因此用户无法在
/myBucket/production/*下写入
标签: amazon-web-services amazon-s3 amazon-iam amazon-policy