IAM策略和aws:RequestTag的行为与我预期的不同



我有以下策略:

{
"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会将其翻转为false,而Deny不适用。

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

相关内容

  • 没有找到相关文章

最新更新