什么是云网络安全?

云网络安全是现代计算环境中保障 容器化应用程序 及其数据安全的一个关键方面。它涉及确保这些应用的网络通信和配置安全,无论使用的是哪种 协调平台 。云网络安全涉及网络分段、命名空间、覆盖网络、流量过滤和容器加密。通过实施云网络安全技术和最佳实践,组织可以有效地防止基于网络的攻击,如加密劫持、勒索软件和 BotNetC2,这些攻击既可以影响面向公众的网络,也可以影响容器用于交换数据的内部网络。

 

云网络安全详解

所有 工作负载 都在相同的网络堆栈和协议上运行,无论它们是在裸机服务器、虚拟机还是在容器中运行。换句话说,容器化工作负载会受到许多与传统应用程序相同的基于网络的攻击,如加密劫持、勒索软件、BotNetC2 等等。

然而,基于网络的安全威胁会通过两种方式对容器造成影响,一种是通过将应用程序连接到互联网的面向公众的网络,另一种是通过 Kubernetes 容器用于在彼此间交换数据的内部网络。

云网络安全侧重于确保一般容器化应用程序的网络通信和配置安全,而与协调平台无关。它涉及网络分段、命名空间、覆盖网络、流量过滤和容器加密等方面。

Kubernetes 网络安全针对 Kubernetes 集群内的网络安全,包含 Kubernetes 特有的功能,如网络策略、入口和出口控制、命名空间隔离、基于角色的访问控制(RBAC)和服务网格实施。

要检测这两类网络上的恶意活动迹象,既需要 容器安全 ,也需要 Kubernetes 网络安全。由于这些都是不同的领域,因此需要分别讨论,以涵盖其独特的方面。在本节中,我们将深入探讨与容器有关的云网络安全的各个方面,并讨论保护环境安全的最佳实践。

 

云网络安全

一旦部署了容器,就需要对其进行保护,防止有人试图窃取专有数据和计算资源。云网络安全可主动限制不必要的通信,并在部署后预防威胁攻击您的应用程序。

容器化的新一代防火墙、 Web 应用程序和 API 安全 (WAAS)以及 微分段 工具可以检查和保护进出容器(南北向和东西向)的所有流量,从而实现对 Kubernetes 环境的全面 第 7 层可视性和控制。此外, 容器化防火墙可 根据容器基础设施快速变化的规模和按需动态扩展,为业务运营提供安全和带宽。

图 1:简化的 Kubernetes 架构,叠加 VM-系列(虚拟化新一代防火墙)和 CN-系列(专为确保基于 Kubernetes 的容器化应用安全而定制的容器化防火墙)

图 1:简化的 Kubernetes 架构,叠加 VM-系列(虚拟化新一代防火墙)和 CN-系列(专为确保基于 Kubernetes 的容器化应用安全而定制的容器化防火墙)

网络分割

网络分段是指将网络划分为较小的、隔离的网段,以限制未经授权的访问、遏制潜在威胁并提高整体网络性能。在容器化环境中,安全小组可以通过多种方法实现网络分段。

网络命名空间

网络命名空间为每个容器创建独立的网络堆栈,包括各自的网络接口、路由表和防火墙规则,从而实现容器之间的隔离。通过利用网络命名空间,可以防止容器相互干扰对方的网络配置,并将它们的可见性限制在所要求的网络资源范围内。

重叠网络

覆盖网络在现有物理网络的基础上创建了一个虚拟网络层,使容器可以跨不同主机进行通信,就像它们在同一个网络上一样。针对容器的流行覆盖网络解决方案包括 Docker 的内置覆盖驱动程序、Flannel 和 Weave。

网络分区和安全组

网络分区和安全组可以通过创建逻辑边界和应用特定防火墙规则来限制网段之间的流量,从而进一步划分容器网络。

流量过滤和防火墙规则

容器化的新一代防火墙可阻止恶意软件进入集群并在集群内传播,同时还能防止用于数据外渗和指挥与控制(C2)攻击的恶意出站连接。虽然左移安全工具可针对已知漏洞提供部署时保护,但容器化的新一代防火墙可针对未知和未修补的漏洞提供保护。

流量过滤和防火墙规则对于控制容器之间以及容器与 主机之间的流量至关重要。

