本文介绍如何使用网络安全组(NSG)筛选流量来控制Azure虚拟网络中的网络流量。 它还涵盖应用程序安全组(ASG),用于对网络接口进行逻辑分组。
本文介绍的内容
网络安全组允许筛选Azure虚拟网络中资源的入站和出站流量。 应用程序安全组允许按角色对网络接口进行分组。 编写引用逻辑组而不是单个 IP 地址的 NSG 规则。
谁需要本文
如果你符合以下情况,请阅读本文:
- 部署连接到Azure虚拟网络的任何资源。
- 需要控制子网、虚拟机或Azure服务之间的流量。
- 想要简化虚拟机频繁扩缩容或 IP 地址频繁变化环境中的规则管理。
- 正在为新的Azure工作负荷生成安全基线。
直接转移焦点: 将本地防火墙和分段规则重新创建为子网之间的 NSG,镜像应用程序已使用的层到层流。
现代化重点:使用应用程序安全组按工作负载角色而非 IP 地址定义规则,并将子网 NSG 与中心防火墙及强制出站流量经过检查的用户定义路由结合使用。
跨云焦点:将 AWS 和 Google Cloud 中的安全组规则镜像到 Azure NSG 中,以便在工作负载在云之间移动时流量策略保持一致。
Azure服务和功能
下表介绍了用于Azure虚拟网络中的网络流量筛选的服务和功能。
| 服务或功能 | 它提供的内容 | 何时使用它 |
|---|---|---|
| 网络安全组 (NSG) | 应用于子网或网络接口的一组入站和出站安全规则。 规则按优先级进行评估:最低数字胜出。 | 控制子网或单个 VM 级别的流量。 适用于使用虚拟网络的每个工作负荷。 |
| 应用程序安全组 (ASG) | 网络接口的逻辑分组。 使用 ASG 作为 NSG 规则中的源或目标,而不是 IP 地址。 | 有多个 VM 具有相同角色(Web 服务器、应用服务器)及其 IP 地址随着缩放而更改。 所有分组 NIC 必须位于同一虚拟网络中。 |
| 服务标记 | 由 Microsoft 自动管理和更新的、用于 Azure 服务的已命名 IP 地址前缀组。 示例:AzureCloud、Storage、AzureLoadBalancer、Sql。 |
在 NSG 规则中引用Azure服务,而无需硬编码 IP 范围。 Microsoft自动更新基础 IP 范围。 无法创建自定义服务标记。 |
常见服务标记
下表列出了 NSG 规则中最常用的服务标记。
| 服务标记 | 说明 |
|---|---|
Internet |
虚拟网络外部的所有公共 IP 地址空间。 匹配源自公共互联网或发往公共互联网的任何流量。 |
VirtualNetwork |
您的虚拟网络地址空间、所有已连接的地址空间(对等互连的虚拟网络)、通过 VPN/ExpressRoute 连接的本地部署网络,以及任何服务终结点。 包括默认路由。 |
AzureLoadBalancer |
Azure基础结构负载均衡器。 转换为发起 Azure 运行状况探测的主机的虚拟 IP。 用于在入站规则中允许健康探测流量。 |
Storage |
Azure 存储服务 IP 地址空间。 支持区域变体,例如 Storage.chinanorth3。 用于允许或限制从 VNet 中Azure 存储的访问。 |
AzureCloud |
所有 Azure 数据中心公共 IP 地址。 支持区域变体,例如 AzureCloud.chinaeast2。 一般情况下,允许出站流量流向Azure服务非常有用。 |
Sql |
Azure SQL 数据库、Azure Database for MySQL、Azure Database for PostgreSQL、Azure Database for MariaDB和Azure Synapse AnalyticsIP 地址前缀。 支持区域变体。 |
| 扩充式安全规则 | 接受单个规则中的多个 IP 地址、IP 范围和端口的扩展 NSG 规则。 如果需要允许或拒绝许多 IP 或端口范围的流量,请减少规则计数。 支持每个规则的多个 IP 和端口范围,最多支持 10 个应用程序安全组,但每个规则只有一个服务标记。 |
如何选择
使用以下指南为方案选择正确的安全构造。
NSG 限制与配额
Azure对 NSG 资源强制实施以下默认限制。 若要提高大多数限制值,请通过 Azure 支持提交增加请求。
| Resource | 默认限制 | 最大限制 |
|---|---|---|
| 每个 NSG 的规则 | 2,000 | 2,000 |
| 每个订阅的 NSG | 5,000 | 5,000 |
| 每个子网的 NSG | 1 | 1 |
| 每个 NIC 的 NSG | 1 | 1 |
| 每个订阅的 ASG 数量 | 3,000 | 3,000 |
| 每个 ASG 的 NIC 数 | 因订阅而异 | 联系支持 |
| 每条规则中被引用为源或目标的 ASG | 10 | 10 |
注释
每个 NSG 的 2,000 条规则的限制包括自定义规则和默认规则。 如果接近此限制,请使用增强的安全规则将多个 IP 或端口范围合并为更少的规则。
NSG 与 ASG:何时使用
使用下表确定适合方案的安全构造。
| 情景 | Use | 为什么 |
|---|---|---|
| 控制子网中所有 VM 的流量 | 子网级别的 NSG | 一个 NSG 适用于子网中的每个资源。 统一策略最易于管理。 |
| 控制特定 VM 与其子网无关的流量 | NIC 级别的 NSG | 允许例外情况,而不影响其他虚拟机。 适用于跳板机或堡垒主机。 |
| 许多 VM 具有相同的角色和 IP 地址频繁更改 | ASG | 按角色(Web、应用、数据)将 VM 添加到组。 针对组名编写规则。 VM 缩放或获取新 IP 时不需要更新。 |
| 引用Azure服务(存储、SQL、密钥保管库)作为源或目标 | 带有服务标记的 NSG | 避免将 Microsoft 可能更新的 IP 范围硬编码。 服务标记自动保持最新状态。 |
下图显示了 ASG 如何让你按角色对 VM 进行分组,并在逻辑组而不是单个 IP 地址之间编写 NSG 规则。
安全状况清单
在部署到生产环境之前,根据此清单验证 NSG 配置。
| Requirement | Action | Reference |
|---|---|---|
| 默认拒绝状态 | 确认您使用的是默认 DenyAllInbound 规则(优先级 65500)。 不要创建绕过默认拒绝的广泛允许规则。 |
安全注意事项 |
| 管理端口上没有 Internet 访问 | 阻止来自 0.0.0.0/0 的 SSH(22)和 RDP(3389)入站流量。 使用 Azure Bastion 或 VPN 进行管理访问。 |
安全注意事项 |
| 与 Azure 防火墙 配合使用以进行深度检查 | NSG 仅在第 3/4 层进行筛选。 为应用程序层(第 7 层)筛选、TLS 检查和威胁情报添加Azure 防火墙。 | Azure 防火墙和网络分段 |
| 为诊断启用流日志 | 使用 VNet 流日志捕获流量数据,以便进行安全调查和符合性。 | 网络监视和诊断 |
规则评估顺序
NSG 规则使用优先匹配语义:
- Azure先按优先级顺序评估规则:最低数字(最高优先级)。
- Azure针对五元组评估每个规则:源、源端口、目标、目标端口和协议。
- 当流量与规则匹配时,处理将停止。 Azure不会评估进一步的规则。
- 如果没有自定义规则匹配,则默认规则适用。 不能删除默认规则,但可以通过创建自定义规则(优先级数字介于 100 到 4096 之间)来替代这些规则。
默认规则(共六条):
| 方向 | 规则名称 | Priority | Action |
|---|---|---|---|
| Inbound | AllowVNetInBound | 65000 | 允许 |
| Inbound | 允许Azure负载均衡器入站 | 65001 | 允许 |
| Inbound | DenyAllInbound | 65500 | Deny |
| 出境 | AllowVnetOutBound | 65000 | 允许 |
| 出境 | AllowInternetOutBound | 65001 | 允许 |
| 出境 | DenyAllOutBound | 65500 | Deny |
ASG 约束
使用应用程序安全组时,请注意以下约束:
- ASG 中的所有网络接口必须存在于分配给 ASG 的第一个网络接口所在的同一虚拟网络中。
- 如果在规则的源和目标中引用 ASG,则两个组中的网络接口必须位于同一虚拟网络中。
- 可以在规则的源或目标中最多引用 10 个 ASG。
子网级和网络接口级 NSG 共同作用
可以将 NSG 与该子网中的 VM 上的子网和网络接口相关联。 执行此操作后,Azure 会评估这两个 NSG,并且流量必须同时通过这两个 NSG。 最严格的组合获胜。
| 方向 | 首次评估 | 第二次评估 |
|---|---|---|
| Inbound | 子网 NSG | NIC NSG |
| 出境 | NIC NSG | 子网 NSG |
Tip
为了进行更简单的故障排除,请将 NSG 与子网或网络接口相关联,但不能同时关联两者。 如果需要这两者,请清楚地记录预期规则交互。
实际示例:带有跳转框的 Web 层
考虑具有子网级 NSG 的子网,该子网允许来自 Internet 的入站 HTTPS(端口 443),并拒绝其他所有内容。 该子网中的跳转盒 VM 具有网络接口级 NSG,该 NSG 还允许来自特定管理 IP 范围的入站 SSH(端口 22)。
-
Web 流量(端口 443): 子网 NSG 允许它。 Web VM 上的网络接口 NSG 没有 443 的拒绝规则(默认
AllowVNetInBound许可)。 流量流动。 - 通过 SSH 连接到跳转盒(来自管理 IP 的端口 22): 子网 NSG 拒绝来自 Internet 的端口 22 上的流量。 即使网络接口 NSG 允许来自管理范围的 SSH,子网 NSG 也会首先阻止它。 解决方法:在子网 NSG 中添加一条规则,允许来自管理 IP 范围的流量访问 22 端口,或者使用 Azure Bastion 完全绕过公共互联网路径。
此示例说明了为什么双 NSG 增加了复杂性。 两者必须独立允许流量。
下图显示了在同时关联子网 NSG 和 NIC NSG 时入站流量的评估路径。 流量必须同时通过这两个 NSG。 最严格的组合获胜。
Azure Virtual Network Manager交互
如果组织使用Azure Virtual Network Manager(AVNM)安全管理规则,Azure在 NSG 规则之前评估这些规则。 安全管理员规则可以允许(继续进行 NSG 评估)、始终允许(绕过 NSG)或拒绝(NSG 评估前阻止)。 有关集中式网络安全管理,请参阅Azure Virtual Network Manager和集中管理。
设计注意事项
直接迁移 NSG 和 ASG 的设计重点
- 将本地分段转换为子网级 NSG:仅允许应用程序已使用的层到层流(例如 Web 到应用和应用到数据库),并拒绝其他所有内容。
- 以当前的防火墙规则库为起点,在迁移完成后再逐步收紧,并使用 NSG 流日志确认实际需要哪些流量。
- 首先在子网级别应用 NSG,以便简单起见;仅当单个 VM 需要例外时,才添加 NIC 级规则。
- 使用服务标记(例如
VirtualNetwork和AzureLoadBalancer),而不是硬编码的 IP 地址,以便在迁移期间重新编址后规则仍然有效。
实现 NSG 和 ASG 设计重点的现代化
- 使用应用程序安全组按角色(Web、应用、数据)对网络接口进行分组,以便规则描述意向,并在实例缩放时自动进行调整。
- 将子网 NSG 与中心 Azure 防火墙结合使用:NSG 负责各层之间的微隔离,而防火墙则检查跨越信任边界的流量。
- 仅允许专用终结点子网访问 PaaS 服务,并使用用户定义的路由强制出站流量通过中心防火墙。
- 如果使用 Azure Virtual Network Manager 的安全管理员规则,请提前规划好其优先顺序(它们会先于 NSG 进行评估),以免平台级防护措施与工作负载 NSG 发生冲突。
跨云 NSG 和 ASG 设计要点
- 将 AWS 和 Google Cloud 中的安全组规则镜像到 Azure NSG 中,因此等效层在迁移后强制实施相同的策略。
- 仅允许跨云应用程序依赖项所需的特定端口和源,并通过检查的 IPsec 隧道路由该流量。
- 在云中标准化应用程序安全组名称,以便运营团队在故障排除时可以关联等效的工作负荷。
- 将 NSG 与安全的虚拟 WAN中心防火墙配对,因此跨云和分支流量均由 NSG 筛选,并由防火墙检查。
先决条件
在实施 NSG 和 ASG 之前,请确保已具备以下条件:
- 带有子网的虚拟网络: NSG 关联到虚拟网络内的子网或 NIC。 有关规划指南 ,请参阅虚拟网络和子网 。
- IP 寻址计划: NSG 规则引用 IP 地址和范围。 IP 计划可确保编写精确的规则。 有关指南,请参阅 IP 地址规划 。
- 所需流量流的列表: 在编写规则之前记录哪些资源需要通信、哪些端口和方向。
安全注意事项
Important
默认拒绝才是正确的原则。 Azure 中的默认入站规则会拒绝所有未被明确允许的互联网流量。 不要通过创建广泛的允许规则来削弱这种态势。
绝不允许将管理端口开放给 0.0.0.0/0
注意
切勿创建允许来自 0.0.0.0/0(互联网上的任何源)的入站流量访问管理端口(例如 SSH(端口 22)或 RDP(端口 3389))的 NSG 规则。 攻击者持续扫描 Internet 以获取打开的管理端口。 请改用 Azure Bastion、VPN 或 Azure 专用链接 安全地访问虚拟机。
将 NSG 与 Azure 防火墙 结合使用
NSG 在第 3 层和第 4 层(网络和传输)上运行。 它们根据 IP 地址、端口和协议进行筛选,但不检查数据包内容。 对于需要应用程序层筛选、威胁智能或 TLS 检查的工作负载,请与 NSG 一起部署Azure 防火墙。 请参阅Azure 防火墙和网络分段。
使用 VNet 流日志实现流量可视性
注释
NSG 流日志计划于 2027 年 9 月 30 日停用。 2025 年 6 月 30 日之后,无法创建新的 NSG 流日志。 迁移到 VNet 流日志,这些日志在虚拟网络级别提供相同的功能以及流量分析。
VNet 流日志捕获虚拟网络中所有工作负荷的每流状态和吞吐量数据。 将它们用于:
- 安全调查:识别意外的流量模式。
- 合规性审核:证明流量流与记录的策略匹配。
- 容量规划:了解子网之间的带宽消耗。
有关监视和诊断配置,请参阅 网络监视和诊断。
要避免的常见错误
| 错误 | 为什么这是个问题 | 更好的方法 |
|---|---|---|
创建允许的所有入站规则(优先级 100、源 *、目标 *) |
绕过默认拒绝状态,并向 Internet 流量公开所有资源。 | 仅允许特定的源/目标/端口组合。 对于允许规则,请使用尽可能高的优先级编号。 |
| 忘记了“默认拒绝”这一机制的存在 | 团队会为已知流量创建允许规则,但不会测试是否已拦截其他所有流量。 意外打开的端口可能会被忽视。 | 部署 NSG 后,使用仅预期流量流的 VNet 流日志或 NSG 诊断进行验证。 明确测试被拒绝的路径。 |
| 未对动态工作负载使用 ASG(自动扩缩组) | 当 VM 横向扩展或获取新 IP 时,基于 IP 的规则会中断。 团队最终不得不不断更新规则。 | 使用 ASG 按角色对 VM 进行分组。 引用 ASG 的规则在虚拟机加入或移出该组时仍然有效。 |
| 忽略流日志,直到发生安全事件 | 如果没有启用流日志,则没有用于调查或合规性审核的历史流量数据。 | 从第一天启用 VNet 流日志。 配置流量分析,以便对异常情况进行可视化和警报。 |
| 在没有文档的情况下应用子网和 NIC NSG | 两个 NSG 会产生令人困惑的相互作用,导致流量意外地被拒绝。 故障排除变得耗时。 | 选择子网级别或 NIC 级 NSG 作为标准。 如果需要这两者,请记录每个子网的预期交互。 |
相关文章
- 虚拟网络和子网:应用 NSG 的位置
- Azure 防火墙 和网络分段:作为 NSG 的补充的第 7 层检查
- 网络监视和诊断:VNet 流日志和 NSG 诊断
- Azure Virtual Network Manager和集中式管理:安全管理规则和集中式 NSG 管理
Learn more
后续步骤
Tip
自行探索? 返回到 概述导航器 ,按功能查找下一篇文章。
接下来是直接迁移过程中的下一步:
设计中心辐射拓扑:在已迁移的各工作负载之间集中部署 DNS、防火墙和 VPN 网关等共享服务。
现代化之旅的下一步:
设计中心辐射拓扑:为您的 PaaS 工作负载设置双中心拓扑,其中中心由 IT 团队负责,分支由应用团队负责。
跨云之旅的下一步:
设置通往其他云的加密隧道:为跨云传输配置 VPN 网关 与 Amazon Web Services(AWS)虚拟专用网关和 Google Cloud VPN 之间的连接。