如何在Azure Policy中显示虚拟机名称而非扩展名称
如何在Azure Policy中显示虚拟机名称而非扩展名称
问题根源
你的当前策略直接针对扩展资源(Microsoft.Compute/virtualMachines/extensions)而非虚拟机本身,所以触发违规时,显示的是扩展名称而非对应的VM。另外原策略的逻辑也存在偏差:你设置的AnyOf条件会匹配所有存在的扩展(无论发布者是否为AD),这和你“审计未安装AD扩展的VM”的核心需求不符。
解决方案:调整策略以针对VM资源评估
我们需要把策略的评估对象切换为虚拟机资源,通过Azure Policy的子资源别名检查VM下是否存在Azure AD扩展。当VM缺失该扩展时触发审计,此时违规条目会直接关联到VM,显示VM名称。
以下是修正后的完整策略代码:
{ "mode": "Indexed", "policyRule": { "if": { "allOf": [ { "field": "type", "equals": "Microsoft.Compute/virtualMachines" }, { "not": { "any": [ { "field": "Microsoft.Compute/virtualMachines/extensions[*].publisher", "equals": "Microsoft.Azure.ActiveDirectory" } ] } } ] }, "then": { "effect": "[parameters('effect')]" } }, "parameters": { "effect": { "type": "String", "metadata": { "displayName": "Effect", "description": "Se puede elegir si desactivar o auditar cuando no se ha instalado el addon del AD en las máquinas virtuales", "portalReview": true }, "allowedValues": [ "Audit", "Disabled" ], "defaultValue": "Audit" } } }
关键修改细节解析
切换评估对象为VM
- 将
field: type设置为Microsoft.Compute/virtualMachines,让策略直接以虚拟机为评估目标,违规时自然关联VM名称。 - 模式使用
Indexed(VM属于Indexed类型资源),能显著提升策略的评估性能。
- 将
修正逻辑匹配核心需求
- 用
not + any组合实现精准判断:any函数遍历VM下的所有扩展,检查是否存在发布者为Microsoft.Azure.ActiveDirectory的扩展;not表示当完全不存在这类扩展时,触发策略效果,完美匹配你“审计未装AD扩展的VM”的需求。
- 用
兼容原有参数配置
- 保留了你原有的
effect参数设置,你依然可以自由切换审计/禁用两种策略效果。
- 保留了你原有的
方案有效性说明
Azure Policy支持通过Microsoft.Compute/virtualMachines/extensions[*].publisher这类别名直接访问VM子资源的属性,无需依赖VM JSON中的resources数组。当策略针对VM资源评估时,违规条目会直接关联到对应的虚拟机,完全解决你当前显示扩展名称的问题。
备注:内容来源于stack exchange,提问作者Héctor Torres-Calderón
相关产品推荐
相关产品推荐

