文章目录
- 在Kubernetes中采用零信任: 基本原则
- 零信任的简史
- 在 Kubernetes 实施零信任原则
- Service-to-service networking 服务对服务网络
- User-to-service access 用户对服务的访问
- 总结
在Kubernetes中采用零信任: 基本原则
原文地址:https://blog.aquasec.com/zero-trust-kubernetes
在21年1月下旬,白宫发布了一份备忘录,为创建零信任的联邦机构架构奠定了基础。随着美国政府的重新关注,零信任网络是许多组织关注的一个领域,以改善他们的安全态势。有了这个焦点,理解这些原则在哪里可以应用到云本地环境,特别是 Kubernetes 集群,就变得有意义了。
零信任的简史
在详细讨论零信任如何应用于 Kubernetes 之前,我们有必要回顾一下这种保护网络系统的方法的历史。
21世纪初,英国的 Jericho 论坛提出了网络资源去周边化的概念,建议组织不要依赖外围控制,比如网络防火墙,来保护他们的应用程序和系统。相反,每个系统都应该被正确地保护和直接访问。
2014年,谷歌发布了《 BeyondCorp: 企业安全的新途径》(BeyondCorp: a New Approach to Enterprise Security)一书,同样探讨了企业如何摆脱外围安全,并确保用户和应用程序能够确保呼叫者得到适当的身份验证和授权。
今年(2022),白宫发布了一份备忘录,题为“推动美国政府走向零信任网络安全原则”(Moving the u.s. Government Towards Zero Trust Cybersecurity Principles) ,再次建议企业不要依靠网络周边防御来保护关键数据和系统。
正如我们所看到的,近20年来,人们一致认为各组织需要摆脱对边界安全的依赖。一个公认的问题,“Why are we not all already using zero trust networks?”这里有几个答案。
首先,在许多情况下,我们现在以一种比20年前更加开放的方式访问。云原生系统的到来以及对软件服务的高度依赖,从根本上降低了传统企业网络及其相关外围防火墙的重要性。
但是,我们一直看到新举措使其清晰,我们还没有走到这种转变的尽头。至少在某种程度上,这是因为在这样的环境中,事情并不像看起来那么简单。修改那些没有被设计成这样使用的系统是一项耗时的任务,必须与有限的工程和安全资源竞争。 Maya Kaczorowski 最近的一篇文章“ BeyondCorp 死了,BeyondCorp 万岁”(BeyondCorp Is Dead, Long Live BeyondCorp)深入探讨了这种转变如此具有挑战性的一些原因。
转向零信任并不是一个非此即彼的前景,我们可以想办法通过拨号的方式摆脱对外围网络的依赖,而安全概念并不重要,因为服务连接到一个“可信”的网络。
在 Kubernetes 实施零信任原则
既然我们已经确立了减少对网络边界的依赖这一目标,以及在实现这一目标过程中遇到的一些挑战,那么组织可以采取哪些实际步骤将零信任概念引入 Kubernetes 环境中呢?
Service-to-service networking 服务对服务网络
第一个明显的例子是查看容器网络。默认情况下,每个 Kubernetes 集群将提供一个扁平网络,其中每个容器可以直接与每个其他容器通信,没有任何限制。这个容器网络通常被运行在其中的应用程序视为受信任的网络,服务有时不需要对来自该网络内部的请求进行任何身份验证。
在下面的图中,我们得到了一系列服务,它们都连接到集群网络。并不是所有这些都需要直接联系其他人,但默认情况下,他们可以在网络级别访问彼此。
从安全的角度来看,有几种方法可以改进这一点。第一个是允许 Kubernetes 网络策略(Kubernetes network policies )对集群中的进出流量应用默认拒绝规则。因为网络策略应用于工作负载基于逻辑参数(例如,它们所部署的名称空间和应用于工作负载的标签) ,我们可以确保只有相关联的工作负载可以相互通信。
因此,在下面的示例中,我们可能会限制外部网站只访问数据库服务器和日志记录服务。
即使有这些限制,我们的零信任 Kubernetes 容器还需要进行服务到服务的身份验证和授权,以确保只提供所需的资源。为此,可能需要将工作负载标识项目(如 SPIFFE)和 服务mesh 项目(如 Linkerd)结合起来, 才能为服务到服务的通信提供完全零信任的环境。
User-to-service access 用户对服务的访问
当然,零信任的 Kubernetes 还有另一个方面也需要考虑,那就是用户到集群的通信**。由于 Kubernetes 本身不提供生产级别的身份验证选项,因此将再次需要外部解决方案来完全实现零信任的愿景。**
一个选择是有一个类似于service mesh的模型,用户访问在触及 Kubernetes API 之前通过某种代理服务,代理可以根据设备姿态和请求敏感度来应用控制。Kudelski Security Research 最近展示了这种方法的一个例子,它利用 Cloudflare 的服务和通道连接通过 SSH 进入集群。
总结
很明显,许多组织的趋势采用更加零信任的网络安全方法。过去,许多机构采用“温暖巧克力”(warm Smartie)的方式访问网络(或者对那些不在英国的机构采用“warm M&M”) ,加上坚固的边界网络和柔软的内部网络结合,这种糟糕的日子已经屈指可数了。
然而,这将是一个漫长的过程。虽然像微细分割和细粒度授权之类的东西会有所帮助,但与任何一组安全控制一样,它们只是整体图景的一部分。实现它们并不意味着公司可以停止考虑安全难题中其他不那么显而易见的部分。