是否有一种创建Azure策略的方法,该策略要求在创建资源时在资源上存在一个Tag,但不检查特定值?我看过的所有示例都是“检查标签X是否在那里,并且值Y”。
我只想让用户知道“您需要在此资源上放置标签X”,因为该值是用户定义的,因此我不能强制使用特定的值。
例如-我在每个资源上都需要“ BillingCode”,但是只有创建资源的人才能知道他们正确的帐单代码,因为每个人或项目的帐单代码都不同。
答案 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"
}
}
}
}