将零信任原则应用于 Azure 中的分支虚拟网络

摘要: 若要将零信任原则应用于 Azure 中的辐射虚拟网络,必须利用基于角色的访问控制 (RBAC)、隔离子网和虚拟机(资源组、网络安全组和应用程序安全组)、保护 VNet 和虚拟机应用程序中的流量和资源,以及启用高级威胁检测、警报和保护。

本文章可通过以下方式将零信任原则应用于 Azure 中 IaaS 工作负载的分支虚拟网络 (VNet):

零信任原则 定义 满足者
显式验证 始终根据所有可用的数据点进行身份验证和授权。 使用应用程序安全组验证各个 NIC 是否有权通过特定通道进行通信。
使用最低权限访问 使用实时和恰好足够的访问权限 (JIT/JEA)、基于风险的自适应策略和数据保护,来限制用户访问。 默认不要在任何通道上启用 3389/RDP 访问权限。 对分支上下文使用正确的角色权限。
假定数据泄露 最大限度地减少影响范围,并对访问进行分段。 验证端对端加密并使用分析来获取可见性、驱动威胁检测并改善防御。 限制资源之间不必要的通信。 确保能够登录到网络安全组,并能够正确查看异常流量。 跟踪对网络安全组的更改。

本文章是一系列文章中的一部分,该系列演示如何在相应的 Azure 环境中应用零信任原则,该环境包含托管基于虚拟机的工作负载的分支 VNet。 有关详细信息,请参阅将零信任原则应用于 Azure IaaS 概述

参考体系结构

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

在 Azure 分支 VNet 中虚拟机上运行的典型三层应用程序组件的参考体系结构的示意图。

在图中:

  • 分支 VNet 包含许多组件,用于支持由虚拟机组成的 IaaS 应用程序。
  • IaaS 应用程序是一个三层应用程序,每个层由两个虚拟机组成:前端、应用程序和数据。
  • 每个层都包含在具有专用网络安全组的专用子网中。
  • 每个虚拟机角色都分配给与其角色对应的应用程序安全组。
  • 将通过子网中包含的应用程序网关提供对应用程序的访问权限。

参考体系结构中显示的应用程序遵循 N 层体系结构样式

下图显示了 Azure 订阅中分支 VNet 的资源组组件,与中心 VNet 的订阅分开。

将零信任应用于 Azure 分支 VNet 的逻辑体系结构的示意图,其中显示了 Microsoft Entra ID 租户中的订阅、资源组和 Azure 组件。

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

  • 一个 VNet
  • 一个Azure 应用程序网关 (App GW),包括 Web 应用程序防火墙 (WAF)
  • 三个网络安全组,每个应用层对应一个
  • 三个应用程序安全组,每个应用层对应一个

本文内容

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

