【问题标题】:How to encrypt actual storage/volume being used by Kubernetes pods using client managed keys(least/zero knowledge of keys on the provider side)?如何使用客户端管理的密钥加密 Kubernetes pod 使用的实际存储/卷(提供者端对密钥的最少/零知识)?
【发布时间】:2020-11-19 05:44:24
【问题描述】:
我希望在我的 kubernetes 环境中拥有每个客户端的命名空间和存储,其中每个客户端运行一个专用的应用实例,并且只有客户端应该能够加密/解密该特定客户端的应用正在使用的存储。
我已经看到了数百个关于 Kubernetes 环境中秘密加密的示例,但很难实现由客户端控制的实际存储加密。是否可以在只有客户端知道加密密钥(而不是 k8s 管理员)的 K8s 环境中进行存储加密?
【问题讨论】:
标签:
encryption
kubernetes
kubernetes-security
【解决方案1】:
按照评论中的建议,我唯一想到的是hashicorp vault。
Vault 是一种用于安全访问秘密的工具。秘密就是任何东西
您想要严格控制访问权限,例如 API 密钥,
密码或证书。 Vault 为任何
秘密,同时提供严格的访问控制并记录详细的
审核日志。
您可能需要查看的一些功能:
-
API 驱动的接口
由于 HTTP API,您可以通过编程方式访问其所有功能。
此外,还有几个官方支持的编程语言库(Go 和 Ruby)。这些库使与 Vault API 的交互更加方便。还有一个命令行界面可用。
-
数据加密
Vault 能够在不存储数据的情况下加密/解密数据。这样做的主要含义是,如果发生入侵,即使攻击成功,黑客也无法获得真正的秘密。
-
动态秘密
Vault 可以为某些系统(例如 AWS 或 SQL 数据库)按需生成密钥。例如,当应用程序需要访问 S3 存储桶时,它会向 Vault 索取凭证,而 Vault 将根据需要生成具有有效权限的 AWS 密钥对。创建这些动态机密后,Vault 也会在租约到期后自动撤销它们。这意味着秘密在被读取之前不存在。
-
租赁和续订:保险柜中的所有秘密都有一个与之关联的租赁。在租约结束时,Vault 将自动撤销该机密。客户可以通过内置的续订 API 续订租约。
-
方便的身份验证
Vault 支持使用令牌进行身份验证,既方便又安全。
Vault 还可以自定义并连接到各种插件以扩展其功能。这一切都可以通过网络图形界面进行控制。