出口和入口过滤

出口过滤控制来自容器的出站流量,而入口过滤控制进入容器的入站流量。通过应用出口和入口过滤,您可以限制容器暴露于外部威胁,并将其通信限制在必要的服务范围内。

对容器流量应用防火墙规则

防火墙规则可应用于不同级别,包括主机、容器和网络级别。例如,您可以使用 Linux iptables 或 firewalld 创建管理容器流量的规则,保护您的基础架构免受未经授权的访问和恶意活动的影响。

负载平衡和流量路由

负载平衡和流量路由对于在多个容器间分配流量和确保应用程序的高可用性非常重要。可以使用 HAProxy、NGINX 或 Kubernetes 内置服务等解决方案,根据预定义的规则和健康检查将流量路由到适当的容器。

加密和安全通信

加密容器之间以及容器与主机之间的通信并确保其安全,对于保护敏感数据和维护应用程序的完整性至关重要。

容器流量的传输层安全(TLS)

TLS 为通过网络传输的数据提供加密和验证功能。通过对容器流量实施 TLS,可以确保容器之间以及容器与主机之间传输的数据经过加密,确保安全,防止窃听或篡改。您可以使用 OpenSSL 或 Let's Encrypt 等工具为容器生成和管理 TLS 证书。

确保容器间通信安全

要确保容器之间的通信安全,可以使用容器原生解决方案,如 Docker 内置的加密网络,或第三方工具,如为容器提供 API 感知网络安全的 Cilium。通过这些解决方案,您可以对容器到容器的流量实施加密、身份验证和授权。

确保容器到主机通信的安全

确保容器与主机之间的安全通信,可以通过使用主机级加密和验证机制(如 SSH 或受 TLS 保护的 API)来实现,以控制对容器管理界面和数据存储系统的访问。

Kubernetes 网络安全

网络政策

网络策略是 Kubernetes 的一项关键功能,可让您控制集群内部以及集群与外部网络之间的流量。现代工具使安全小组能够定义策略,这些策略基本上决定了谁和什么可以访问任何给定的微服务。组织需要一个框架来定义这些策略,并确保它们在高度分布式的容器应用环境中得到一致的维护。

定义和执行网络政策

Kubernetes 的网络策略是用 YAML 文件定义的,其中规定了 pod、服务和命名空间等组件之间允许的流量。这些策略一旦定义,就可以使用支持 Kubernetes 网络策略 API 的网络插件(如 Calico 或 Cilium)来执行。

白名单和黑名单流量

网络策略可用于根据包括 pod 标签、IP 地址或命名空间在内的标准,将群集组件之间的流量列入白名单或黑名单。建立这些机制可以控制哪些服务可以相互通信,并防止未经授权访问敏感数据或资源。

命名空间隔离和分割

通过在命名空间级别应用网络策略,您可以隔离和分割群集中的应用程序或环境,将流量限制在必要的组件上,防范潜在的安全风险。

出入口控制

控制入口和出口流量对于管理进出 Kubernetes 集群的数据流并保护其免受外部威胁至关重要。

输入控制器和负载平衡

Kubernetes 中的入口控制器根据预定义的规则,将外部流量路由到集群中的适当服务。负载平衡可以通过内置的 Kubernetes 服务或 NGINX 和 HAProxy 等第三方解决方案来实现。这些解决方案允许您根据路径、主机或标头等标准对流量进行路由。它们还允许您提供 TLS 终止和其他安全功能。

入口接入最佳做法

  • 为每个命名空间应用 "全部拒绝 "策略,纠正 Kubernetes 的默认 "任意允许 "策略。
  • 防止服务直接接受来自外部 IP 的传入流量,除非连接了负载平衡器或入口。只允许从负载平衡器或入口传入流量。
  • 根据服务要求将流量限制在特定协议和端口上(如网络服务的 HTTP/HTTPS、DNS 服务的 UDP 53)。
  • 只接受来自消耗它们的其他服务(pod)的流量,无论是来自同一命名空间还是其他命名空间。
  • 要从另一个命名空间中的 pod 创建入口策略,请在命名空间中添加一个标签。

出口交通管理

