【译】现代环境下的网络分割

NIC JACKSON前端

网络分割是限制网络入侵影响的一种高效策略。可是, 在诸如群集调度程序这样的现代环境中, 应用程序一般会在没有操做员干预的状况下启动和从新启动。这种动态资源调配会致使不断变化的 IP 地址和应用程序入口端口。使用传统的防火墙和路由方法对这些动态环境进行细分能够在技术上具备挑战性。安全

在这篇文章中, 咱们将研究这种复杂性以及服务网格是如何成为现代动态环境中安全网络通讯的潜在解决方案的。服务器

动态环境

咱们先来定义一下动态环境的含义。最简单的状况是, 动态环境是应用程序和基础结构常常发生更改的环境, 要么是经过手动个更改常规部署和基础结构,要么就是在没有操做员干预的状况下触发大小自动调整或实例自动替换。像 HashiCorp Consul或 Kubernetes 这样的调度程序展现了这种行为, 就像许多云提供商提供平衡自动缩放组的自动冗余功能。可是, 这种效果不只限于云环境, 任何平台 (如 vSphere 配置在高可用模式下) 也能够归类为动态环境。网络

网络分割

咱们还须要澄清为何网络分割对网络安全有很高的价值。传统的网络分割主要是使用外围防火墙实现的。此方法的问题在于受信任区域是平坦的。它只须要一次入侵就能得到对网络的普遍访问, 而网络越大, 入侵检测的机会就越有限。.net


随着细粒度网络分割, 网络被分红许多较小的网络, 为的是在发生入侵的时候能减小爆炸半径,。此方法涉及开发并执行某规则集, 以控制特定主机和服务之间的通讯。代理

每一个主机和网络应该被分割和隔离在最低的水平, 这个是能够实际实现的。路由器或3层交换机使用诸如虚拟 LAN (VLAN) 或访问控制列表 (acl) 等措施将网络划分为不一样的较小网络。网络防火墙则是为了过滤各小块网络之间的网络通讯, 而基于主机的防火墙则主要负责过滤来自本地网络的通讯来添加额外的安全性。cdn

若是您在基于云的环境中运行, 则经过使用虚拟私有云 (VPC) 和安全组来实现网络细分。虽然交换机是虚拟化的, 但将入口规则和 acl 配置为分段网络的方法主要与物理基础结构相同。blog

服务细分

在网络细分涉及保护区域间的通讯时, 服务分割确保同一区域中服务之间的通讯安全。服务细分是一种更细化的方法, 尤为与多multi-tenanted环境 (例如, 在单个节点上运行多个应用程序的调度程序) 相关。网络安全


实现服务细分取决于您的操做环境和应用程序基础结构。服务细分一般经过软件防火墙的配置、软件定义的网络 (如应用调度程序使用的覆盖网络) 以及最近出现的经过利用服务网格来实现。资源

与网络分割同样, 应用最小特权原则, 只容许在有明确意图容许此通讯的时候容许服务通讯。

网络分割与动态环境问题

当咱们试图在动态环境中实现此方法时, 存在许多问题:

应用程序部署与网络配置断开链接

当使用自动缩放组部署应用程序并建立新实例时, 一般会动态地从预先配置的块中分配 IP 地址。这个特定的应用程序不多会被孤立地运行, 须要访问在同一网络段中运行的服务, 以及潜在的另外一个网络段。若是咱们对网络安全采起了强硬的方法, 那么这两段之间就会有严格的路由规则, 这两个部分只容许预约义列表上的通讯。除此以外, 咱们还将在上游服务上配置主机级防火墙, 这将只容许特定的通讯。

在静态的世界中, 当应用程序部署到已知位置时, 这是更简单的解决办法。能够在部署时更新路由和防火墙规则, 以启用所需的访问权限。

在动态的世界中, 存在断开链接的问题, 应用程序独立部署以配置网络安全和分配的 IP 地址, 甚至潜在的端口都是动态的。一般有一个手动更新网络安全规则的过程, 这会减慢部署速度。

在现代调度程序中调度应用程序

网络分割的目标是在逻辑上划分网络, 以减小爆炸半径。极限来讲, 每一个网络段只包含一对须要通讯的服务。这就造成了服务细分的概念, 在这里咱们管理对服务层的访问。随着服务级别的细分, 咱们关注服务之间的交互, 而无论它们在网络上的位置。若是您在像 Kubernetes 或Consul这样的调度程序上运行应用程序, 利用覆盖网络是配置服务细分的经常使用方法。配置叠加比管理多个网络路由和防火墙规则要简单得多, 由于在应用程序位置发生变化时, 叠加一般会自动从新配置。咱们须要考虑调度程序一般是更重要的基础结构部署的一部分。