步长 任务 已应用零信任原则
1 使用 Microsoft Entra 基于角色的访问控制 (RBAC) 或为网络资源设置自定义角色。 使用最低权限访问
2 将基础结构隔离到其自己的资源组中。 假定数据泄露
3 为每个子网创建网络安全组。 使用最低权限访问
假定数据泄露
4 为每个虚拟机角色创建应用程序安全组。 显式验证
使用最低权限访问
假定数据泄露
5 保护 VNet 中的流量和资源:
  • 为网络安全组部署基线拒绝规则
  • 为应用程序安全组部署特定于应用程序的规则
  • 规划 VNet 中的管理流量
  • 部署网络安全组流日志记录
  • 使用 IDPS 保护入站 Web 流量
  • 显式验证
    使用最低权限访问
    假定数据泄露
    6 确保 VNet 和应用程序访问安全。 使用最低权限访问
    假定数据泄露
    7 启用高级威胁检测、警报和保护。 假定数据泄露

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

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

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

    具体角色为网络管理自定义角色,该角色具有以下权限:

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

    要创建此角色,可以使用自定义角色脚本或通过 Microsoft Entra ID 按照 Azure 自定义角色 - Azure RBAC 中所述的过程。

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

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

    如果不想在共享资源组的多个上下文中提供分支网络资源,则为其创建专用资源组。 本文章中支持的参考体系结构阐述了此概念。

    逻辑体系结构的示意图,其中显示了应用了零信任原则的分支 VNet 的专用资源组及其组件。

    在图中,参考体系结构中的资源和组件划分到虚拟机、存储帐户、中心 VNet 资源和分支 VNet 资源的专用资源组中。

    对于专用资源组,可以使用以下过程分配自定义角色:教程:使用 Azure 门户 - Azure RBAC 授予用户对 Azure 资源的访问权限

    更多建议:

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

    如果当前未使用在资源组上强制实施日志转发的策略,请在资源组的活动日志中配置此策略:导航到活动日志 > 导出活动日志,然后选择 + 添加诊断设置

    诊断设置屏幕中,选择所有日志类别(尤其是安全性),并将其发送到相应的日志记录源(例如 Log Analytics 工作区)进行观测,或发送到存储帐户进行长期存储。

    订阅大众化

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

    有关订阅普及的详细信息,请参阅 Azure 登陆区域设计原则 - 云采用框架

    可以在 Azure Monitor 中从诊断设置安全类别配置诊断,如下所示。

    Azure Monitor 中用于安全性诊断设置的屏幕截图。

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

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

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

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

    托管虚拟机角色的每个子网对应的专用网络安全组的参考体系结构示例的示意图。

    在图中:

    • 应用程序的每个层在专用子网中进行托管,例如前端层、应用层和数据层。
    • 可为上述每个子网配置网络安全组。

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

    按照此过程创建网络安全组:创建、更改或删除网络安全组

    要了解如何使用网络安全组保护环境安全,请参阅网络安全组

    步骤 4:为每个虚拟机角色创建应用程序安全组:

    使用应用程序安全组可将网络安全性配置为应用程序结构的固有扩展,从而可以基于这些组将虚拟机分组以及定义网络安全策略。 可以大量重复使用安全策略,而无需手动维护显式 IP 地址。 平台会处理显式 IP 地址和多个规则集存在的复杂性,让你专注于业务逻辑。

    在工作负载中,识别特定的虚拟机角色。 然后,为每个角色构建用程序安全组。 在参考体系结构中,表示了三个应用程序安全组。

    用于不同虚拟机角色的独立应用程序安全组的参考体系结构示例的示意图。

    在图中:

    • 总共创建三个应用程序安全组来支持此应用,每个层对应一个:前端、应用和数据。
    • 每个虚拟机都分配给其角色(关系图中的红色文本)对应的应用程序安全组。

    有关应用程序安全组以及如何将这些安全组分配给虚拟机的详细信息,请参阅 Azure 应用程序安全组概述

    注意

    如果正在使用负载均衡器,则需要在网络安全组中使用负载均衡器的 IP 地址,因为应用程序安全组无法限定负载均衡器的范围。

    步骤 5:保护 VNet 中的流量和资源

    本节涵盖以下建议:

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

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

    零信任的关键元素是使用所需的最低访问级别。 网络安全组规则默认允许这些规则。 通过添加拒绝规则基线,可强制实施最低访问级别。

    在进行预配后,在每个入站和出站规则中创建拒绝所有规则,优先级为 4096。 这是最后一个可用的自定义优先级,这意味着仍可以将剩余范围用于配置允许操作。

    在网络安全组中,导航到出站安全规则,然后选择添加。 填写以下信息:

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

    下面是一个示例。

    出站安全规则示例的屏幕截图。

    对入站规则重复此过程,根据需要调整名称和说明。 你会发现,在“入站安全规则”选项卡上,规则上有一个警告标志,如下所示

    入站安全规则示例的屏幕截图。

    如果单击规则并滚动到底部,则将看到更多详细信息,如下所示。

    规则详细信息示例的屏幕截图。

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

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

    对于我们要在零信任中实现的目的,应该就是这个样子。 这意味着,仅仅因为此 VNet 上存在某些内容,并不意味着它能够立即访问资源。 对于每个流量模式,需要创建一个显式允许该模式的规则,并且应该使用最少权限执行此操作。 因此,如果具有特定的管理出站连接,例如 Active Directory 域服务 (AD DS) 域控制器、专用 DNS 虚拟机或特定外部网站,则需要在此对其进行控制。

    替代拒绝规则

    如果正在使用 Azure 防火墙管理出站连接,则无需执行拒绝全部出站,可以将所有出站保持打开状态。 作为 Azure 防火墙实施的一部分,需要设置一个路由表,用于将默认路由 (0.0.0.0/0) 发送到防火墙,以处理 VNet 外部的流量。

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

    阅读关于 Azure 防火墙路由表的详细信息,了解如何使用它们进一步提高环境安全性。

    虚拟机管理规则

    要配置启用了 Microsoft Entra 登录、反恶意软件和自动更新的虚拟机,需要允许以下出站连接。 其中许多连接都通过 FQDN,这意味着 FQDN 规则需要 Azure 防火墙,否则需要制定更复杂的计划。 建议使用 Azure 防火墙。

    出站连接包括:

    • 在端口 443 上:
      • enterpriseregistration.windows.net
      • settings-win.data.microsoft.com
      • sls.update.microsoft.com*
      • v10.events.data.microsoft.com
      • login.microsoftonline.com
      • pas.windows.net
      • 169.254.169.254
    • 在端口 80 上:
    • 在端口 123 上:
      • time.windows.com
    • 在端口 1688 上:
      • Azkms.core.windows.net

    为应用程序安全组部署特定于应用程序的规则

    使用最少权限定义流量模式,并且仅遵循显式允许的路径。 下面是使用应用程序安全组在分支 VNet(与中心 VNet 一起使用)的网络安全组中定义网络流量模式的示例关系图。 这是建议使用的配置。

    在中心分支型配置中三层 Web 应用程序的推荐网络模式配置的示意图。

    例如,下面是独立分支 VNet 的配置,其中 Web 应用程序防火墙放置在分支 VNet 的应用程序网关子网中。

    在独立分支配置中三层 Web 应用程序的推荐网络模式配置的示意图。

    需要以下网络安全组规则:

    1. 允许互联网流量进入 APP GW 子网 (HTTPS 443)。
    2. 允许从 APP GW 子网到前端层虚拟机 (HTTPS 433) 的流量。
    3. 允许从前端层虚拟机到应用层负载均衡器 (HTTPS 443) 的流量。
    4. 允许从应用层负载均衡器到应用层虚拟机 (HTTPS 443) 的流量。
    5. 允许从应用层虚拟机到数据层负载均衡器 (SQL 1433) 的流量。
    6. 允许从数据层负载均衡器到数据层虚拟机 (SQL 1433) 的流量。
    7. 允许数据层虚拟机 (SQL 1433) 之间的流量

    首先配置 SQL 模式,然后对剩余层重复该过程。 下面几节是限制单一应用程序层的网络流量的规则配置。

    规则 5 - 允许从应用层虚拟机到数据层负载均衡器 (SQL 1433) 的流量

    在应用层子网的网络安全组中,导航到入站安全规则,然后选择添加。 使用以下内容填充列表:

    • 源:应用程序安全组
    • 源应用程序安全组:选择业务层应用程序安全组
    • 源端口范围:1433(有时源流量可能来自不同的端口,如果出现此模式,可以将源端口范围添加到 * 以允许任何源端口。目标端口更为重要,有时建议始终在源端口中使用 *)
    • 目标:IP 地址
    • 目标 IP 地址/CIDR 范围:负载均衡器的显式 IP
      • 需要在此使用显式 IP,因为无法将负载均衡器与应用程序安全组相关联。
      • 可以规划 IP 架构或部署负载均衡器,并引用向其分配的 IP。
    • 服务:MS SQL
    • 目标端口范围:对于端口 1433,系统会自动填充此项
    • 协议:对于 TCP,系统会自动选择此项
    • 操作:允许
    • 优先级:介于 100 和 4096 之间的值。 可以从 105 开始。
    • 名称:Allow-App-Tier-to-Data-LB-Inbound
    • 说明:允许从数据层负载均衡器到应用层虚拟机的入站访问。

    完成后,你会发现规则上的信息警报出现蓝色图标。 单击规则时,会显示以下消息:

    • “仅当应用程序安全组与同一虚拟网络上的网络接口关联时,使用应用程序安全组的规则才适用。”

    下面是一个示例。

    示例信息警报的屏幕截图。

    仅当在此网络中使用此应用程序安全组时,此规则才适用。

    最后,在同一网络安全组中,导航到出站安全规则,然后选择添加。 以与示例相似的方式填充列表,将 Inbound 更改为 Outbound

    规则 6 - 允许从数据层负载均衡器到数据层虚拟机 (SQL 1433) 的流量

    在数据层子网的网络安全组中,导航到入站安全规则,然后选择添加。 使用以下内容填充列表:

    • 源:IP 地址
    • 源 IP 地址:负载均衡器的 IP 地址
    • 源端口范围:1433
    • 目标:应用程序安全组
    • 目标应用程序安全组:选择数据层应用程序安全组
    • 服务:MS SQL
    • 目标端口范围:对于端口 1433,系统会自动填充此项。
    • 协议:对于 TCP,系统会自动选择此项。
    • 操作:允许
    • 优先级:介于 100 和 4096 之间的值。 可以从 105 开始。
    • 名称:Allow-SQL-LB-to-SQL-VMs-Inbound
    • 说明:允许从基于 SQL 的数据层虚拟机到数据层负载均衡器的入站访问。

    在同一网络安全组中,导航到出站安全规则,然后选择添加。 按照示例中的操作填充列表,将 Inbound 更改为 Outbound

    规则 7 - 允许数据层虚拟机 (SQL 1433) 之间的流量

    在数据层子网的网络安全组中,导航到入站安全规则,然后选择添加。 使用以下内容填充列表:

    • 源:应用程序安全组
    • 目标应用程序安全组:选择数据层应用程序安全组
    • 源端口范围:1433
    • 目标:应用程序安全组
    • 目标应用程序安全组:选择数据层应用程序安全组
    • 服务:MS SQL
    • 目标端口范围:对于端口 1433,系统会自动填充此项。
    • 协议:对于 TCP,系统会自动选择此项。
    • 操作:允许
    • 优先级:介于 100 和 4096 之间的值。 可以从 105 开始。
    • 名称:Allow-SQL-VM-to-SQL-VM-Inbound
    • 说明:允许在基于 SQL 的数据层虚拟机之间进行入站访问。

    在同一网络安全组中,导航到出站安全规则,然后选择添加。 按照之前的列表填充列表,将 Inbound 更改为 Outbound

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

    规划 VNet 中的管理流量

    除了应用程序特定流量,还需要规划管理流量。 但是,管理流量通常源自分支 VNet 外部。 需要其他角色。 首先,需要了解管理流量来自的特定端口和源。 通常,所有管理流量都应来自分支中心网络中的防火墙或其他 NVA。

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

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

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

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

    要启用网络安全组流日志记录,可以按照针对所创建的现有网络安全组的教程:记录传入和传出虚拟机的网络流量

    注意

    • 存储帐户应遵循零信任存储帐户指南。
    • 应根据需要限制对日志的访问。
    • 它们还应根据需要流入日志分析和 Sentinel。

    使用 IDPS 保护入站 Web 流量

    除了使用分支虚拟网络中的控件之外,还可以使用 Azure 防火墙来应用其他检查。 虽然 Azure Front Door 和应用程序网关的 Web 应用程序防火墙功能会检查常见 Web 攻击的流量,但使用 Azure 防火墙可以进行更深入的检查。

    若要使用可用的每个信号并保持对网络流量的集中可见性,建议将流量从应用程序网关路由到 Azure 防火墙。 然后,它可以检查流量是否有其他信号,并在其日志中捕获行为。 有关此配置的详细信息,请参阅使用 Azure 防火墙和应用程序网关实现 Web 应用程序的零信任网络文章。 有关如何设置此行为的更多信息,请参阅为零信任配置 Azure 防火墙高级版

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

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

    • 保护 Azure 环境中流向应用程序的流量。
    • 多重身份验证和条件访问策略可用于用户访问应用程序。

    下图显示了这两种跨参考体系结构的访问模式。

    参考体系结构的示意图,其中显示了分支 VNet 中保护访问的方式。

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

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

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

    多重身份验证和条件访问策略可用于用户访问应用程序

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

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

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

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

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

    示意图显示零信任标识和设备访问策略,用于三个保护级别:起点、企业和专用安全性。

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

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

    如本系列的其他文章所述,Microsoft Defender for Cloud 是一个云安全态势管理 (CSPM) 和云工作负载保护 (CWP) 工具,用于提供安全性建议、警报和高级功能(如自适应网络强化),来帮助推进云安全历程。 为了更好地可视化 Defender for Cloud 在更强大的 Microsoft 安全环境的集成位置,请参阅 Microsoft 网络安全参考体系结构

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

    下面是 Microsoft Defender for Cloud 门户中的示例。

    示例 Microsoft Defender for Cloud 建议的屏幕截图。

    如果选择加入提供高级工作负载保护的 Defender for Cloud 计划之一,该计划包含自适应网络强化建议,用于改进现有网络安全组规则。 下面是一个示例。

    示例网络加固建议的屏幕截图。

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

    有关 Azure 安全性的更多培训,请参阅 Microsoft 目录中的以下资源:
    Azure 的安全性 | Microsoft Learn

    后续步骤

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

    技术插图

    此海报提供 Azure IaaS 组件的单页概览视图作为参考体系结构和逻辑体系结构,以及确保对这些组件应用了零信任模型的“永不信任,始终验证”原则所需的步骤。

    说明
    将零信任应用于 Azure IaaS 基础结构海报的缩略图。
    PDF | Visio
    更新时间:2024 年 3 月
    将此图与以下文章一起使用:将零信任原则应用于 Azure IaaS 概述

    相关解决方案指南

    此海报提供适用于 Azure IaaS 的零信任单独组件的参考和逻辑体系结构以及详细配置。 将此海报的各页面用于单独的 IT 部门或专业,或者与 Microsoft Visio 版本的文件一起使用,针对基础结构自定义关系图。

    说明
    将零信任应用于 Azure IaaS 基础结构海报的关系图缩略图。
    PDF | Visio
    更新时间:2024 年 3 月
    将这些关系图与从此处开始的文章一起使用:将零信任原则应用于 Azure IaaS 概述

    相关解决方案指南

    有关其他技术插图,请单击此处

    参考