创建Azure安全策略审计无自定义规则NSG时遇错误及逻辑反转问题
Azure策略:审计仅含默认规则的NSG问题修复
问题1:策略保存失败(count.equals语法错误)
报错信息:
在‘租户根组’中创建策略定义‘NSG_Audit_Default_Policy_Only’失败。解析策略规则失败:‘在类型为CountExpressionDefinition的对象上找不到成员“equals”。路径“count.equals”。’
错误原因
Azure策略中count表达式的语法要求是将count块与比较操作符(如equals)同级,而非将equals嵌套在count内部。错误写法示例:
// 错误写法 { "count": { "field": "Microsoft.Network/networkSecurityGroups/securityRules[*]", "equals": 0 } }
问题2:策略逻辑反转
更新代码后出现逻辑颠倒:仅含默认规则的NSG被标记为合规,含自定义规则的被标记为不合规。原代码逻辑错误:
// 逻辑错误的代码片段 { "not": { "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].priority", "greaterOrEquals": 65000 } }
这段代码的含义是“不存在优先级≥65000的规则”,但NSG默认规则的优先级恰好都≥65000,因此仅含默认规则的NSG会不满足if条件,不会触发审计,出现逻辑反转。
正确的策略定义
要审计**仅包含默认规则(无自定义规则)**的NSG,核心逻辑是判断NSG中优先级<65000的规则数量为0(自定义规则优先级范围是100-64999)。完整策略代码如下:
{ "properties": { "displayName": "Audit NSGs with only default security rules", "description": "Audit Network Security Groups that have no custom security rules defined (only default rules exist)", "mode": "Indexed", "parameters": {}, "policyRule": { "if": { "allOf": [ { "field": "type", "equals": "Microsoft.Network/networkSecurityGroups" }, { "count": { "field": "Microsoft.Network/networkSecurityGroups/securityRules[*]", "where": { "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].priority", "lessThan": 65000 } }, "equals": 0 } ] }, "then": { "effect": "audit" } } } }
代码说明
count块统计所有优先级<65000的安全规则数量(即自定义规则)- 当数量等于0时,说明NSG仅含默认规则,触发
audit效果 mode: Indexed确保策略只针对支持资源索引的资源类型生效
内容的提问来源于stack exchange,提问作者vb312
相关产品推荐
相关产品推荐

