AWS - 授予对具有特定标签的所有资源的访问权限

AWS - Granting access to all resources with specific tags

我正在尝试创建一个可以完全访问所有具有特定标签的资源的 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: "*"[=15= 会涵盖该操作]

是的,ListAllMyBuckets 操作包含在 * 中,但它的“资源”没有标记,因为它的资源实际上不是真正存在的资源,因此您不能执行该操作手术。你要么有 ListAllMyBuckets 用于 *,要么没有,没有办法根据桶来限制它,因为你没有列出桶,你列出了所有桶和这个“所有桶" 没有标签,它真的什么都没有,它真的不存在。请参阅 https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.htmlListAllMyBucketsResource types 是空的,没有实际资源可以与之交互。

列出存储桶中的对象可以基于标签工作,但不是一开始就列出所有存储桶。同样的事情会在很多地方发生,列出不尊重正在列出的资源的许可。这样看:您可能不被允许对存储桶执行任何操作,您不能浏览它、配置它,但您仍然可以在列表中查看它。

解决此问题的唯一方法是在发现缺少这些特殊权限后立即逐一添加。


请注意,有些实际的 AWS 资源是不可标记的,因此您采用该策略根本不会成功。

对上述政策要非常小心,您授予了销毁资源的权限,例如 route53 DeleteHostedZone 指出的许多资源没有'完全遵循基于标签的条件。

这对我来说是一种来之不易的教训。编写策略时请将此文档AWS services that work with IAM放在手边。

这让您了解哪种服务支持哪种限制,例如:

  • 资源级权限
  • 基于源的策略
  • 基于标签的授权
  • 临时凭证
  • 服务相关角色

坦率地说,如果我是你,我会使用我想要的选择性允许操作,因为默认情况下在 IAM 中所有操作都被拒绝。