创建没有标签的资源组时Azure策略的怪异行为

时间:2019-01-10 04:17:50

标签: azure azure-resource-manager azure-resource-group

我已应用Azure策略,该策略强制用户在创建资源组时分配标签。

当我创建一个新的VM,然后填写所有字段时,我在同一向导中创建一个新的资源组,然后单击“查看并创建”按钮。这次天青政策被正确触发并阻止了我,因为新创建的RG没有使用标签创建。

但是,当我转到资源组策略并单击“添加”以创建新的RG时。那时我不填写标签,那么政策也不会触发。 我很惊讶为什么这项政策第一次生效但第二次没有生效。

{
  "if": {
    "allOf": [
      {
        "field": "tags",
        "exists": "false"
      },
      {
        "field": "type",
        "equals": "Microsoft.Resources/subscriptions/resourceGroups"
      }
    ]
  },
  "then": {
    "effect": "deny"
  }
}

2 个答案:

答案 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多次创建资源组,该策略运行良好。

enter image description here

我的测试政策:

enter image description here

如有必要,您可以在Github中打开一个问题。