You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Policy未正确定位Windows VM:合规性判断异常咨询

问题分析与解决方案

你遇到的问题核心是Policy的逻辑方向搞反了,不是equals操作符的理解错误,而是你当前的规则完全偏离了「检查混合使用权益是否启用」的目标。

为什么会出现这个奇怪的不合规提示?

Azure Policy的audit效果是:当if里的条件满足时,会把该资源标记为「不合规」。你当前的if条件是匹配所有Windows虚拟机,所以所有这类VM都会触发audit,系统提示里的内容其实是在告诉你:「这个VM的osType确实等于Windows,符合你设定的if条件,所以标记为不合规」——这是Policy的正常行为,只是你的逻辑目标错了。

正确的Policy逻辑应该怎么写?

你真正想要的是:标记那些是Windows虚拟机,但未启用混合使用权益(HUB)的资源。所以if条件需要同时满足三个规则:

  • 资源类型是Microsoft.Compute/virtualMachines
  • OS类型是Windows
  • 并且licenseType字段不等于Windows_Server(启用HUB的Windows VM,这个字段会被设置为Windows_Server;未启用的话,这个字段要么不存在,要么为空)

对应的Policy片段应该是这样:

"if": {
  "allOf": [
    { "field": "type", "equals": "Microsoft.Compute/virtualMachines" },
    { "field": "Microsoft.Compute/virtualMachines/storageProfile.osDisk.osType", "equals": "Windows" },
    {
      "anyOf": [
        { "field": "Microsoft.Compute/virtualMachines/licenseType", "notEquals": "Windows_Server" },
        { "field": "Microsoft.Compute/virtualMachines/licenseType", "exists": false }
      ]
    }
  ]
},
"then": {
  "effect": "audit"
}

补充说明

这个逻辑对你提到的「迁移而来、与现有镜像产品无关联的VM」同样有效,因为不管VM的镜像来源如何,只要启用了混合使用权益,licenseType字段就会被设置为Windows_Server;未启用的话,该字段要么不存在,要么为空值,这样的资源就会被正确标记为不合规。

内容的提问来源于stack exchange,提问作者Bas van der Kruijssen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 20:54:07