我需要一个用于标记的 Azure 策略。我希望在创建资源组时,用户需要定义一个标签。该策略还应该检查tagvaule是不是空的。
我已经尝试了以下内容。
{
"properties": {
"displayName": "Require a tag Billto and a value that is not empty",
"policyType": "Custom",
"mode": "All",
"description": "Enforces a required tag and its value on resource groups.",
"metadata": {
"category": "Tags",
},
"parameters": {
"tagName": {
"type": "String",
"metadata": {
"displayName": "Tag Name",
"description": "Name of the tag, such as 'Billto'"
}
},
"tagValue": {
"type": "String",
"metadata": {
"displayName": "Tag Value",
"description": "Value of the tag, such as 'Costcenter'"
}
}
},
"policyRule": {
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Resources/subscriptions/resourceGroups"
},
{
"field": "[concat('tags[', parameters('tagName'), ']')]",
"exists": "false"
},
{
"value": "[concat('tags[', parameters('tagValue'), ']')]",
"equals": ""
}
]
},
"then": {
"effect": "deny"
}
}
}
谁能帮帮我,给我正确的代码? 谢谢,托马斯
该策略定义将拒绝给定标签为空值或完全没有标签的资源组。
{
"properties": {
"mode": "All",
"parameters": {
"tagName": {
"type": "String",
"metadata": {
"displayName": "Tag Name",
"description": "Name of the tag, such as 'Billto'"
}
}
},
"policyRule": {
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Resources/subscriptions/resourceGroups"
},
{
"anyOf": [
{
"field": "[concat('tags[', parameters('tagName'), ']')]",
"exists": false
},
{
"field": "[concat('tags[', parameters('tagName'), ']')]",
"equals": ""
}
]
}
]
},
"then": {
"effect": "deny"
}
}
}
}
分解如下:
parameters('tagName')
解析为参数tagName的值。在本例的其余部分,我们将使用 Billto
作为标签名称。"field": "[concat('tags[', parameters('tagName'), ']')]"
解析为 "field": "tags[Billto]"
"field": "tags[Billto]"
会得到 价值 的 Billto
标签。Billto
标签,该 Billto
标签不会有一个值,所以 "exists" : false
将是真实的,政策将拒绝。如果 Billto
标签的值为空,那么 "equals": ""
将是真实的,而政策将拒绝。