Azure NSG 概念与作用详解

Azure Network Security Group 概念和作用

下面用简明要点说明 Azure Network Security Group(NSG,网络安全组)的概念与作用。

概念

  • NSG 是 Azure 在三/四层(L3/L4)的状态包过滤防火墙,用“安全规则”按源/目的、端口、协议来允许或拒绝入站与出站流量。
  • 可关联的位置:虚拟网络子网(Subnet)和虚拟机网卡(NIC)。两处同时关联时,必须两边都放行,流量才会通过。

规则组成与评估

  • 关键字段:优先级(数值越小越先匹配,100–4096)、方向(Inbound/Outbound)、协议(TCP/UDP/ICMP/Any)、源/目的(IP/CIDR、服务标记 Service Tag、应用安全组 ASG)、端口(单个/范围/列表)、动作为 Allow/Deny。
  • 状态检测:NSG 是有状态的,允许一个方向后,返回流量会自动放行(无须为返回流再写规则)。
  • 匹配顺序:自上而下按优先级首条命中即生效;若无自定义规则匹配,则落入默认规则。
  • 默认规则(示例优先级):
    • 入站:AllowVnetInBound(65000)、AllowAzureLoadBalancerInBound(65001)、DenyAllInBound(65500)
    • 出站:AllowVnetOutBound(65000)、AllowInternetOutBound(65001)、DenyAllOutBound(65500)

常用配套概念

  • Service Tags(服务标记):如 VirtualNetwork、Internet、AzureLoadBalancer、Storage、Sql 等,用来代指一组随平台更新的地址前缀,减少维护成本。
  • ASG(Application Security Group):把一组 VM 网卡打标签,在 NSG 规则中用 ASG 做源/目的,便于按应用分组写规则。
  • 增强规则(Augmented rules):单条规则可写多个 IP 前缀与端口集合,减少规则数量。

典型使用场景

  • 最小权限的网络分段与东西向访问控制(如 Web/业务/DB 三层架构之间只放行必要端口)。
  • 仅允许从公司出口 IP 管理 VM(如仅开放 SSH/22 或 RDP/3389 给特定公网段)。
  • 出站管控:默认拒绝到 Internet,仅允许到必要的 PaaS(用 Service Tags)或通过 Private Endpoint。
  • 与负载均衡/NAT Gateway/Azure Firewall 组合:NSG 做基础 L3/L4 访问控制,LB/NAT 负责 NAT,Firewall 负责更高级策略。

诊断与可观测性

  • NSG Flow Logs(通过 Network Watcher)输出到存储账号,配合 Traffic Analytics 可做可视化与分析。
  • 工具:Effective security rules(有效规则查看)、IP flow verify(IP 流验证)、Next hop(下一跳)等,便于排错。

限制与注意事项

  • 功能边界:仅 L3/L4,不做应用层(URL/域名)过滤、威胁情报、入侵防护;不做 NAT。
  • 域名匹配:NSG 不能按 FQDN 放行/拒绝;若需按域名控制,考虑 Azure Firewall、代理/DNS 方案或使用 Private Endpoint。
  • 关联与配额:每个子网/NIC 只能关联一个 NSG;每个 NSG 的自定义规则有数量上限(常见为约 1000 条,具体以订阅限额为准)。
  • 特殊子网:不要在 AzureFirewallSubnet 关联 NSG;GatewaySubnet、AzureBastionSubnet 一般不建议绑定或需放行平台必需端口(遵循官方文档)。
  • 私有终结点:在含 Private Endpoint 的子网上使用 NSG有额外要求,需按最新文档启用并配置相应网络策略与放行条目。

与其他产品对比

  • NSG vs Azure Firewall:NSG 提供免费、轻量的 L3/L4 访问控制;Azure Firewall 是托管的 L3–L7 防火墙(含应用规则、FQDN、威胁情报、DNAT/SNAT 等),功能更强、按容量/小时计费。
  • NSG vs ASG:ASG 只是“分组标签”,需配合 NSG 规则使用,本身不生效。
  • NSG vs DDoS:DDoS Protection 在网络边缘抵御洪泛类攻击;NSG 不提供抗 DDoS 能力。

简单示例

  • 仅允许公司出口段 SSH 到 Web 服务器:
    • 入站:Allow,TCP 22,源 203.0.113.0/24,目的 ASG:web-servers
  • Web 访问数据库:
    • 入站(DB 所在 NIC/子网 NSG):Allow,TCP 1433,源 ASG:web,目的 ASG:db
  • 严格出站,仅允许到 Storage:
    • 出站(优先)Deny,Any,目的 Service Tag: Internet
    • 出站 Allow,Any,目的 Service Tag: Storage

最佳实践

  • 子网做“粗粒度”,NIC 做“细粒度”控制;统一命名与优先级规范,避免冲突。
  • 默认拒绝,按需放行;出站也建议最小化。
  • 多用 Service Tag 与 ASG,减少硬编码 IP;以 IaC(Bicep/ARM/Terraform)集中管理变更。
  • 变更前用有效规则与 IP 流验证工具先行验证,减少中断风险。

如需,我可以根据你的拓扑与端口清单,给出具体 NSG 规则和 Terraform/Bicep 模板示例。