Azure策略审核经典SQL漏洞评估:添加扫描条件后未检测资源
Azure策略无法检测未启用SQL漏洞评估定期扫描资源的原因及修复
你的问题出在未考虑“漏洞评估未配置”的场景:
当SQL服务器还没配置过漏洞评估时,Microsoft.Sql/servers/vulnerabilityAssessments/recurringScans.isEnabled这个属性字段根本不存在于资源的属性数据中。而你用了allOf组合所有条件,只要有一个条件不满足(比如字段不存在时,notEquals "true"的判断不成立),整个规则就不会匹配任何资源。
换句话说:
- 已配置漏洞评估但关闭定期扫描的资源:字段存在且值为false,
notEquals "true"成立,但要和前两个条件一起满足才会被匹配 - 未配置漏洞评估的资源:字段不存在,
notEquals "true"的条件直接不成立,所以不会被allOf匹配 - 已开启定期扫描的资源:字段值为true,
notEquals "true"不成立,也不会被匹配
最终导致没有资源符合所有条件。
修复后的策略规则
你需要用anyOf来覆盖“字段不存在”和“字段值不等于true”两种情况,修改后的policyRule如下:
"policyRule": { "if": { "allOf": [ { "field": "type", "equals": "Microsoft.Sql/servers" }, { "field": "kind", "notContains": "analytics" }, { "anyOf": [ { "field": "Microsoft.Sql/servers/vulnerabilityAssessments/recurringScans.isEnabled", "notEquals": "true" }, { "field": "Microsoft.Sql/servers/vulnerabilityAssessments/recurringScans.isEnabled", "exists": false } ] } ] } }
这样就能同时检测到两类资源:
- 未配置漏洞评估的经典SQL服务器
- 已配置漏洞评估但关闭了定期扫描的经典SQL服务器
内容的提问来源于stack exchange,提问作者Kamsiinov
相关产品推荐
相关产品推荐

