使用 Azure PaaS 服务将零信任原则应用于辐射虚拟网络

本文可帮助你通过以下方式使用 Azure 虚拟网络 (VNet) 和专用终结点将零信任原则安全模型应用于 PaaS 工作负载:

零信任原则 定义 满足者
显式验证 始终根据所有可用的数据点进行身份验证和授权。 在 Azure 防火墙和 Azure 应用程序网关中使用威胁检测来验证流量,并验证流量是否可接受。
使用最低权限访问 使用实时和恰好足够的访问权限 (JIT/JEA)、基于风险的自适应策略和数据保护,来限制用户访问。 减少 Azure 服务和专用网络之间的入口和出口流量。 使用网络安全组仅允许来自 VNet 的特定入口流量。 使用中央 Azure 防火墙实例授予对 Azure 服务的非 VNet 流量访问权限。
假定数据泄露 最大限度地减少影响范围,并对访问进行分段。 验证端对端加密并使用分析来获取可见性、驱动威胁检测并改善防御。 限制资源之间不必要的通信。 确保正在从网络安全组进行日志记录,并正确了解异常流量。 跟踪对网络安全组的更改。

有关如何在 Azure IaaS 环境中应用零信任原则的详细信息,请参阅将零信任原则应用于 Azure IaaS 概述

适用于 Azure PaaS 服务的零信任独立或分支网络

许多 PaaS 服务都包含自己的服务原生入口和出口控制功能。 可以使用这些控制确保 PaaS 服务资源的网络访问安全,而无需使用 VNet 等基础结构。 例如:

  • Azure SQL 数据库具有自己的防火墙,可用于允许需要访问数据库服务器的特定客户端 IP 地址。
  • Azure 存储帐户具有一个配置选项,用于支持来自特定 VNet 的连接或阻止公用网络访问。
  • Azure 应用服务支持访问限制,以定义按优先级排序的允许/拒绝列表,用于控制对应用程序的网络访问。

但是,对于零信任指导的实施,这些服务原生访问控制通常不够充分。 这会造成访问控制和日志记录分散,从而导致管理范围增加并且可见性降低。

此外,PaaS 服务还可以使用解析为动态分配的公共 IP 地址的完全限定的域名 (FQDN),该地址是从特定区域的公共 IP 地址池中针对某种服务分配的。 因此,无法通过使用其公共 IP 地址(可能会更改)允许传入或传出特定 PaaS 服务的流量。

Microsoft 建议使用专用终结点。 专用终结点是使用 VNet 中的专用 IP 地址的 VNet 接口。 此网络接口以私密且安全的方式将你连接到由 Azure 专用链接提供支持的服务。 可启用专用终结点将服务引入 VNet 中。

根据解决方案应用场景,可能仍需要对 PaaS 服务进行公共入站访问。 但是,除非你这样做,否则 Microsoft 建议所有流量保持专用,以消除潜在的安全风险。

本指南包含有关特定参考体系结构的说明,但这些原则和方法可根据需要应用于其他体系结构。

参考体系结构

下图显示了基于 PaaS 的工作负载的常见参考体系结构。

基于 PaaS 的工作负荷的参考体系结构示意图。

在图中:

  • 分支 VNet 包含诸多组件,用于支持 PaaS 应用程序。
  • PaaS 应用程序是一个两层应用程序,将 Azure 应用程序服务用于 Web 应用/前端,并将 Azure SQL 数据库用于关系数据库。
  • 每层都包含在具有专用网络安全组的出口的专用子网中。
  • Web 层包含用于出口的专用子网。
  • 将通过子网中包含的应用程序网关提供对应用程序的访问权限。

下图显示了 Azure 订阅中这些组件的逻辑体系结构。

Azure 订阅中的组件关系图。

在关系图中,分支 VNet 的所有组件都包含在专用资源组中:

  • 一个 VNet
  • 一个Azure 应用程序网关 (App GW),包括 Web 应用程序防火墙 (WAF)
  • 用于数据库、应用程序和前端层的三个网络安全组(在关系图中命名为 "NSG")
  • 两个应用程序安全组(在关系图中命名为 "ASG")
  • 两个专用终结点

