强制标记的 IAM 策略不起作用

强制标记的 IAM 策略不起作用

0 反对 收藏 我创建了一个 IAM 策略,如果未使用“empname”和“team”键标记,则拒绝创建 EBS 卷。该策略已附加到测试用户。

当我尝试创建未定义标签的卷时,它会抛出错误,这很好。但现在当我尝试创建带有任何其他标签(任何具有动态值的标签)的卷时,它会创建卷,这是意料之外的。

这是为其创建的 IAM 策略:

{
 "Version": "2012-10-17",
  "Statement": [
{
    "Sid": "AllowCreateTaggedVolumes",
    "Effect": "Deny",
    "Action": "ec2:CreateVolume",
    "Resource": "arn:aws:ec2:us-east-1:axxxxxxxxxxx:volume/*",
    "Condition": {
        "ForAllValues:StringNotLike": {
            "aws:RequestTag/empname": "*",
            "aws:RequestTag/team": "*"
        },
        "ForAllValues:StringEquals": {
            "aws:TagKeys": [
                "empname",
                "team"
            ]
        }
    }
  }
]
}

有没有办法限制当且仅当使用这两个标签时才创建卷。如果我们也可以指定要使用的标签值,那就太好了。

答案1

AWS 文档中有一个具体示例:

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ExamplePolicies_EC2.html#iam-example-manage-volumes-tags

{
  "Version": "2012-10-17",
  "Statement": [
  {
      "Sid": "AllowCreateTaggedVolumes",
      "Effect": "Allow",
      "Action": "ec2:CreateVolume",
      "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*",
      "Condition": {
          "StringEquals": {
              "aws:RequestTag/costcenter": "115",
              "aws:RequestTag/stack": "prod"
          },
          "ForAllValues:StringEquals": {
              "aws:TagKeys": ["costcenter","stack"]
          }
       }
  }
}

它基于允许而不是拒绝,并且使用正向字符串匹配而不是负向字符串匹配。你有什么理由要使用拒绝吗?

使用拒绝,你是说:

如果用户尝试创建卷,则如果 (1) 不包含标签“empname”和“team”且 (2) 指定的任何标签为“empname”或“team”,则拒绝该操作。

当你指定随机标签时,第一个条件得到满足,但第二个不是,因此不会发生拒绝。

我认为,如果您遵循 AWS 示例并使用允许和正向字符串匹配,则会更合乎逻辑且不会那么令人困惑。

否则,尝试将第二个条件更改为:

    "ForAllValues:StringNotEquals": {
        "aws:TagKeys": [
            "empname",
            "team"
        ]
    }

但我实际上并不确定这是否有效。

相关内容