控制 Kubernetes 集群的出口流量对于防止数据泄漏和确保出站连接只被限制到要求的目的地至关重要。您可以通过使用出口网络策略来实现这一目标,该策略允许您为 Pod 或命名空间的出站流量定义规则。此外,出口网关或 Squid 等代理解决方案可用于控制和监控群集的出站流量。

出口通道最佳做法

  • 了解 微服务使用的每个外部服务的需求。Prisma Cloud Compute Defender 等产品可帮助识别微服务参与的外部流量。
  • 如果 pod 需要连接到没有固定 IP 地址的 DNS (FQDN) 名称,请使用外部防火墙或代理,因为 Kubernetes 网络策略只支持 IP 地址。
  • 防范不需要外部连接的 pod 的出站流量,以降低数据外泄或下载恶意二进制文件的风险。
  • 如果没有外部依赖关系,则应用阻止出口策略,但在执行出口策略时,要确保 Kubernetes DNS 服务等基本服务保持连接。

基于身份的 微分段 有助于限制第 3 层和第 4 层应用程序之间的通信,而容器化的新一代防火墙则执行 第 7 层 深度数据包检查,扫描所有允许的流量,以识别和预防已知和未知的威胁。

DNS 政策与安全

DNS 是 Kubernetes 网络不可或缺的一部分,因为它为集群内的服务和其他组件提供名称解析。确保 DNS 基础设施的安全性和完整性,防止 DNS 欺骗或缓存中毒等攻击。

Kubernetes 提供内置 DNS 策略,用于控制集群内的 DNS 解析行为,您还可以使用外部 DNS 提供商或 DNSSec 等 DNS 安全解决方案来增强 DNS 基础架构的安全性。

服务网格和网络加密

服务网格是一个专用的基础架构层,可为您的微服务和容器化应用提供高级网络功能,如流量路由、负载平衡和安全。

实施服务网格

Istio 和 Linkerd 等服务网格解决方案可与 Kubernetes 集群集成,以提供高级网络功能并增强容器化应用的安全性。这些解决方案提供相互 TLS、访问控制和流量加密等功能,有助于保护您的应用程序,尤其是微服务,免受各种安全威胁。

用于安全通信的相互 TLS(mTLS)

相互 TLS(mTLS)是一种安全协议,客户端和服务器在建立安全连接之前都要验证对方的身份。传统 TLS 只对服务器进行客户端验证,而 mTLS 则不同,它要求客户端出示证书,从而增加了一层安全保障。新增的要求可验证双方的真实身份,有助于防止未经授权的访问、数据泄漏和中间人攻击。

网络流量的可观测性和可控性

服务网格解决方案还提供对网络流量的可观测性和控制能力,让您能够近乎实时地监控应用程序的性能和安全。及早识别未经授权的访问、异常流量模式和其他潜在的安全问题,意味着您可以及早采取纠正措施来降低风险。

加密流量和敏感数据

为确保集群内数据的保密性和完整性,必须对内部和外部通信实施加密技术。

加密主机间通信的 IPsec

IPsec 可加密所有主主机和节点主机之间的通信,从而保护集群流量。请注意 IPsec 的开销,并参考容器编排文档以启用群集内的 IPsec 通信。将必要的证书导入相关证书数据库,并创建策略以确保群集中主机之间的通信安全。

为 IPsec 开销配置最大传输单元 (MTU)

调整路由或交换 MTU,以适应 IPsec 报头开销。例如,如果群集在最大传输单元 (MTU) 为 1500 字节的 Ethernet 网络上运行,则应修改 SDN MTU 值,以考虑 IPsec 和 SDN 封装开销。

为群集中的应用程序接口通信启用 TLS

Kubernetes 假设集群内的 API 通信默认使用 TLS 加密。大多数安装方法都会创建并向群集组件分发所要求的证书。但要注意,某些组件和安装方法可能会通过 HTTP 启用本地端口。管理员应随时了解每个组件的设置,以识别和处理潜在的不安全流量。

Kubernetes 控制平面安全

控制平面,尤其是 Kubernetes 集群中的控制平面,是攻击的主要目标。为提高安全性,请通过检查和正确配置来加固以下组件:

  • 节点及其周界
  • 主节点
  • 核心组成部分
  • 应用程序接口
  • 面向公众的吊舱

