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

时间:2021-02-15 11:08:39

标签: amazon-web-services amazon-iam

我正在尝试创建一个 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: "*"

会涵盖该操作

2 个答案:

答案 0 :(得分:1)

是的,ListAllMyBuckets 操作包含在 * 中,但它的“资源”没有被标记,因为它的资源实际上并不是一个真正存在的资源,因此您不能执行该操作。您要么拥有 ListAllMyBuckets*,要么没有,无法根据存储桶对其进行限制,因为您没有列出存储桶,而是列出所有存储桶,而这个“所有存储桶" 没有标签,它真的没有任何东西,它并不真的存在。请参阅 https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.htmlResource typesListAllMyBuckets 是空的,没有实际的资源可以与之交互。

列出桶中的对象可以基于标签工作,但不能首先列出所有桶。很多地方都会发生同样的事情,上架不尊重上架资源的许可。以这种方式看待它:您可能不被允许对存储桶执行任何操作,您无法浏览它,配置它,但您仍然可以在列表中看到它。

解决此问题的唯一方法是,一旦发现缺少一项,就将这些特殊权限逐一添加。


请注意,存在不可标记的实际 AWS 资源,因此您根本不会成功使用该策略。

答案 1 :(得分:1)

对上述政策要非常小心,您正在授予销毁资源的访问权限,例如 route53 DeleteHostedZone@luk2302 指出的许多资源不遵循标记- 完全基于条件。

这对我来说是一堂辛苦的课。编写策略时请随身携带此文档 AWS services that work with IAM

这让您了解哪些服务支持什么样的限制,例如:

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

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