网络安全组和应用程序安全组
使用 NSG 规则筛选入站和出站流量,并使用应用程序安全组对 VM 进行逻辑分组,从而简化规则管理。
网络安全组和应用程序安全组 是 CoddyKit 上的免费 Azure Fundamentals 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Azure Fundamentals 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Azure Fundamentals 课程共包含 4 节课。
什么是 Network Security Group?
Network Security Group(NSG)充当 Azure 资源的虚拟防火墙。它包含一组安全规则,可根据源 IP、目标 IP、端口号和协议允许或拒绝入站和出站网络流量。NSG 可以与子网关联(影响子网中的所有资源),也可以与单个网络接口关联(影响单个 VM)。如果子网 NSG 和 NIC NSG 同时存在,Azure 会同时评估两者:对于入站流量,先应用子网 NSG;对于出站流量,先应用 NIC NSG。
# Create an NSG
az network nsg create \
--resource-group myRG \
--name myNSGNSG 规则结构
每条 NSG 规则都具有以下属性:优先级——100 到 4096 之间的数字,数字越小越先评估;源/目标——IP 地址、CIDR 范围、服务标记或应用程序安全组;源/目标端口——特定端口号或端口范围(例如 80、443、3389 或 1024-65535);协议——TCP、UDP、ICMP 或 Any;操作——Allow 或 Deny。规则按优先级顺序评估,第一条匹配的规则生效。如果没有规则匹配,则应用默认规则:拒绝所有入站流量,并允许所有出站流量。
# Allow HTTPS inbound from the internet
az network nsg rule create \
--resource-group myRG \
--nsg-name myNSG \
--name AllowHTTPS \
--priority 110 \
--direction Inbound \
--source-address-prefixes Internet \
--destination-port-ranges 443 \
--protocol Tcp \
--access Allow默认 NSG 规则
每个 NSG 都包含三条默认入站规则和三条默认出站规则,优先级为 65000-65500,且无法删除。默认入站规则包括:AllowVnetInBound(允许来自 VNet 的流量)、AllowAzureLoadBalancerInBound(允许 Azure 运行状况探测)、DenyAllInBound(拒绝其他所有流量)。默认出站规则包括:AllowVnetOutBound、AllowInternetOutBound、DenyAllOutBound。您可以添加优先级数字更低(100-64999)的规则来覆盖默认规则,因为这些规则会在默认规则之前生效。
NSG 中的服务标记
服务标记是 Azure 服务 IP 地址范围的预定义组,可让您编写简洁的 NSG 规则,而不必指定会随时间变化的长串 IP 地址列表。常见的服务标记包括:Internet——VNet 外部的所有 IP 地址;VirtualNetwork——VNet 内的所有 IP;AzureLoadBalancer——Azure 基础设施负载均衡器的 IP;Storage——所选区域中 Azure Storage 服务的 IP;AzureActiveDirectory——Entra ID 终结点。Microsoft 会自动维护这些标记,因此即使服务 IP 发生变化,您的 NSG 规则仍能保持准确。
# Allow outbound to Azure Storage using a service tag
az network nsg rule create \
--resource-group myRG \
--nsg-name myNSG \
--name AllowStorageOutbound \
--priority 120 \
--direction Outbound \
--destination-address-prefixes Storage \
--destination-port-ranges 443 \
--protocol Tcp \
--access Allow将 NSG 与子网关联
将 NSG 与子网关联后,其规则会应用于该子网中的所有资源,因此这是大规模实施网络策略最高效的方式。例如,将名为 'DenyRDP' 的 NSG 与数据层子网关联,可以阻止该子网中的任何 VM 从外部通过 RDP(端口 3389)访问,无论 NIC 级 NSG 允许什么。这个子网级 NSG 会在流量到达各个 VM 之前充当第一道防线,从而减少网络边界处的攻击面。
# Associate NSG with a subnet
az network vnet subnet update \
--resource-group myRG \
--vnet-name myVNet \
--name web-tier \
--network-security-group myNSG什么是 Application Security Group?
Application Security Group(ASG)允许您根据应用程序角色而不是 IP 地址对 Azure VM 网络接口进行分组。例如,您可以创建名为 webServers、appServers 和 dbServers 的 ASG,然后将每个 VM 的 NIC 分配给相应的 ASG。在 NSG 规则中,您可以编写:“允许来自 webServers 的流量通过端口 8080 访问 appServers”,而无需指定任何 IP 地址。添加或删除 VM 时,只需更新其 ASG 成员关系,所有 NSG 规则就会自动正确应用,无需修改规则。
# Create an Application Security Group
az network asg create \
--resource-group myRG \
--name webServers
# Associate a VM's NIC with the ASG
az network nic ip-config update \
--resource-group myRG \
--nic-name myWebVMNic \
--name ipconfig1 \
--application-security-groups webServers使用 ASG 的 NSG 规则
定义 ASG 并分配 VM 后,您可以编写将 ASG 作为源或目标的 NSG 规则。与基于 IP 的规则相比,这种方式更易于维护,因为它具有以下优点:无需管理 IP——您不需要知道 VM 的 IP,ASG 成员关系会负责完成映射;动态扩展——将新 VM 添加到正确的 ASG 后,它会自动继承正确的规则;语义清晰——规则读起来很自然(“webServers → appServers,端口 8080”),而不是难以理解的 IP 范围。ASG 对于经常添加或替换 VM 的动态环境尤其有价值。
# NSG rule using ASG as source and destination
az network nsg rule create \
--resource-group myRG \
--nsg-name myNSG \
--name WebToApp \
--priority 200 \
--direction Inbound \
--source-asgs webServers \
--destination-asgs appServers \
--destination-port-ranges 8080 \
--protocol Tcp \
--access Allow用于故障排查的 NSG 流日志
NSG 流日志记录通过 NSG 的所有 IP 流量信息,包括源和目标 IP、端口、协议、流量是被允许还是被拒绝,以及传输的字节数。流日志以 JSON 格式写入 Azure Storage 帐户,并可在Azure Network Watcher 的流量分析工具中可视化。流日志对于排查连接问题(“为什么这部分流量被阻止?”)、开展安全调查,以及满足需要提供流量模式证据的合规报告要求,都非常有价值。
应避免的常见 NSG 错误
以下三种常见 NSG 错误会导致连接问题:忘记评估顺序——如果存在优先级为 100 的 Deny 规则,而您的 Allow 规则优先级为 200,流量就会被拒绝,因为优先级数字越小越先生效;阻止 Azure 运行状况探测——负载均衡器运行状况探测来自 IP 168.63.129.16,阻止此源会导致负载均衡器后端显示为不正常并停止接收流量;子网 NSG 与 NIC NSG 规则重叠——流量必须通过两次 NSG 评估,即使子网 NSG 中的规则允许流量,如果 NIC NSG 拒绝该流量,它仍会被阻止。
NSG 与 Azure 防火墙的比较
NSG 和 Azure 防火墙相互补充,但有所不同:NSG——分散式,附加到子网和 NIC,执行第 3/4 层(IP 和端口)筛选,默认不记录流量,并且每个 VNet 都可免费使用;Azure 防火墙——集中式托管服务,部署在中心 VNet 中,支持第 3/4 层以及第 7 层(FQDN、URL、IDPS),通过 Azure Monitor 提供完整日志记录,费用约为每月 1,000 美元以上。请使用 NSG 实现基本的边界防护和层级隔离。当您需要通过 FQDN 筛选、威胁情报或 TLS 检查,对出站互联网访问进行集中且可审计的强制控制时,请使用 Azure 防火墙。
有效安全规则
当 NSG 同时与子网和 NIC 关联时,您可能难以确定实际应用了哪些规则。Azure 在门户中为任何 VM 的 NIC 提供有效安全规则视图,显示来自子网级和 NIC 级 NSG 的所有规则合并后的结果。这是该 VM 实际允许或拒绝的内容的权威列表。Azure Network Watcher 的IP 流验证工具可以进一步帮助您排查问题:指定源和目标 IP/端口后,该工具会立即告诉您流量会被允许还是拒绝,以及负责此结果的具体规则。
快速检查
请测试您对本课中 Microsoft Azure 基础知识(AZ-900)概念的理解。
课程回顾
本课介绍了以下内容:NSG 包含按优先级顺序评估的 Allow/Deny 规则,可筛选子网或单个网络接口的流量;服务标记通过表示动态的 Azure 服务 IP 范围组来简化规则;以及Application Security Group 支持按角色对 VM 进行分组,从而创建无需维护且可随环境扩展的 NSG 规则。接下来,我们将学习 VNet 对等互连和服务终结点,以连接不同 VNet 中的资源以及 Azure 服务。
常见问题解答
「网络安全组和应用程序安全组」课时是免费的吗?
是的 — 「网络安全组和应用程序安全组」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Azure Fundamentals 课程的其余内容,请升级到 CoddyKit PRO。 Azure Fundamentals 课程共包含 4 节课。
「网络安全组和应用程序安全组」这节课中我会学到什么?
使用 NSG 规则筛选入站和出站流量,并使用应用程序安全组对 VM 进行逻辑分组,从而简化规则管理。 你通过在浏览器中直接运行的动手代码来练习 Azure Fundamentals,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Azure Fundamentals 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Azure Fundamentals 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「网络安全组和应用程序安全组」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Azure Fundamentals 课中编写并运行代码吗?
能。每节 Azure Fundamentals 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 虚拟网络和子网
- 网络安全组和应用程序安全组
- VNet 对等互连和服务终结点
- Azure DNS 和负载均衡器基础