具有预定义值的 Azure Policy 标记

Azure Policy Tag with predefined values

我目前在某个时候与 Azure Policy 作斗争。我要强制执行 特定标签及其值。 (听起来很标准) 但我想允许来自预定义集合的一个值 在创建过程中需要。例如

环境:(允许任何这些预定义值)

我创建了一个带有其他一些策略的倡议,并在我分配这个倡议时。

它将仅强制执行所选值,但不允许所有其他值。

  "properties": {
    "displayName": "Tag3",
    "policyType": "Custom",
    "mode": "All",
    "metadata": {
    },
    "parameters": {
      "tags": {
        "type": "Array",
        "metadata": {
          "displayName": "Environment",
          "description": "The list of Environments"
        },
        "allowedValues": [
          "Test",
          "Dev",
          "PreProd",
          "Prod"
        ],
        "defaultValue": [
          "Prod"
        ]
      }
    },
    "policyRule": {
      "if": {
        "not": {
          "field": "tags",
          "in": "[parameters('tags')]"
        }
      },
      "then": {
        "effect": "deny"
      }
    }
  }

设置 defaultValue 而不设置 []。就像这个:"defaultValue": "Prod".

更多细节,你可以参考这个article

选项 1:删除“默认值”属性 并在分配策略时提供所需值的列表,作为“;”分隔列表:

Test;Dev;PreProd

选项 2:将“默认值”保留为数组,并填充所有允许的值:

"defaultvalue": [
          "Test",
          "Dev",
          "PreProd",
          "Prod"
        ]

你能试试这个吗?...

"properties": {
    "displayName": "Tag3",
    "policyType": "Custom",
    "mode": "All",
    "metadata": {
    },
    "parameters": {
      "tags": {
        "type": "Array",
        "metadata": {
          "displayName": "Environment",
          "description": "The list of Environments"
        },
        "allowedValues": [
          "Test",
          "Dev",
          "PreProd",
          "Prod"
        ],
        "defaultValue": [
          "Prod"
        ]
      }
    },
    "policyRule": {
      "if": {
        "not": {"or": {
          {"field": "tags",
          "equals": "Test"},
          {"field": "tags",
          "equals": "Dev"},
          {"field": "tags",
          "equals": "PreProd"},
          {"field": "tags",
          "equals": "Prod"},
        }
       }
      },
      "then": {
        "effect": "deny"
      }
    }
  }