我正在尝试创建一个 IAM 组,该组可以完全访问具有特定标签的所有资源。
例如,如果一个 S3 存储桶和一个 EC2 实例被标记为 env:qa
,则组 project-qa
应该拥有对它们的完全访问权限。
到目前为止,我已经尝试了以下策略:
{
"Version": "2012-10-17",
"Statement": [
{
Effect: "Allow",
Action: "*",
Resource: "*",
Condition: {
"StringEquals": {
"aws:ResourceTag/env": "qa"
}
}
}
]
}
我创建了一个帐户来测试这一点,但在浏览存储桶时,我立即被告知我缺乏 s3:ListAllMyBuckets
操作的权限 - 我认为 Action: "*"
答案 0 :(得分:1)
是的,ListAllMyBuckets
操作包含在 *
中,但它的“资源”没有被标记,因为它的资源实际上并不是一个真正存在的资源,因此您不能执行该操作。您要么拥有 ListAllMyBuckets
的 *
,要么没有,无法根据存储桶对其进行限制,因为您没有列出存储桶,而是列出所有存储桶,而这个“所有存储桶" 没有标签,它真的没有任何东西,它并不真的存在。请参阅 https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html:Resource types
的 ListAllMyBuckets
是空的,没有实际的资源可以与之交互。
列出桶中的对象可以基于标签工作,但不能首先列出所有桶。很多地方都会发生同样的事情,上架不尊重上架资源的许可。以这种方式看待它:您可能不被允许对存储桶执行任何操作,您无法浏览它,配置它,但您仍然可以在列表中看到它。
解决此问题的唯一方法是,一旦发现缺少一项,就将这些特殊权限逐一添加。
请注意,存在不可标记的实际 AWS 资源,因此您根本不会成功使用该策略。
答案 1 :(得分:1)
对上述政策要非常小心,您正在授予销毁资源的访问权限,例如 route53
DeleteHostedZone 和 @luk2302 指出的许多资源不遵循标记- 完全基于条件。
这对我来说是一堂辛苦的课。编写策略时请随身携带此文档 AWS services that work with IAM。
这让您了解哪些服务支持什么样的限制,例如:
坦率地说,如果我是你,我会使用我想要的选择性允许操作,因为在 IAM 中默认所有操作都被拒绝。