此外,中心 VNet 的资源均部署在相应的连接订阅中。

本文内容

零信任原则将应用于整个体系结构,从租户和目录级别一直到将虚拟机分配到应用程序安全组。 下表介绍了用于确保此体系结构安全的建议。

步长 任务
1 利用 Microsoft Entra RBAC 或为网络资源设置自定义角色。
2 将基础结构隔离到其自己的资源组中。
3 为每个子网创建网络安全组。
4 保护 VNet 中的流量和资源:
  • 为网络安全组部署基线拒绝规则。
  • 规划 VNet 中的管理流量。
  • 部署网络安全组流日志记录。
5 确保 Azure PaaS 服务的入口和出口安全。
6 确保 VNet 和应用程序访问安全。
7 启用高级威胁检测、警报和保护。

本指南假定已将 Azure 应用程序服务和 Azure SQL 数据库部署在其自己的资源组中。

步骤 1:使用 Microsoft Entra RBAC 或为网络资源设置自定义角色

可以将 Microsoft Entra RBAC 内置角色用于网络参与者。 而另一种方法是使用自定义角色。 分支 VNet 网络管理器不需要完全访问 Microsoft Entra RBAC 网络参与者角色授予的网络资源,但需要比其他常见角色更多的权限。 自定义角色可用于限定对所需内容的访问权限。

要实现此目的,一种简单的方法是部署在 Azure 登陆区域参考体系结构中找到的自定义角色。

可以使用的特定角色为网络管理自定义角色,该角色具有以下权限:

  • 读取范围中的所有内容
  • 使用网络提供程序执行任何操作
  • 使用支持提供程序执行任何操作
  • 使用资源提供程序执行任何操作

要创建此角色,可以使用 Azure 登陆区域参考体系结构 GitHub 存储库中的脚本,也可以通过 Microsoft Entra ID 使用 Azure 自定义角色进行创建。

步骤 2:将基础结构隔离到其自己的资源组中

通过将网络资源与计算、数据或存储资源隔离,可以降低权限溢出的可能性。 此外,通过确保所有相关资源位于一个资源组中,还可以进行安全分配,并优化对这些资源的日志记录和监视的管理。

创建专用资源组,而不是在共享资源组的多个上下文中提供分支网络资源。 下面的体系结构图显示了此配置。

将基础结构隔离到其自己的资源组的关系图。

在该关系图中,参考体系结构中的资源和组件划分到应用程序服务、Azure SQL 数据库、存储帐户、中心 VNet 资源和分支 VNet 资源的专用资源组中。

对于专用资源组,可以根据使用 Azure 门户授予用户对 Azure 资源的访问权限教程分配自定义角色。

更多建议:

  • 引用角色的安全组,而不是已授权个人。
  • 通过企业身份管理实践管理对安全组的访问权限。

如果当前未使用在资源组上强制实施日志转发的策略,则在资源组的活动日志中对此进行配置:

  1. 在 Azure 门户中查找资源组。
  2. 导航到活动日志 -> 导出活动日志,然后选择 + 添加诊断设置
  3. 诊断设置屏幕中,选择所有日志类别(尤其是安全性),并将其发送到相应的日志记录源(例如 Log Analytics 工作区)进行观测,或发送到存储帐户进行长期存储。 下面是一个示例:

诊断设置的示例。

要了解如何查看这些日志并对其发出警报,请参阅诊断设置

订阅大众化

虽然不与网络直接相关,但应该以类似的方式规划订阅 RBAC。 除了按资源组以逻辑方式隔离资源外,还应根据业务领域和项目组合所有者隔离订阅。 应缩小管理单元订阅的范围。

有关详细信息,请参阅 Azure 登陆区域设计原则

步骤 3:为每个子网创建网络安全组

Azure 网络安全组用于过滤 Azure VNet 中Azure 资源之间的网络流量。 建议将网络安全组应用于每个子网。 部署 Azure 登陆区域时,默认通过 Azure Policy 强制实施此操作。 网络安全组包含安全规则,这些规则可允许或拒绝多种 Azure 资源的入站和出站网络流量。 对于每个规则,可以指定源和目标 IP 地址、协议(如 TCP 或 UDP)和端口。

