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

求助:如何通过Azure Policy正确限制NSG的Any/Any RDP与SSH访问

排查Azure NSG策略问题:阻止任意源的SSH/RDP规则

我来帮你排查下当前策略的问题,核心是逻辑完全搞反了,还有几个关键细节没覆盖到,导致策略根本没按你预期的方式工作:

现有策略的核心问题

  1. 逻辑反转
    你当前的策略逻辑是:当NSG规则的源地址不是*,同时目标端口是22/3389时执行拒绝。这就导致你想要允许的「受限源IP的SSH/RDP规则」被误拒绝,而你要阻止的「Any源的SSH/RDP规则」因为not equals *条件不成立,整个allOf判断失效,策略完全不会触发拒绝动作。

  2. 未覆盖数组类型字段
    Azure NSG规则支持用数组形式配置地址/端口,比如sourceAddressPrefixes(多源地址)、destinationPortRanges(多目标端口),你的策略只检查了单个值的字段,漏掉了数组场景下的*检测。

  3. 缺少关键过滤条件
    你没有限定规则是**入站(Inbound)和允许访问(Allow)**的情况——出站的SSH/RDP规则或者拒绝类型的规则,其实不需要做限制。

修正后的策略代码

下面是符合你需求的策略:仅当SSH/RDP规则的源地址被明确限制时允许创建,阻止任意源(*或Internet)的入站允许规则。

{
  "if": {
    "allOf": [
      {
        "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].direction",
        "equals": "Inbound"
      },
      {
        "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].access",
        "equals": "Allow"
      },
      {
        "anyOf": [
          {
            "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].destinationPortRange",
            "in": ["22", "3389"]
          },
          {
            "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].destinationPortRanges[*]",
            "in": ["22", "3389"]
          }
        ]
      },
      {
        "anyOf": [
          {
            "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].sourceAddressPrefix",
            "in": ["*", "Internet"]
          },
          {
            "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].sourceAddressPrefixes[*]",
            "in": ["*", "Internet"]
          }
        ]
      }
    ]
  },
  "then": {
    "effect": "deny"
  }
}

策略逻辑说明

  • 第一/第二个条件:仅针对入站且允许访问的规则,排除出站、拒绝规则的干扰;
  • 第三个条件:同时覆盖单个目标端口(destinationPortRange)和多目标端口数组(destinationPortRanges[*])的场景,检测是否包含22或3389;
  • 第四个条件:覆盖单个源地址(sourceAddressPrefix)和多源地址数组(sourceAddressPrefixes[*])的场景,检测是否是*或等价的Internet;
  • 当所有条件满足时触发拒绝,正好实现你的需求:允许有明确源IP限制的SSH/RDP规则,阻止任意源的规则。

验证方法

你可以通过以下方式测试策略:

  • 尝试创建「源地址为*、目标端口22/3389的入站允许规则」,应该会被策略阻止;
  • 尝试创建「源地址为指定IP(比如你的办公公网IP)、目标端口22/3389的入站允许规则」,应该可以正常创建。

内容的提问来源于stack exchange,提问作者javierma14

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:23:37