在这种状况下, 咱们还须要考虑调度程序内部的应用程序如何与其余网络服务通讯。例如, 您有一个100节点群集, 一个应用程序实例须要与另外一个网络段中的服务进行对话。在调度程序中运行的应用程序能够在100个节点中的任何一个上运行。这使得肯定哪些 IP 应该列入白名单是有挑战性的。调度程序一般会动态地在节点之间移动应用程序, 这会致使一直产生更新路由和防火墙规则的需求。

现代环境由VMs、容器、无服务器功能、云数据存储等组成。这种复杂的基础结构对管理网络安全构成了重大挑战。

为了防火墙和路由规则配置网络级安全性, 以及为了覆盖网络配置调度程序级别安全性有助于提升整个系统的安全性。可是, 咱们必须在两个独立的区域中管理安全配置。在操做上, 咱们还有两种大相径庭的方法来实现所需的配置。这两个要求大大提升了管理应用程序安全性的系统复杂性和操做开销。

这种复杂性的一个不幸的反作用多是安全被放松了, 网络分割被简化为路由规则的块, 而不是绝对地址。整个群集被容许路由, 而不只仅是运行特定应用程序的节点。从服务的角度来看, 对本地网络段应用太多的信任。从安全的角度来看, 这并非最好的选择, 由于增长了应用程序的攻击面, 因此须要一种一致且集中的方法来管理和理解网络和服务细分。

基于意向安全的服务细分

解决复杂性和提升网络安全性的方法是, 删除配置基于位置的安全规则的须要, 并移动到基于意向的模型。基于意向的安全性构建了有关标识而不是位置的规则。例如, 咱们能够定义一个意向, 说明前端服务须要与付款服务通讯。

经过意图定义网络分割能够缓解传统网络分割的复杂性, 并容许更严格地控制网络安全规则。出于意向, 您在应用程序级别描述安全性, 而不是网络位置级别。

例如, 若是咱们有如下基础结构:


为了启用 "服务 A" 到 "服务 B" 通讯, 咱们须要在两个段之间建立路由规则。必须建立防火墙规则, 以容许从 "服务 A" 实例进行访问。

此配置总共有9条规则:

  • 9x 服务 A 和服务 B 之间的防火墙规则

考虑当 "服务 A" 实例被替换时的影响, 并记住这不只是因为失败, 并且是持续集成。须要再次更新这些规则, 删除的实例详细信息将须要被删除, 并添加新的实例详细信息。

如今考虑经过基于意向的安全性来控制路由的方法。

此配置将致使单个意图:

  • "服务 A" ➡️ "服务 B",

更改运行实例的比例或位置不会更改该简单规则。

使用服务网格能够实现基于意向的安全性。服务网格由一个中央控制平面组成, 它容许您经过使用意向而不是网络位置来集中配置网络和服务细分, 而且数据平面提供路由和服务发现。这两个组件一块儿几乎能够彻底替换复杂路由和防火墙规则的要求。

使用基于身份的受权, 数据平面只容许由这些意图定义的服务之间的通讯, 并且因为意图是由控制平面集中管理的, 所以单个更新会从新配置整个网络。

意图对传统网络分割的好处

服务意图大大简化了为服务通讯提供安全服务的方法。不管咱们的应用程序是在虚拟机中运行, 仍是在调度程序上, 或者是云管理的数据存储区, 咱们均可以采起集中的方法。

因为服务网格中的全部通讯都是代理的, 因此网络路由规则被大大简化。能够将通讯流限制为单个端口的端口, 或很是窄的范围和主机级防火墙, 只须要将其配置为容许在已知的代理端口上进行侵入。

在服务网格中, 链接经过相互 TLS 进行身份验证, 所以即便无管理应用程序得到对网络的访问权, 若是没有有效的标识和身份验证, 它将没法与在主机上运行的开放代理端口通讯。

最后, 使用单一的集中规则定义服务安全性的概念更简单, 更易于实现。

咱们认为, 服务细分是确保数据中心安全的重要步骤, 特别是在现代云环境中。咱们最近引入了 "Consul Connect", 它增长了对Consul的分割能力, 使其成为一个完整的服务网格。你能够在这里阅读关于这一声明的更多信息www.hashicorp.com/blog/consul…, 了解更多关于Consul的信息在这里www.consul.io/.

相关文章
相关标签/搜索