杜绝微服务安全风险:零信任机制!

时间:2023-02-02 19:07:51

本文描述了如何在微服务环境中应用零信任原则,以及需要在后端实施哪些安全控制。

杜绝微服务安全风险:零信任机制!

根据2020年Gartner的报告,估计到2023年,75%的网络安全事件将由管理权限不足和管理权限过大造成。在很大程度上,这可归因于现代云基础设施使用的身份数量不断增加。应用程序在完全虚拟化的环境中作为微服务运行,这些微服务由云中动态协调的多个容器集群组成。

与在企业内部运行的单体应用相比,这种环境中的安全要求明显不同。首先,周边的概念在云中并不存在。其次,企业现在正在处理成千上万的动态创建的工作负载和身份。应用传统的IAM工具来管理这些身份的动态性质是不够的。使用静态的、长期的、经常是过度的访问权限,使威胁者能够进行横向移动。

为了解决这些问题,需要一个满足当今应用安全和身份要求的安全模型:零信任(Zero-Trust)安全,零信任安全是一种主动的安全模型,它使用持续的验证和自适应的安全控制来保护端点和对应用程序的访问以及它们之间流动的数据。零信任取代了过时的假设,即在一个组织的网络内运行的一切都可以被隐含地信任。事实证明,这种安全模式可以最大限度地减少威胁面,防御内部和外部威胁者的入侵,减少威胁者的横向移动,提高运营效率,并帮助支持持续遵守法规。

自成立以来,零信任已经发展和扩大,几乎触及企业的每个角落。本文将概述如何在微服务环境中应用零信任原则,以及应在后端实施哪些安全控制。

零信任原则

零信任主要是基于 "永远不要相信,永远要验证 "和 "默认情况下假设一切是敌对的 "的概念。它由三个核心原则驱动:假设破坏,明确验证,以及最少特权原则。

假设漏洞

始终假设网络威胁会发生,安全控制已经被破坏。这就要求使用冗余和分层的安全控制,持续监控,并收集遥测数据,以检测异常情况并作出实时反应。

明确验证

在零信任的安全模型中,没有任何网络流量、组件、行动或用户是固有的信任,无论其位置、来源或身份。只有在验证身份、真实性、权限、数据分类等的情况下才可以信任。

最少权限原则

始终授予最少的权限。只在需要的时候给予访问权,在不需要的时候取消访问权。最低权限访问对于减少威胁面、限制 "爆炸半径 "和减少威胁者在入侵情况下在环境中横向移动的机会至关重要。

微服务环境中的零信任安全

当一个微服务被破坏时,它可能会影响其他服务。通过在微服务环境中应用零信任原则,服务、组件和网络之间的信任被消除或最小化。

身份和访问管理

身份和访问管理是零信任的支柱,它需要对终端用户身份、服务、功能、工作负载和设备进行强有力的认证和授权。为了实现认证和授权,我们必须首先确保为每个工作负载自动分配一个加密的安全身份,并在每次请求时进行验证。重要的是,要确保有一个自动化的机制来可靠地分发、在受到损害时撤销,并经常轮换服务的证书和机密。对工作负载使用云中立的身份,例如SPIFFE用于验证,OPA用于整个堆栈的统一授权。

安全的服务对服务的通信

在零信任中,最基本的是将网络视为对抗性的。因此,服务、API和存储层之间的所有通信必须进行加密。保护传输中的数据的标准方法是在任何地方使用HTTPS和严格的mTLS。同样,一个强大的认证机制应该在所有的微服务中被强制执行。必须理解的是,不是每个可以被认证的服务都应该被授权。必须根据认证上下文和访问控制策略进行授权,而且应该在每个微服务的边缘进行,而不是在网络边缘。

为了实现这一点,使用一个服务网,如Istio或Linkerd,以实现。

自动证书管理

流量拦截

安全的服务与服务之间的通信,无需改变应用程序代码

微分段(通过授权策略)

这可以减少威胁的爆炸半径,防止威胁者从一个被威胁的服务转向基础设施的其他部分。在容器编排环境中,如Kubernetes,为出口和入口隔离定义细粒度的网络策略。通过指定网络策略和服务级别的RBAC策略,按照 "需要了解 "原则,限制每个集群和每个来源的访问,对所有流量(东西向和南北向)实施零信任。

对资源的安全访问

