对标签强制执行的自定义策略
Posted
技术标签:
【中文标题】对标签强制执行的自定义策略【英文标题】:Custom Policy to Enforce on Tag 【发布时间】:2020-04-07 14:28:35 【问题描述】:我正在尝试创建一个自定义策略,该策略将根据标签值拒绝。标签是“external VM
”。然后,该策略允许部署一组已批准的扩展。但是,当我尝试使用"tag.external vm"
添加标签时,它会显示一个错误,这与本文末尾的相同(The value of 'field' property 'Tag' of the policy rule must be one of 'Name, Type, Location, Tags, Kind, FullName, Identity.type' or an alias, e.g.
)。
"mode": "All",
"policyRule":
"if":
"allOf": [
"field": "tag.External VM",
"equals": "Third Party"
,
"field": "Microsoft.Compute/virtualMachines/extensions/publisher",
"equals": "Microsoft.Compute"
,
"field": "Microsoft.Compute/virtualMachines/extensions/type",
"notin": "[parameters('AllowedExtensions')]"
]
,
"then":
"effect": "deny"
,
"parameters":
"AllowedExtensions":
"type": "Array",
"metadata":
"displayName": "AllowedExtensions",
"description": "Allowed VM Extensions"
参数文件是
"AllowedExtensions":
"type": "Array",
"metadata":
"description": "The list of extensions that will be Allowed.",
"strongType": "type",
"displayName": "Allowed extension"
,
"tagName":
"type": "String",
"metadata":
"description": "The Referenced Tag Name.",
"displayName": "Tag to Query"
有没有办法用其中的空格来分配标签名称。还有其他选择是用“external-vm
”重新标记它或参数化标记名,例如
"field": "[parameters('tagName')]",
"equals": "Third Party"
,
但这给了我错误
The value of 'field' property 'Tag' of the policy rule must be one of 'Name, Type, Location, Tags, Kind, FullName, Identity.type' or an alias, e.g.
有什么想法吗?
提前致谢。
【问题讨论】:
【参考方案1】:参数不正确
"[concat('tags[', parameters('tagName'), ']')]",
将其作为参数添加可以解决组织问题。
【讨论】:
将其添加为参数有效。你也可以这样硬编码:"field": "tags['External VM']"
@sapphiremirage 感谢您的提示,这真是个好主意,因为它是一个设定值。以上是关于对标签强制执行的自定义策略的主要内容,如果未能解决你的问题,请参考以下文章
Collection接口下的Set接口TreeSet类中的自定义比较策略