我已应用Azure策略,该策略强制用户在创建资源组时分配标签。
当我创建一个新的VM,然后填写所有字段时,我在同一向导中创建一个新的资源组,然后单击“查看并创建”按钮。这次天青政策被正确触发并阻止了我,因为新创建的RG没有使用标签创建。
但是,当我转到资源组策略并单击“添加”以创建新的RG时。那时我不填写标签,那么政策也不会触发。 我很惊讶为什么这项政策第一次生效但第二次没有生效。
{
"if": {
"allOf": [
{
"field": "tags",
"exists": "false"
},
{
"field": "type",
"equals": "Microsoft.Resources/subscriptions/resourceGroups"
}
]
},
"then": {
"effect": "deny"
}
}
答案 0 :(得分:1)
您遇到的差异是由资源组的JSON表示形式的差异引起的。
取决于您在门户网站中单击的内容,资源组JSON可能没有标签属性,例如:
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/foo",
"name": "foo",
"location": "eastus",
"properties": {
"provisioningState": "Succeeded"
}
}
有时,它可能是使用空标签属性创建的,例如:
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/foo",
"name": "foo",
"location": "eastus",
"properties": {
"provisioningState": "Succeeded"
},
"tags": {}
}
仅当“ tags”属性缺失或为空时,策略规则中的"exists": "false"
条件才会触发,因此具有"tags": {}
的资源组将绕过您的策略,即使它没有任何标签。
答案 1 :(得分:0)
似乎可以弄清楚,它与Azure策略无关,您的策略应该可以正常工作,这可能是在门户中创建资源组时的错误。
我尝试通过Powershell多次创建资源组,该策略运行良好。
我的测试政策:
如有必要,您可以在Github中打开一个问题。