外部实体不得直接访问微服务环境。相反,使用API网关作为微服务部署的单一入口点。为了传递用户上下文或调用者的身份,应实现一种模式,如幻影令牌模式(API Security in Action)或护照模式。在边缘验证外部访问令牌和用户上下文,并生成一个新的短命令牌,代表外部实体身份,并由受信任的发行人加密签名,然后传播到后端微服务。确保新令牌的访问范围与外部实体的身份范围一样有限。

最重要的是,假设访问令牌可以被盗,并在逐个资源的基础上创建具有较短寿命的访问令牌。使用服务网来验证微服务边缘的访问令牌的有效性。在所有情况下,对资源的访问都应使用基于角色的细粒度访问控制,并授予最少的权限。

杜绝微服务安全风险:零信任机制!

数据安全

必须确保所有的数据根据其机密性和保密性进行分类。创建一个数据注册表,以了解哪个微服务处理什么数据。然后,根据数据分类,实施多层数据加密。不要只相信外部组件的加密(包括数据库和Kafka等消息传递系统)。使用应用级加密(ALE)在微服务之间传输个人身份信息(PII)和高度机密数据。为了减轻未经授权的数据修改的风险,在整个数据生命周期中执行数据完整性校验。

基础设施安全

采用不可变的基础设施已经成为标准。使用 "基础设施即代码 "来预先配置组件,并在部署后永不改变。不要相信存储介质(持久的或临时的),不要以未加密的形式存储任何敏感数据或秘密。所有的秘密、证书和API密钥都应该安全地存储在访问控制的集中式密钥库中。

零信任总是假设网络被破坏。为了遏制可能的破坏,并防止横向扩散到网络的其他部分,实施网络微分段,在每个分段创建软件定义的周界,并根据其功能、业务领域和数据分类将微服务放在每个分段中。网段之间的通信应该有明确的定义,并通过API网关进行控制。考虑采用基于单元的架构进行段间通信。

容器和集群安全

零信任要求对容器镜像、容器和集群节点进行明确验证。因此,使用仅由受信任的发行者和注册机构签署的容器镜像。只有在DevSecOps管道中扫描过并且没有漏洞的情况下才允许使用镜像。为了降低权限升级的风险,在没有root权限的情况下运行Docker守护程序和所有容器。一个标准的方法是在无根模式下运行Docker。在同一集群中逻辑地隔离高风险的应用程序和工作负载,以获得最少的特权数量。

运行时安全

考虑在具有加密内存的基于硬件的可信执行环境中的保密虚拟机上运行安全敏感的微服务。为了减少集群中的流氓或受损节点的风险,通过在启用了安全启动和虚拟可信平台模块的实例上运行节点、虚拟机和容器来验证它们的完整性。

另外,通过以只读模式运行容器,可以实现文件系统的完整性,防止威胁者进行修改。最后,我们可以通过采用RASP解决方案,检查运行时执行的所有代码并动态地停止恶意代码的执行,从而减少我们对运行时的信任。

杜绝微服务安全风险:零信任机制!

图片改编自 "基于英特尔SGX的保密计算节点在AKS上的应用飞地支持",微软Azure文档

结论

实施零信任架构是一种重要的深度防御策略,并已成为现代IT基础设施的一种强制性安全模式。重要的是要明白,实施零信任架构并不意味着零安全事故。我们的目标是不断地将安全控制分层,以增加威胁的成本。随着我们在网络威胁的杀伤链中引入更多的摩擦,威胁者的价值主张将被降低,潜在的威胁将被破坏。

在这篇文章中,我们概述了如何在微服务环境中应用零信任模型的核心原则,我们研究了微服务的关键领域和需要实现的零信任安全目标。微服务部署的高度分布和异质性及其复杂的通信模式,增加了不同组件的数量和暴露在网络上的数据量。与传统的单体应用部署相比,这提供了一个更广泛的威胁面。

因为一个系统的安全与它最薄弱的环节一样好,所以应用零信任的核心原则来主动保护微服务部署的所有层和组件,是现代、可靠和成熟的网络安全策略的基础。有了适当的微服务零信任战略,在大多数情况下可以消除集群受损、横向移动和数据泄露的风险。

零信任是安全的必要演变;然而,其实施不应该是一个目标。它是一个持续的旅程和整个组织的承诺。自成立以来,零信任已成为一个广泛部署的安全模式和一个关键业务的网络安全优先事项。微软的2021年零信任采用报告第11页证实了这一点,表明76%的组织已经开始采用零信任战略。业界正在迅速在整个基础设施中采用零信任,而不仅仅是在终端用户访问上。