【问题标题】:IAM Policy with `aws:ResourceTag` not supported不支持带有“aws:ResourceTag”的 IAM 政策
【发布时间】:2020-03-18 11:40:35
【问题描述】:

我正在尝试创建一个 IAM 策略,让用户可以完全访问 dynamodb,但需要注意的是,表上必须有标签 Stage 和值 Dev。基本上你可以创建一个表,但你应该在上面添加标签Stage 和值Dev。您只能查看/更新标记为Stage=Dev 的那些表等。

AWS 文档提到了一种使用 Global Context Keys 轻松实现此目的的方法:aws:ResourceTag

但是当我使用可视化编辑器时,我在上下文键列表中找不到键。如果我手动编辑 JSON 并添加它,我会收到警告 condition key is not supported

这是我的政策:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "OnlyDynamoDBWithTagValueDev",
        "Effect": "Allow",
        "Action": "dynamodb:*",
        "Resource": "arn:aws:dynamodb:*:accountnumber:table/*",
        "Condition": {
            "StringEquals": {
                "aws:ResourceTag/Stage": "Dev"
            }
        }
    }
]}

我在这里可能做错了什么?

【问题讨论】:

    标签: amazon-web-services amazon-iam amazon-policy


    【解决方案1】:

    DynamoDB 不支持基于标签的授权,因此您尝试执行的操作将不起作用。请参阅here 了解相关服务列表。

    【讨论】:

      【解决方案2】:

      我认为你没有做错任何事。 AWS 文档不正确且具有误导性。 aws:ResourceTag 不是here 所述的全局条件键。

      全局条件键是带有 aws: 前缀的条件键。 AWS 服务可以提供包含服务前缀的服务特定密钥。例如,IAM 条件键包括 iam: 前缀。

      根据文档,任何带有 aws: 前缀的条件都是全局条件。但是,如果您查看其他服务的条件,例如 IOT,您将看到带有 aws: 前缀的服务特定条件,这与文档冲突。

      然而,ECR 将 ecr:ResourceTagaws:ResourceTag 条件列为服务特定条件。

      另一方面,EC2 只有ec2:ResourceTag。 RDS 有 rds:db-tag 用于相同目的。但是,DynamoDb 没有用于此目的的服务特定标签。

      简而言之,aws:ResourceTag 不是全局条件键。一些服务使用 aws: 前缀创建特定于服务的标签,即使它们不应该这样做以符合 AWS 命名约定。

      我建议您为开发资源创建一个单独的帐户。 如果您不能这样做,您可以尝试更改策略中的逻辑作为解决方法,例如而不是标签条件,在您的策略中应用命名约定,例如任何以 dev_ 开头的表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-24
        • 2020-03-30
        • 2019-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多