我有一个名为 test33333 的 AWS S3 存储桶,我需要锁定最低必要权限。我创建了一个存储桶策略,以拒绝除用户帐户之外的所有内容我的用户一名角色我的角色.(账户名xxx出)
{
"Version": "2012-10-17",
"Id": "Policy1571158084375",
"Statement": [
{
"Sid": "Stmt1568227480842",
"Effect": "Deny",
"NotPrincipal": {
"AWS": [
"arn:aws:iam::xxxxxxxxxxxxx:role/MyRole",
"arn:aws:iam::xxxxxxxxxxxxx:user/MyUser"
]
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::test33333"
}
]
}
显然这是行不通的,尽管我的角色和我的用户两者都具有完全的 S3 读取访问权限,并且当上述存储桶策略被删除时,都可以读取和写入此存储桶。
我忽略了什么?我以为上面的政策应该拒绝所有人,但是我的用户和我的角色然后使用附加到用户的现有策略授予访问权限。最终,我希望存储桶策略能够控制所有访问,而不必通过策略明确授予用户或角色对存储桶的访问权限。
到目前为止,我已经尝试了所有能想到的方法。谢谢!
答案1
谢谢大家。我尝试了上述方法,但没有任何改变。不过我确实发现了这个问题,并将在这里发布。
上述方法对于用户账户非常有效,但对于 IAM 角色则存在问题,因为角色的 Principal 值由两个 Amazon 资源名称 (ARN) 组成,即角色 ARN 和假定角色 ARN。角色 ARN 是 IAM 角色本身的标识符,而假定角色 ARN 是日志中角色会话的标识。使用 NotPrincipal 元素时,必须同时包含两个 ARN 才能使此方法起作用,并且第二个 ARN 应包含变量名称。通常,您会在变量字符串所在的位置指定通配符,但在 Principal 或 NotPrincipal 元素中不允许这样做。因此,还有另一种方法,您可以使用条件而不是 NotPrincipal 元素将 S3 存储桶访问权限限制为账户内的特定 IAM 角色或用户。即使同一账户中的另一个用户具有管理策略或带有 s3:* 的策略,如果未明确列出,他们也会被拒绝。
有一篇很好的 AWS 文章介绍此内容:https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/
所以最后,上述方法对于用户帐户访问来说效果很好,但在切换角色时则不行,因此角色需要额外的配置来包含假定角色的 ARN。
答案2
听起来您可能需要在资源标记中指定存储桶及其内容 - 某些权限仅直接适用于存储桶,而其他权限仅适用于对象,例如
"Resource": [
"arn:aws:s3:::test33333",
"arn:aws:s3:::test33333/*"
]