虽然 Kubernetes 的默认配置提供了一定程度的安全性,但采用最佳实践可以加强集群的工作负载和运行时通信。

网络政策(防火墙规则)

Kubernetes 的扁平网络允许所有部署在默认情况下到达其他部署,甚至可以跨命名空间。pod 之间缺乏隔离意味着受攻击的工作负载可能会对其他网络组件发起攻击。实施网络策略可以提供隔离和安全。

舱位安全政策

Kubernetes 允许 pod 默认以各种不安全配置运行。例如,在主机上运行具有根权限的特权容器是高风险的,使用主机的命名空间和文件系统或共享主机的网络也是高风险的。Pod 安全策略可让管理员在允许将 Pod 部署到群集之前,限制 Pod 的特权和权限。使用网络策略隔离非依赖的 pod,使其无法相互对话,这将有助于在发生漏洞时防止容器间的横向移动。

秘密加密

Kubernetes 的基本发行版默认不会对静态机密进行加密(尽管 GKE 等托管服务会)。如果攻击者获得了键值存储(通常是 Etcd)的访问权限,他们就可以访问集群中的所有内容,包括未加密的机密。加密群集状态存储可保护群集,防止静态数据外泄。

基于角色的访问控制

虽然 RBAC 并非 Kubernetes 独有,但必须正确配置才能防止群集受损。RBAC 允许对 pod 或用户可以访问的集群组件进行细粒度控制。通过限制用户和 pod 在集群中可以查看、更新、删除和创建的内容,RBAC 有助于限制入侵可能造成的损害。

通过虚拟修补解决控制平面安全问题

将控制平面的管理员级访问权限降至最低,并确保 API 服务器不被公开暴露,这是最重要的安全基础。

DevOps 和 SecOps 团队可以识别应用程序包中的漏洞,但降低这些风险需要时间。在部署之前,必须替换或修补并测试存在漏洞的包,这就会使环境暴露在问题解决之前。Prisma Cloud 等解决方案可为每个工作负载自动进行漏洞映射,为已知漏洞提供虚拟补丁。通过利用其 WAAS 组件,该解决方案可调整流量检测策略,以检测和阻止基于 HTTP 的远程漏洞。

容器和 Kubernetes 的网络安全最佳实践

综上所述,以下最佳实践可作为一份清单,确保您的团队有能力保护 容器化 应用程序和数据免受网络威胁。

监控和记录网络流量

密切关注网络流量对于检测和应对安全事件以及维护容器化环境的整体健康至关重要。

集中式日志和监控解决方案

为您的容器和 Kubernetes 环境实施集中式日志记录和监控解决方案,如 ELK Stack、Prometheus 或 Prisma Cloud,可以帮助您收集、分析和可视化来自不同领域的网络流量数据。轻松访问集中式数据情报将使您能够识别趋势、检测异常并深入了解基础设施的性能和安全性。

检测和应对安全事件

监控网络流量并对异常或可疑活动发出警报,可以快速检测和应对涉及未经授权访问、数据外泄和其他恶意活动的事件。安全小组有能力采取适当措施,如隔离受影响的组件、阻止恶意 IP 或及时更新防火墙规则。

网络流量可视化和分析

对网络流量数据进行可视化分析,可以帮助您识别可能预示潜在安全风险的模式和趋势。Kibana、Grafana 或自定义仪表盘等工具可用于创建网络流量的可视化表示,让您发现异常并更有效地调查安全事件。

网络安全配置

加固网络配置和实施强大的访问控制对于保护容器和 Kubernetes 环境免受安全威胁至关重要。

加固主机和云网络设置

维护环境安全要求确保容器主机和单个容器的网络安全配置。基本措施包括禁用未使用的网络服务,将网络访问限制在必要的组件范围内,并对主机操作系统和容器运行时应用安全补丁和更新。

网络访问控制和身份验证

为防止未经授权的访问并维护容器和 Kubernetes 环境的完整性,实施强大的访问控制和身份验证机制至关重要。主要措施包括利用基于角色的访问控制(RBAC)来管理 Kubernetes 中的用户权限,采用多因素身份验证(MFA),以及使用 VPN 或防火墙等网络安全解决方案来限制对环境的访问。