对于多层应用程序,建议为托管网络组件的每个子网创建专用网络安全组(下图中的 "NSG")。

每个子网的专用网络安全组关系图。

在图中:

  • 应用程序的每层都具有专用入口子网,例如 Web 层对应一个,数据层对应另一个。
  • Azure 应用程序服务具有特定应用程序服务的专用出口子网。
  • 可为上述每个子网配置网络安全组。

如果以与图中所示不同的方式配置网络安全组,这可能会导致部分或全部网络安全组的配置错误,并可能导致故障排除时出现问题。 还会让监视和日志记录变得困难。

要管理网络安全组的设置,请参阅创建、更改或删除 Azure 网络安全组

阅读有关网络安全组的详细信息,了解如何使用网络安全组确保环境安全。

步骤 4:确保 VNet 中的流量和资源安全

本节介绍以下建议:

  • 为网络安全组部署基线拒绝规则
  • 部署特定于应用程序的规则
  • 规划 VNet 中的管理流量
  • 部署网络安全组流日志记录

为网络安全组部署基线拒绝规则

零信任的关键元素是使用所需的最低访问级别。 默认情况下,网络安全组具有允许规则。 通过添加拒绝规则基线,可强制实施最低访问级别。 在进行预配后,在每个入站和出站规则中创建全部拒绝规则,优先级为 4096。 这是最后一个可用的自定义优先级,这意味着仍可以将剩余范围用于配置允许操作。

为此,在网络安全组中,转至出站安全规则,然后选择添加。 填写以下信息:

  • 来源:任何
  • 源端口范围:*
  • 目的地:任何
  • 服务:自定义
  • 目标端口范围:*
  • 协议:任何
  • 操作:Deny
  • 优先级:4096
  • 名称:DenyAllOutbound
  • 说明:除非明确允许,否则拒绝所有出站流量。

下面是一个示例。

出站安全规则的示例。

对入站规则重复此过程,根据需要调整名称和说明。

入站安全规则选项卡中,规则上会显示警告标志。 下面是一个示例。

入站安全规则的示例。

单击规则并滚动到底部可查看更多详细信息。 下面是一个示例:

规则详细信息的示例。

此消息包含以下两个警告:

  • Azure 负载均衡器默认无法使用此网络安全组访问资源。
  • 此 VNet 上的其他资源默认无法使用此网络安全组访问资源。

对于我们要在零信任中实现的目的,应该就是这个样子。 这意味着,仅仅因为此 VNet 上存在某些内容,并不意味着它将立即访问资源。 对于每个流量模式,创建一个显式允许该模式的规则,并且应该使用最少权限执行此操作。

如果具有特定的管理出站连接,例如 Active Directory 域服务 (AD DS) 域控制器、专用 DNS 虚拟机或特定外部网站,则需要在此对其进行控制。

替代拒绝规则

注意

本节中的建议仅适用于 Web 出口子网。

如果正在使用 Azure 防火墙管理出站连接,则无需执行 deny-outbound-all,可以为出站联接创建替代规则。 作为 Azure 防火墙实施的一部分,需要设置一个路由表,用于将默认路由 (0.0.0.0/0) 流量发送到防火墙。 这将处理 VNet 外部的流量。

然后,可以创建拒绝全部 VNet 出站规则,或者允许全部出站规则,但要使用其入站规则确保项安全。

请参阅 Azure 防火墙路由表,了解如何使用它们进一步提高环境安全性。

部署特定于应用程序的规则

使用最少权限定义流量模式,并且仅遵循显式允许的路径。 使用子网作为源,在网络安全组中定义网络模式。 下面是一个示例。

网络安全组中的网络模式关系图。

按照管理网络安全组:创建安全规则过程将规则添加到网络安全组。

要确保此应用场景安全,请添加以下规则:

子网的网络安全组 方向 Source 源详细信息 Source Port 目标 目标详细信息 服务 网络安全组名称 网络安全组说明
应用程序服务子网 入站 IP 地址 应用程序网关子网的专用 IP 地址范围 443 IP 地址 应用程序服务的专用终结点的显式 IP 地址 MS SQL AllowGWtoAppInbound 允许从应用程序网关对应用程序服务进行入站访问。
应用程序服务集成子网 Outbound IP 地址 应用程序服务集成子网的 IP 地址范围 1433 IP 地址 SQL 数据库的专用终结点的显式 IP 地址 MS SQL AllowApptoSQLDBOutbound 允许从应用程序服务集成子网对 SQL 专用终结点进行出站访问。
Azure SQL 子网 入站 IP 地址 应用程序服务集成子网的 IP 地址范围 1433 IP 地址 SQL 数据库的专用终结点的显式 IP 地址 MS SQL AllowApptoSQLDBInbound 允许从应用程序服务集成子网对 SQL 专用终结点进行入站访问。

注意

有时,源流量可能来自不同的端口,如果出现此模式,可以将源端口范围添加到 "*" 以允许任何源端口。 目标端口更为重要,有时建议始终对源端口使用 "*"。

注意

对于优先级,使用介于 100 和 4000 之间的值。 一开始可以使用 105。

这是应用程序网关子网上除了网络安全组规则之外的规则。

通过上述规则,你为单一应用层定义了零信任连接模式。 可以根据需要对其他流重复此过程。

规划 VNet 中的管理流量

除了特定于应用程序的流量,还要规划管理流量。 但是,由于管理流量通常源自分支 VNet 外部,因此需要更多规则。 首先,了解管理流量来自的特定端口和源。 通常,所有管理流量都应来自分支中心网络中的防火墙或其他网络虚拟设备 (NVA)。

有关完整的参考体系结构,请参阅将零信任原则应用于 Azure IaaS 概述

配置取决于特定的管理需求。 但是,应当使用防火墙设备和网络安全组上的规则显式允许在平台网络端和工作负载网络端上建立连接。

规划部署

由于应用程序服务和数据库现正在使用专用网络,因此请规划如何将代码和数据部署到这些资源。 添加规则以允许专用构建服务器访问这些终结点。

部署网络安全组流日志记录

即使网络安全组阻止了不必要的流量,也并不意味着已达到目标。 要检测到攻击,仍需要观测在显式模式之外发生的流量。

不会记录到专用终结点的流量,但如果以后将其他服务部署到子网,则此日志将有助于检测到活动。

要启用网络安全组流日志记录,遵循适用于专用终结点的现有网络安全组的教程:记录传入和传出虚拟机的网络流量

注意

牢记以下建议:

  • 应根据需要限制对日志的访问。

  • 日志应根据需要流入 Log Analytics 和 Microsoft Sentinel。

步骤 5:确保 Azure PaaS 服务的入口和出口安全:

本节包含确保 PaaS 服务的入口和出口安全所需的两个步骤:

  • 将入口的专用终结点部署到服务。
  • 部署 VNet 集成以允许应用程序服务能够与 VNet 进行通信。

此外,还应考虑 DNS 配置以允许解析名称。

部署入口的专用终结点

虽然许多服务允许从 Azure 门户的资源特定边栏选项卡创建专用终结点,但通过专用终结点自己的资源创建来创建专用终结点可实现更一致的体验。 为此,应已部署资源。 在进行部署后,可创建专用终结点

部署专用终结点时,其配置如下:

  • 将这些终结点放置在包含父资源的特定资源组中,以将生命周期相似的资源放在一起,从而实现集中访问。
  • 根据角色将它们置于 VNet 的相应子网中。
  • 对于 Azure 应用程序服务,可以为其常规前端和 SCM 终结点(用于部署和管理)配置专用终结点。

此外,在此部署过程中,还应确保将特定于服务的防火墙设置为拒绝入站流量。 这将拒绝公共入口处的任何尝试。

对于 Azure SQL 数据库,管理其服务器级别的 IP 防火墙规则。 确保在 Azure 门户中的网络面板中将公共网络访问权限设置为禁用

