在没有标签的情况下创建资源组时 Azure Policy 出现奇怪的行为
Azure Policy weird behaviour while creating resource group without tag
我应用了 Azure 策略,强制用户在创建资源组时分配标签。
当我创建一个新的 VM 然后填写所有字段时,我在同一个向导中创建一个新的资源组,然后单击查看和创建按钮。这次 azure policy 被正确触发并阻止了我,因为新创建的 RG 没有使用标签创建。
但是当我转到资源组策略并单击“添加”以创建新 RG 时。那个时候我不填写标签,那么政策也不会被触发。
我很奇怪为什么这个政策第一次奏效,但第二次就不行了。
{
"if": {
"allOf": [
{
"field": "tags",
"exists": "false"
},
{
"field": "type",
"equals": "Microsoft.Resources/subscriptions/resourceGroups"
}
]
},
"then": {
"effect": "deny"
}
}
似乎弄明白了,它与 Azure 策略无关,你的策略应该可以正常工作,它可能是在门户中创建资源组的 blade 的错误。
我多次尝试通过 powershell 创建资源组,该策略工作正常。
我的测试政策:
如有必要,您可以在 Github 中提出问题。
您遇到的差异是由资源组的 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": {}
}
策略规则中的 "exists": "false"
条件只会在 "tags" 属性 缺失或为空时触发,因此具有 "tags": {}
的资源组将绕过您的政策,即使它没有任何标签。
我应用了 Azure 策略,强制用户在创建资源组时分配标签。
当我创建一个新的 VM 然后填写所有字段时,我在同一个向导中创建一个新的资源组,然后单击查看和创建按钮。这次 azure policy 被正确触发并阻止了我,因为新创建的 RG 没有使用标签创建。
但是当我转到资源组策略并单击“添加”以创建新 RG 时。那个时候我不填写标签,那么政策也不会被触发。 我很奇怪为什么这个政策第一次奏效,但第二次就不行了。
{
"if": {
"allOf": [
{
"field": "tags",
"exists": "false"
},
{
"field": "type",
"equals": "Microsoft.Resources/subscriptions/resourceGroups"
}
]
},
"then": {
"effect": "deny"
}
}
似乎弄明白了,它与 Azure 策略无关,你的策略应该可以正常工作,它可能是在门户中创建资源组的 blade 的错误。
我多次尝试通过 powershell 创建资源组,该策略工作正常。
我的测试政策:
如有必要,您可以在 Github 中提出问题。
您遇到的差异是由资源组的 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": {}
}
策略规则中的 "exists": "false"
条件只会在 "tags" 属性 缺失或为空时触发,因此具有 "tags": {}
的资源组将绕过您的政策,即使它没有任何标签。