在 Kubernetes 中,Secret 显得尤为重要。由于它是 K8s 中存储全部敏感信息的对象。据悉,这些敏感信息包含密码、集群的证书、OAuth token、ssh key 以及其余用户自定义的敏感文件等。所以,一旦 K8s 中 Secret 出现安全问题,后果将很是严重。此外,虽然社区提供了必定的安全防御方案,可是依然存在诸多问题。java
K8s Secret 面临着哪些安全问题?这些安全问题会带来什么影响?社区提供的解决方案存在哪些不足?......针对这些问题,InfoQ 记者采访了蚂蚁集团高级工程师秦凯伦,他专一于可信计算、系统安全和虚拟化等领域,对 K8s Secret 有着深刻的研究和探索。安全
根据 Kubernetes 文档,Secret 是 K8s 中存储全部敏感信息的对象。事实上,若是敏感信息直接存放于 K8s 的 Pod spec 或镜像中,不只管控困难,并且存在较大的安全隐患。所以,K8s 经过建立、管理、应用 Secret 对象,能够更好地控制敏感信息的用途,并下降其意外暴露的风险。运维
秦凯伦称,虽然引入 K8s Secret 对象,这在必定程度上下降了意外泄露的风险(更多地是经过集中式的管理),可是 K8s Secret 对象自身的安全性,“社区默认方案中仍存在许多安全问题”。ssh
通常来讲,K8s 中,Secret 数据以纯文本的方式存储在 etcd 中,默认只有 base64 编码,未经加密。同时,共享该文件或将其检入代码库,密码容易泄露。分布式
针对此问题,K8s 社区提供了基于 KMS 的 K8s Secret 加密方案,谷歌云、AWS 和 Azure 均支持该方案。他说,“这虽然解决了 etcd 中 Secret 明文存储问题,但依然有一些问题。”ide
密钥一旦泄露,将致使全部数据的泄露,从而引发用户对整个系统的信任崩溃。“为此,社区和一些公司尝试为该方案中的 Plugin 加上基于硬件的安全保护,从而提高攻击难度。但对某些特定用户来讲,保护的覆盖面和程度依然不够”。性能
实际上,咱们能够从 K8s Secret 的整个生命周期来看:编码
在秦凯伦看来,理想中,对 K8s 中 Secret 的保护程度应该考虑其整个生命周期的安全、可信,作到端到端的安全防御。加密
为此,他们基于 TEE 技术,将 K8s Secret 整个生命周期和端到端使用过程当中的关键组件、步骤保护起来。总体方案大体以下:spa
秦凯伦向 InfoQ 记者指出,“这种方案是基于 TEE 的端到端 K8s Secret 保护,还引入 LibOS 技术,实现 TEE 保护对用户、开发者和运维团队彻底透明。”
据悉,KMS Plugin 和 TEE-based KMS Plugin 没有标准和开源的社区实现,所以他们设计并开发了本身的 KMS Plugin,并在灰度发布、应急处理、监控管理等方面进行了生产加强。“在与 TEE 结合的过程当中,咱们为了应对 SGX 机型存在的性能问题,提供了 standalone 和服务化 KMS Plugin 两套方案”。
一样,TEE-based kubectl 也没有标准和开源的社区实现,他说:“咱们基于 kubeproxy 开发了本身的安全 kubectl,实现了 kubeconfig 对用户透明、与用户身份绑定、不落盘并采用TEE保护内存安全等设计目标。”
此外,考虑到 TEE 保护的易用性、可靠性、可扩展性和可维护性等,他们在评估多套方案后,引入了由蚂蚁开源的 Occlum LibOS,屏蔽了 TEE 对用户、开发者和运维团队的影响,大大下降了 TEE 开发的门槛和成本。
在秦凯伦看来,K8s 做为蚂蚁大规模容器集群的管控根基,应用基于 TEE 的端到端 K8s Secret 保护防御方案,加强了其自身安全和可信,提高了蚂蚁核心管控平面的安全水位,“这对于金融场景下高标准的数据安全和隐私保护来讲不可或缺”。