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
会将它翻转为 false
而 Deny
不会申请。
我不知道如何更改您的政策,因为我不明白您想要实现什么。我刚刚向你解释了为什么你会遇到这个问题。
我有以下政策:
{
"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
不会申请。
我不知道如何更改您的政策,因为我不明白您想要实现什么。我刚刚向你解释了为什么你会遇到这个问题。