此体系结构为设计具有严格网络控制的任务关键型工作负载提供了指导,以防止未经授权的公共访问通过 Internet 访问任何工作负载资源。 其目的是在网络层阻止攻击途径,从而使系统的整体可靠性不受影响。 例如,如果不加以控制,分布式拒绝服务 (DDoS) 攻击可能会导致资源因非法流量过多而变得不可用。
它建立在任务关键型基线结构之上,该体系结构侧重于在没有网络控制的情况下最大程度地提高可靠性和运营效率。 此体系结构添加了使用适当的云原生功能(例如 Azure 虚拟网络 (VNet) 和专用终结点、Azure 专用链接、Azure 专用 DNS 区域等)限制入口和出口路径的功能。
建议先熟悉基线,然后再继续阅读本文。
关键设计策略
任务关键型基线的设计策略仍然适用于此用例。 以下是此体系结构的其他网络注意事项:
控制入口流量
必须限制进入虚拟网络的流入量或入站通信,以防止恶意攻击。
在全局级别应用 Web 应用程序防火墙 (WAF) 功能,在更靠近攻击源的网络边缘阻止攻击。
消除与 Azure 服务的公共连接。 一种方法是使用专用终结点。
在流量进入网络之前对其进行检查。 子网上的网络安全组 (NSG) 通过允许或拒绝流向已配置的 IP 地址和端口来帮助筛选流量。 此级别的控制也有助于细粒度的日志记录。
控制出口流量
必须限制从虚拟网络到该网络外部实体的出口流量。 缺乏控制可能会导致恶意的第三方服务发起数据外泄攻击。
使用 Azure 防火墙限制到 Internet 的出站流量。 防火墙可使用完全限定的域名 (FQDN) 精细地筛选流量。
平衡利弊与安全
将安全功能添加到工作负载体系结构时,需要进行重要的利弊权衡。 你可能会注意到对性能、操作敏捷性甚至可靠性的一些影响。 但是,攻击(如拒绝服务 (DDoS)、数据入侵等)可能会针对系统的整体可靠性并最终导致其不可用。
这些策略基于为架构良好的任务关键型工作负载中的任务关键型工作负载提供的总体指导。 建议在定义自己的任务关键型体系结构时探索网络和连接的设计领域,以获取建议和最佳做法。
体系结构
下载此体系结构的 Visio 文件。
此体系结构的组件可以采用这种方式进行广泛分类。 有关 Azure 服务的产品文档,请参阅相关资源。
全局资源
全局资源生存期长,并共享系统的生存期。 它们具有在多区域部署模型上下文中全局可用的功能。 有关详细信息,请参阅全局资源。
Azure Front Door Premium SKU 用作全局负载均衡器,用于可靠地将流量路由到通过专用终结点公开的区域部署。
Azure Cosmos DB for NoSQL 仍用于在计算群集外部存储状态,并具有基线配置设置以提高可靠性。 访问权限仅限于经过授权的专用终结点连接。
Azure 容器注册表用于存储所有具有异地复制功能的容器映像。 访问权限仅限于经过授权的专用终结点连接。
区域资源
区域资源作为部署标记的一部分预配到单个 Azure 区域。 它们的生存期较短,可为用户提供更高的复原能力、缩放性和邻近性。 这些资源与其他区域中的资源完全不同。 可以单独删除这些资源或将其复制到其他区域。 但是,它们相互共享全局资源。 有关详细信息,请参阅区域标记资源。
Azure 存储帐户中的静态网站托管向后端服务发送请求的单页应用程序 (SPA)。 此组件具有与基线前端相同的配置。 访问权限仅限于经过授权的专用终结点连接。
Azure 虚拟网络为运行工作负载和管理操作提供安全环境。
内部负载均衡器是应用程序的源。 Front Door 使用此源通过专用链接建立与后端的专用和直接连接。
Azure Kubernetes 服务 (AKS) 是运行应用程序且无状态的后端计算业务流程协调程序。 AKS 群集部署为专用群集。 因此,Kubernetes API 服务器不会公开在公共 Internet 上。 仅可通过专用网络访问 API 服务器。 有关详细信息,请参阅此体系结构的计算群集一文。
Azure 防火墙检查并保护来自 Azure 虚拟网络资源的所有出口流量。
Azure 事件中心用作消息代理。 访问权限仅限于经过授权的专用终结点连接。
Azure Key Vault 用作区域机密存储。 访问权限仅限于经过授权的专用终结点连接。
部署管道资源
任务关键型应用程序的生成和发布管道必须完全自动化,从而保证以一致的方式部署经过验证的标记。
GitHub 作为基于 git 的高可用性平台仍用于源代码管理。
选择 Azure Pipelines 来自动执行在预生产和生产环境中生成、测试和部署工作负载所需的管道。
自托管 Azure DevOps 生成代理池用于更好地控制生成和部署。 需要这种级别的自治,因为计算群集和所有 PaaS 资源都是专用的,这需要网络级别的集成,而这在 Microsoft 托管的生成代理上无法实现。
可观测性资源
全局资源和区域资源的监视数据独立存储。 不建议使用单个集中式可观测性存储来避免单一故障点。 有关详细信息,请参阅可观测性资源。
Azure Log Analytics 用作统一接收器,用于存储所有应用程序和基础结构组件的日志和指标。
Azure Application Insights 用作应用程序性能管理 (APM) 工具,用于收集所有应用程序监视数据并将其直接存储在 Log Analytics 中。
管理资源
与基线体系结构相比,一个重要的设计更改是计算群集。 在此设计中,AKS 群集是专用的。 此更改需要预配额外的资源才能获得访问权限。
Azure 虚拟机规模集用于专用生成代理和跳转框实例,以针对群集运行工具,例如 kubectl。
Azure Bastion 提供对跳转框 VM 的安全访问权限,并消除了 VM 具有公共 IP 的需要。
PaaS 服务的专用终结点
要处理业务或部署操作,应用程序和生成代理需要访问多个在全球、区域内甚至在标记内预配的 Azure PaaS 服务。 在基线体系结构中,该通信是通过服务的公共终结点进行的。
在此设计中,这些服务受到专用终结点的保护,以将其从公共 Internet 访问中删除。 此方法可减少整体攻击面,以缓解来自意外来源的直接服务篡改。 但它引入了另一个潜在的故障点并增加了复杂性。 在采用此方法之前,请仔细考虑利弊与安全性。
专用终结点应放置在标记的虚拟网络的专用子网中。 专用终结点的专用 IP 地址是从该子网分配的。 本质上,虚拟网络中的任何资源都可以通过访问专用 IP 地址与服务进行通信。 确保地址空间足够大,以容纳该标记所需的所有专用终结点。
要通过专用终结点连接,需要 DNS 记录。 建议将与服务关联的 DNS 记录保存在由 Azure DNS 提供服务的 Azure 专用 DNS 区域中。 确保完全限定的域名 (FQDN) 解析为专用 IP 地址。
在此体系结构中,已为 Azure 容器注册表、Azure Cosmos DB、Key Vault、存储资源和事件中心配置了专用终结点。 此外,AKS 群集部署为专用群集,它为群集网络中的 Kubernetes API 服务创建专用终结点。
此设计中预配了两个虚拟网络,它们都有专用子网来保存所有这些服务的专用终结点。 虚拟网络布局中介绍了网络布局。
在向体系结构中添加更多组件时,请考虑添加更多专用终结点。 例如,可以向可观测性资源添加限制。 Azure Log Analytics 和 Azure Application Insights 都支持使用专用终结点。 有关详细信息,请参阅使用 Azure 专用链接将网络连接到 Azure Monitor。
它们可以在同一虚拟网络中的相同或不同子网上创建。 在一个订阅中可以创建的专用终结点数量有限制。 有关详细信息,请参阅 Azure 限制。
使用子网上的网络安全组进一步控制对服务的访问权限。
专用流入量
Azure Front Door Premium SKU 用作所有传入客户端流量的全局入口点。 它使用 Web 应用程序防火墙 (WAF) 功能来允许或拒绝位于网络边缘的流量。 配置的 WAF 规则还可以阻止攻击进入标记虚拟网络。
此体系结构还利用 Front Door 的功能,使用 Azure 专用链接访问应用程序源,而无需在后端使用公共 IP/终结点。 这需要标记虚拟网络中的内部负载均衡器。 该资源位于在群集中运行的 Kubernetes 入口控制器前面。 在此专用负载均衡器之上,AKS 创建了专用链接服务,用于来自 Front Door 的专用连接。
建立连接后,Front Door 网络上的专用终结点通过专用链接与标记网络中的负载均衡器和静态网站直接连接。
有关详细信息,请参阅专用链接的工作原理。
受限的流出量
应用程序可能需要一些出站 Internet 连接。 控制该流量提供了一种限制、监视和约束出口流量的方法。 否则,意外的从内向外访问可能会导致入侵和不可靠的系统状态。 受限的流出量还可以解决其他安全问题,例如数据外泄。
使用防火墙和网络安全组 (NSG) 可以确保检查和记录来自应用程序的出站流量。
在此体系结构中,Azure 防火墙是单一出口点,用于检查源自虚拟网络的所有传出流量。 在能够生成出口流量的子网(例如应用程序子网)上使用用户定义的路由 (UDR)。
有关限制出口流量的信息,请参阅控制 Azure Kubernetes 服务 (AKS) 中群集节点的出口流量。
虚拟网络布局
在单独的虚拟网络中隔离区域资源和管理资源。 它们具有不同的特征、用途和安全注意事项。
流量类型:参与处理业务操作的区域资源需要更高的安全控制。 例如,必须保护计算群集免受直接 Internet 流量的影响。 预配的管理资源仅用于访问区域资源以进行操作。
生存期:这些资源的预期生存期也有所不同。 区域资源的生存期应较短(短暂的)。 它们是作为部署标记的一部分创建的,并在标记被拆除时销毁。 管理资源与区域具有同一生存期,并且资源生存期长于标记资源生存期。
在此体系结构中,有两个虚拟网络:标记网络和运营网络。 通过使用子网和网络安全组 (NSG) 在每个虚拟网络内创建进一步的隔离,来保护子网之间的通信。
区域标记虚拟网络
部署标记在每个区域中预配一个虚拟网络。
虚拟网络被划分为这些主要子网。 所有子网都分配有网络安全组 (NSG),用于阻止来自虚拟网络的任何未经授权的访问。 NSG 将限制应用程序子网与网络中其他组件之间的流量。
应用程序子网
AKS 群集节点池在子网中是隔离的。 如果需要进一步将系统节点池与工作节点池隔离,可将其置于单独的子网中。
标记入口子网
每个标记的入口点都是置于专用子网中的内部 Azure 标准负载均衡器。 用于来自 Front Door 的专用连接的专用链接服务也放置在此处。
这两种资源都作为标记部署的一部分进行预配。
标记出口子网
Azure 防火墙置于单独的子网中,并使用用户定义的路由 (UDR) 检查来自应用程序子网的出口流量。
专用终结点子网
应用程序子网将需要访问区域标记、Key Vault 等中的 PaaS 服务。 此外,还需要访问容器注册表等全局资源。 在此体系结构中,所有 PaaS 服务都被锁定,只能通过专用终结点进行访问。 因此,为这些终结点创建了另一个子网。 对该子网的入站访问由 NSG 保护,它仅允许来自应用程序的流量。
可使用专用终结点的 UDR 支持添加进一步的限制,以便此流量也可以通过标记出口子网流出。
操作虚拟网络
操作流量被隔离在单独的虚拟网络中。 由于 AKS 群集的 API 服务在此体系结构中是专用的,因此所有部署和操作流量也必须来自专用资源,例如自托管生成代理和跳转框。 这些资源部署在单独的虚拟网络中,并通过它们自己的一组专用终结点直接连接到应用程序资源。 生成代理和跳转框位于单独的子网中。
另一种方法是使用虚拟网络对等互连,而不是使用专用终结点。 但是,对等互连增加了难以管理的复杂性,尤其是当虚拟网络被设计为暂时性时。
生成代理和跳转框(可选)都需要访问位于全球和区域标记内的 PaaS 服务。 与区域标记虚拟网络类似,为必要的 PaaS 服务的专用终结点创建了一个专用子网。 此子网上的 NSG 可确保只允许来自管理和部署子网的入口流量。
管理操作
一个典型的用例是当操作员需要访问计算群集来运行管理工具和命令时。 无法直接访问专用群集中的 API 服务。 这就是在操作员可以运行工具的位置预配跳转框的原因。 跳转框具有单独的子网。
但是,这些跳转框也需要得到保护,以防止未经授权的访问。 应避免通过打开 RDP/SSH 端口直接访问跳转框。 为此,建议使用 Azure Bastion,并且需要此虚拟网络中的专用子网。
注意
通过 Azure Bastion 和跳转框建立连接,这可能会对开发人员的工作效率产生影响,例如运行调试工具需要额外的过程。 在决定增强任务关键型工作负载的安全性之前,请注意这些影响。
可使用仅允许来自 Bastion 子网的入站流量的 NSG 通过 SSH 进一步限制对跳转框子网的访问。
部署操作
要生成部署管道,需要预配额外的计算来运行生成代理。 这些资源不会直接影响工作负载的运行时可用性,但可靠性故障可能会危害用于部署或服务任务关键型环境的功能。 因此,可靠性功能应扩展到这些资源。
此体系结构对生成代理和跳转框使用虚拟机规模集(而不是单个 VM)。 此外,网络分段是通过使用子网来提供的。 流入量仅限于 Azure DevOps。
成本注意事项
对任务关键型工作负载的成本产生重大影响。 在此体系结构中,使用 Azure Front Door Premium SKU 和在每个标记中预配 Azure 防火墙等技术选择将导致成本增加。 还有与维护和操作资源相关的额外成本。 在采用基线体系结构的网络控制版本之前,必须仔细考虑这种利弊。
部署此体系结构
此体系结构的网络方面是在任务关键型连接实现中实现的。
注意
连接实现旨在说明依赖组织资源、与其他工作负载集成并使用共享服务的任务关键型工作负载。 它在此体系结构的基础上构建,并使用本文中所述的网络控制。 但是,连接方案假设 Azure 登陆区域连接订阅中已有虚拟专用网络或 Azure 专用 DNS 区域。
后续步骤
有关在此体系结构中做出的设计决策的详细信息,请查看 Azure 架构良好的框架中任务关键型工作负载的网络和连接设计领域。
相关资源
有关此体系结构中使用的 Azure 服务的产品文档,请参阅以下文章。