我正在创建Azure策略,在能够获得以下json策略的帮助下,它的行为方式与我期望的方式不同。
根据我的理解(如果我错了,请纠正我):Azure Policy基本上是[if]和[then]声明。在[if]之后,allof标签进入图片,说明了这一点。如果条件[Type:资源组]匹配并且[Tag Name Env!= prod]和[Tag Name OS!= windows] [然后]拒绝。
但是上述策略的结果是:如果我在单个ResourceGroup中指定[Env = prod并指定OS = Linux],则该策略允许用户创建资源组。 这不应该是该政策的结果。
预期结果应该是:
场景1(政策行为正确):如果我仅指定[Env = prod],那么它应该允许我创建ResourceGroup或如果我指定其他任何内容则阻止我
方案2(策略正确执行 ):[OS = Windows]然后它应该允许我创建RG,否则如果我指定其他任何内容,则将我阻止。
场景3(政策行为不正确):[env = prod,OS = linux],由于第二个TAG不正确,因此应该阻止我。
{
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Resources/subscriptions/resourceGroups"
},
{
"field": "tags.Env",
"notEquals": "Prod"
},
{
"field": "tags.OS",
"notEquals": "windows"
}
]
},
"then": { "effect": "deny" }
}
答案 0 :(得分:1)
您提供的策略定义可以正常工作。如果tags.Env != "Prod" && tags.OS != "Windows"
,它将仅拒绝资源组。如果您翻转此条件,您会发现它会允许您所经历过的tags.Env == "Prod" || tags.OS == "Windows"
所在的任何资源组。
以下策略定义将拒绝没有预期标签的任何资源组:
{
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Resources/subscriptions/resourceGroups"
},
{
"anyOf": [
{
"field": "tags.Env",
"notEquals": "Prod"
},
{
"field": "tags.OS",
"notEquals": "windows"
}
]
}
]
},
"then": {
"effect": "deny"
}
}