定期网络安全评估

定期进行网络安全评估--漏洞扫描、渗透测试和安全审计--是识别容器和 Kubernetes 环境潜在弱点的必备条件。这些评估的主要内容包括检查网络配置、防火墙规则和安全策略,以确保符合行业最佳实践和合规性要求。

通过遵循这些最佳实践并实施有效的网络安全措施,您可以加固容器和 Kubernetes 环境,使其免受潜在的网络威胁,并确保应用程序和数据的安全性和完整性。

云网络安全常见问题解答

入侵检测系统(IDS)是一种安全解决方案,用于监控网络流量,查找可疑活动和潜在威胁。它通过分析流量来识别可能预示着网络或系统攻击的模式。IDS 系统可以基于网络或主机,监控进出设备的入站和出站流量,或分析系统配置和日志。IDS 可帮助识别异常活动,这些活动可能意味着恶意软件感染、未经授权的访问或其他违反安全策略的行为。IDS 向管理员发出潜在威胁警报,以便快速做出反应,降低风险。
容器安全背景下的映像扫描涉及分析容器映像中的漏洞,如过时软件、安全配置错误或暴露的机密。这一过程对于维护容器化应用的安全性至关重要。SAST 和 SCA 等图像扫描工具可根据已知漏洞数据库对组件进行评估,并深入了解潜在的安全问题。定期进行映像扫描是 CI/CD 管道中的最佳实践,可确保部署在生产环境中的容器不存在已知漏洞。

MTU,即最大传输单位,是指可在网络上传输的数据包的最大尺寸。它是决定网络数据通信效率和性能的一个有利参数。传输控制协议 (TCP) 使用 MTU 来确定互联网传输中每个数据包的最大大小。

为了适应加密和封装带来的额外报头开销,在使用 IPsec 进行安全通信时,有必要调整 MTU 值。例如,如果 Kubernetes 集群在默认 MTU 为 1500 字节的 Ethernet 网络上运行,则应降低 MTU 值,以考虑 IPsec 和 SDN 封装开销。这种调整可防止数据包碎片化,确保更高效、更安全的数据传输。

安全组是一种虚拟防火墙,可控制云环境中网络资源的入站和出站流量。它们用于设置规则,允许或拒绝虚拟机或容器等实例的网络流量。安全组对于在实例级别定义访问控制至关重要,可确保只有经授权的流量才能访问资源。它们是网络安全的基本组成部分,可对网络访问进行细粒度控制,并增强云部署的整体安全态势。
网络策略是管理 Kubernetes 环境中容器和 pod 流量进出的特定规则。它们是一种重要的安全机制,允许管理员强制规定哪些 pod 可以相互通信以及与其他网络端点通信。网络策略定义了 pod 组如何相互通信以及其他网络端点,使用标签选择 pod 并定义规则。它们对于创建一个安全、微分段的网络架构至关重要,可在发生漏洞时降低横向移动的风险。
Istio 是一种开源服务网格,提供了一种控制微服务如何共享数据和资源的方法。它简化了微服务架构的部署、管理和安全性。Istio 通过在服务和网络之间提供一层基础设施来实现这一目标,这层基础设施可以进行流量管理、策略执行和遥测收集。它在复杂环境中尤其有用,可提供安全的服务对服务通信、服务发现、负载平衡和容错等功能。
Kubernetes 中的命名空间是在多个用户之间划分集群资源的一种方式。它们为名称提供了一个范围,允许将群集划分为逻辑命名的组,这在有许多用户分布在多个团队或项目的环境中很有帮助。命名空间用于组织物理共享集群中的资源,提供了一种分配资源和执行资源配额的方法,增强了多租户环境中的安全性和管理。
服务网格是微服务应用程序的可配置基础架构层。它提供了一种控制应用程序不同部分如何共享数据和资源的方法。服务网格提供服务发现、负载平衡、加密、可观测性和可追溯性等功能。它们可以处理微服务架构中基于网络的进程间通信的复杂性,让开发人员专注于业务逻辑而不是网络挑战。服务网格(如 Istio)可在云原生环境中提供关键功能,以提高 微服务的性能、可靠性和安全性。