在此示例中,资源有两个允许的标记名称。
我想创建一个策略,如果给定的标签不是以上两种,则将资源评估为不合规。 (请注意,我想避免使用参数,而是将允许的标记名称“烙印”到定义中。)
我尝试了以下代码,但是当它们具有除上述标记之外的其他标签时,它会将资源标记为合规。
"mode": "Indexed",
"policyRule": {
"if": {
"allOf": [
{
"field": "tags",
"exists": "true"
},
{
"field": "tags",
"notContainsKey": "Environment"
},
{
"field": "tags",
"notContainsKey": "Client"
}
]
},
"then": {
"effect": "deny"
}
},
"parameters": {}
}
有人可以看到我要去哪里吗?
答案 0 :(得分:1)
如果我理解正确,则可以创建以下资源:
所有其他情况都必须被阻止。
{
"mode": "All",
"policyRule": {
"if": {
"not": {
"value": "[if(equals(length(field('tags')),0),'noTags',if(and(equals(length(field('tags')),1),or(contains(field('tags'),'Environment'),contains(field('tags'),'Client'))),'environmentOrClientTagOnlyExists', if(and(equals(length(field('tags')),2),and(contains(field('tags'),'Environment'),contains(field('tags'),'Client'))),'environmentAndClientTagsExist','atLeastOneNotAllowedTagExists' ) ) )]",
"in": [
"noTags",
"environmentOrClientTagOnlyExists",
"environmentAndClientTagsExist"
]
}
},
"then": {
"effect": "deny"
}
},
"parameters": {}
}