作者:Ben Hirschberg,ARMO[1]研发副总裁和联合创始人
你能保守秘密吗?希望如此,因为在这个博客中,我揭示了 Kubernetes 秘密的秘密。首先,我将深入研究 Kubernetes 的秘密机制,然后转向如何保护它们。
Kubernetes secrets 是用于存储和管理敏感数据(如密码、云访问密钥或身份验证令牌)的原生资源。你需要在你的 Kubernetes 集群中分发此信息,并同时对其进行保护。在向集群中的每个节点发送密码时,确保只有经过授权的实体(用户、服务或工作负载)能够访问密码非常重要。
Kubernetes 计算的构造块是由容器组成的 pod。你可以将敏感密码放入容器镜像中,或将其配置为 pod 定义的一部分。更安全的 Kubernetes 原生方法使用秘密对象,并在 pod 规范中引入它们(例如,文件或环境变量)。
在下一节中,我将介绍 Kubernetes 提供的保护层。
秘密是 Kubernetes 原生资源,Kubernetes 为它们提供了一套基本的保护层。这些保护措施是随着时间而发展的,可分为以下几类:
这些保护措施确保机密与其他 Kubernetes 资源隔离,并安全访问和存储。不过,Kubernetes 并不是一个防弹的安全系统,也存在一些风险。
当涉及到秘密时,第三方工具和扩展将识别潜在的风险,并对其进行缓解。风险可分为以下几类:
接下来,我将介绍开源的、特定于云计算的、更具包容性的工具,以减轻上述风险并保护 Kubernetes 的秘密。
有各种各样的工具和策略可以将你的 Kubernetes 秘密安全性提升到下一个级别。在本节中,我将介绍可用的工具以及它们的优缺点,以帮助你选择一个(或多个)用于设计集群。
像 GCP 和 AWS 这样的云提供商有他们自己的云密钥管理系统(KMS),这是一个集中式的云服务,通过它你可以创建和管理密钥来执行加密操作。这些系统还可以作为附加的安全层,用于在应用层加密 Kubernetes 秘密。
当然,KMS 的最大好处是它能够防止获得 etcd 副本访问权的攻击者。但是,它的集成可能有点棘手,所以一定要首先研究如何将 KMS 集成到集群中,并确保它符合你的安全操作。另一方面,KMS 有两个主要的缺点:首先,你需要更改你的应用程序代码以与 KMS 提供者一起工作;其次,它依赖于验证节点,所以如果攻击者已经在该节点上,他们可以轻松访问你的数据。
Sealed Secrets[3]通过在本地将秘密加密为可以安全存储和发布的格式,有助于降低与 CaC 相关的风险,并将秘密泄露到代码仓库中。当集群需要使用秘密时,它只由运行在集群中的控制器解密。
这种方法需要在集群中安装一个控制器,并在本地工作站上安装一个名为 kubeseal 的客户端工具。如果你只关心将秘密对象作为文件保护,那么安装和操作是非常简单的。但是,你需要小心使用 sealed secrets,因为它们只能防止代码仓库的盗窃。例如,如果在安装过程中提取工作站的密钥和秘密,它们将处于危险之中。
Helm 是在集群中安装复杂应用程序的有用工具,包括它们的配置和敏感数据。然而,将秘密值泄露到代码仓库的问题仍然适用于 Helm chart。运营团队在代码仓库中维护 Helm chart,值文件位于不同的甚至相同的位置。
Helm secrets 是一个通过 Mozilla 的开源SOPS[4]项目加密秘密的 Helm 插件。它也是一个可扩展的平台,支持外部密钥管理系统,如谷歌 Cloud KMS 和 AWS KMS。如果使用 Helm 部署应用程序并在值中存储敏感数据,则需要确保 Helm chart 值的安全。与 sealed secrets 类似,Helm secrets 插件只保护代码仓库中的敏感数据。它没有为 Kubernetes API 或 etcd 中的秘密存储提供任何保护。
总之,Kubernetes 秘密是在云中存储和管理敏感信息的云原生方式。尽管 Kubernetes 提供了一些保护,但仍有许多尚未解决的风险需要考虑。通过在操作堆栈中合并一个或多个工具,你可以减轻这些风险。
*ARMO 增强 DevOps、DevSecOps 和安全团队的信心,让他们相信 Kubernetes 部署是受保护的,每个工作负载、容器和微服务都是安全的。访问我们的网站了解更多信息,安排一个演示,或者通过免费试用 ARMO 为你的 Kubernetes 集群添加无缝保护的第一步。
Ben 是 ARMO 研发副总裁和联合创始人。Ben 有云架构和 DevOps 平台的实际操作经验,从云原生技术的早期开始,他有超过 15 年的软件安全经验。
[1]
ARMO: https://www.armosec.io/
[2]
官方文档: https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/
[3]
Sealed Secrets: https://github.com/bitnami-labs/sealed-secrets
[4]
SOPS: https://github.com/mozilla/sops