对于 Azure 应用程序服务,添加专用终结点时会将其服务级别防火墙设置为默认阻止入站访问。 有关详细信息,请参阅对应用服务应用使用专用终结点

部署用于出口的 VNet 集成

除了用于入口的专用终结点外,还启用 VNet 集成。 每个应用服务计划都可以启用 VNet 集成,此举会为应用服务分配整个子网。 有关详细信息,请参阅将应用与 Azure VNet 集成

要配置应用服务,请参阅在 Azure 应用服务 中启用 VNet 集成。 确保将其置于为出口指定的子网中。

DNS 注意事项

在使用专用终结点时,支持将资源的 FQDN 的 DNS 解析为其新的专用 IP 地址。 有关以多种方式实现此目的的说明,请参阅专用终结点 DNS 配置

注意

DNS 解析需要应用于所有流量。 同一 VNet 中的资源将无法解析,除非这些资源使用的 DNS 区域正确。

步骤 6:确保对 VNet 和应用程序的访问安全

确保对 VNet 和应用程序的访问安全包括:

  • 确保 Azure 环境中流向应用程序的流量安全
  • 将多重身份验证 (MFA) 和条件访问策略用于用户对应用程序的访问。

下图说明了此参考体系结构中的两种访问模式。

参考体系结构中访问模式的关系图。

确保 Azure 环境中针对 VNet 和应用程序的流量安全

Azure 环境中安全流量的大部分工作已完成。 要配置存储资源与虚拟机之间的安全连接,请参阅将零信任原则应用于 Azure 存储

要确保从中心资源到 VNet 的访问安全,请参阅将零信任原则应用于 Azure 中的中心 VNet

将 (MFA 和条件访问策略用于用户对应用程序的访问

将零信任原则应用于虚拟机一文提出了如何使用 MFA 和条件访问保护直接发送到虚拟机的访问请求。 这些请求很可能来自管理员和开发人员。 下一步是 MFA 多重身份验证和条件访问确保对应用程序的访问安全。 这适用于访问应用程序的所有用户。

首先,如果应用程序尚未与 Microsoft Entra ID 相集成,请参阅 Microsoft 标识平台的应用程序类型

接下来,将应用程序添加到标识和设备访问策略的范围。

使用条件访问和相关策略配置 MFA 时,使用为零信任设置的建议策略作为指南。 这包括无需管理设备的起点策略。 理想情况下,用于访问虚拟机的设备为托管设备,可以实施企业级别,对于零信任建议这样做。 有关详细信息,请参阅常见零信任标识和设备访问策略

下图显示了建议的零信任策略。

零信任的建议标识和设备访问策略关系图。

步骤 7:启用高级威胁检测和保护

基于 Azure 构建的分支 VNet 可能已受到 Microsoft Defender for Cloud 的保护,因为来自在 Azure 上或本地运行的 IT 业务环境的其他资源也可能受到保护。

如本系列的其他文章所述,Defender for Cloud 是一个云安全态势管理 (CSPM) 和云工作负载保护 (CWP) 工具,用于提供安全性建议、警报和高级功能(如自适应网络强化),来帮助推进云安全历程。

本文章不详细介绍 Defender for Cloud,但务必了解 Defender for Cloud 基于 Log Analytics 工作区中引入的 Azure 策略和日志运行。 在具有分支 VNet 和相关资源的订阅上启用后,可以查看建议以改进其安全状况。 可通过 MITRE 策略、资源组等进一步筛选这些建议。 请考虑优先处理对组织安全功能分数影响更大的建议。 下面是一个示例。

Microsoft Defender for Cloud 建议的示例。

存在提供高级工作负载保护的诸多 Defender for Cloud 计划,其中包含自适应网络强化建议,用于改进现有网络安全组规则。 下面是一个示例。

网络强化建议的示例。

可通过选择强制来接受该建议,该建议会创建新的网络安全组规则或修改现有规则。

后续步骤

请参阅以下有关将零信任原则应用于 Azure 的其他文章:

参考