创建要求特定标记但不具有默认值的Azure策略?

时间:2019-03-03 19:08:48

标签: azure

是否有一种创建Azure策略的方法,该策略要求在创建资源时在资源上存在一个Tag,但不检查特定值?我看过的所有示例都是“检查标签X是否在那里,并且值Y”。

我只想让用户知道“您需要在此资源上放置标签X”,因为该值是用户定义的,因此我不能强制使用特定的值。

例如-我在每个资源上都需要“ BillingCode”,但是只有创建资源的人才能知道他们正确的帐单代码,因为每个人或项目的帐单代码都不同。

2 个答案:

答案 0 :(得分:0)

您可以使用订阅策略来完成此操作。除非满足某些规则,否则它们将阻止部署Azure资源。

以下示例摘自here。 您可以使用notMatch运算符而不是下面的直接匹配来修改此示例。 More operators here

{
   "properties": {
      "displayName": "Enforce tag and its value on resource groups",
      "description": "Enforces a required tag and its value on resource groups.",
      "mode": "All",
      "parameters": {
         "tagName": {
            "type": "String",
            "metadata": {
               "description": "Name of the tag, such as costCenter"
            }
         },
         "tagValue": {
            "type": "String",
            "metadata": {
               "description": "Value of the tag, such as headquarter"
            }
         }
      },
      "policyRule": {
         "if": {
            "allOf": [
               {
                  "field": "type",
                  "equals": "Microsoft.Resources/subscriptions/resourceGroups"
               },
               {
                  "not": {
                     "field": "[concat('tags[',parameters('tagName'), ']')]",
                     "equals": "[parameters('tagValue')]"
                  }
               }
            ]
         },
         "then": {
            "effect": "deny"
         }
      }
   }
}

答案 1 :(得分:0)

您需要exists operator

例如:

{
    "policyRule": {
        "if": {
            "field": "[concat('tags[',parameters('tagName'), ']')]",
            "exists": "false"
        },
        "then": {
            "effect": "deny"
        }
    },
    "parameters": {
        "tagName": {
            "type": "String",
            "metadata": {
                "description": "Name of the tag, such as costCenter"
            }
        }
    }
}