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

创建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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:11:25