IAM 政策和 aws:RequestTag 的行为与(我)预期的不同

IAM policy and aws:RequestTag behaves differently as (to what I) expected

我有以下政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Action": [
                "iam:TagRole"
            ],
            "Resource": "arn:aws:iam::*:role/*",
            }
        },
        {
            "Sid": "",
            "Effect": "Deny",
            "Action": [
                "iam:TagRole"
            ],
            "Resource": "arn:aws:iam::*:role/*",
            "Condition": {
                "StringNotEquals": {
                    "aws:RequestTag/TeamCode": [
                        "aaaa"
                    ]
                }
            }
        }
    ]
}

我希望此政策允许我标记任何角色(从第一个语句开始),除非我想添加与 'aaaa'.

不匹配的 TeamCode 标记

如图所示,如果我想向角色添加 'CostCenter' 标记,我希望 aws:RequestTag/TeamCode 键不存在于请求上下文中,这将导致条件不成立遇见了,拒绝就不会发生。当我使用 IAM 策略模拟器或实际角色对此进行测试时,不会发生这种情况。拒绝块每次都被激活(我得到一个明确的角色拒绝,拒绝块被 Policy Sim 突出显示)。

我错过了什么?

如果 aws:RequestTag/TeamCode 不存在,以下将是 不匹配 (false):

                    "aws:RequestTag/TeamCode": [
                        "aaaa"
                    ]

但由于您在 StringNotEquals 中使用了 Not 运算符,您正在 翻转 条件 true,使其处于活动状态。

随后,您的策略 仅允许 将标签 TeamCode=aaaa 添加到角色。由于不匹配,所有其他标签都将被拒绝。原因是对于这个标签,条件是 true (有匹配),而你的操作符中的 Not 会将它翻转为 falseDeny 不会申请。

我不知道如何更改您的政策,因为我不明白您想要实现什么。我刚刚向你解释了为什么你会遇到这个问题。