如何使用客户端管理的密钥(least/zero 提供商端的密钥知识)对 Kubernetes pods 使用的实际 storage/volume 进行加密?

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 环境中为每个客户端命名空间和存储,其中每个客户端运行一个专用的应用程序实例,并且只有客户端应该能够 encrypt/decrypt 该特定客户端的应用程序正在使用的存储。 我已经看到数百个关于 kubernetes 环境中的秘密加密的例子,但努力实现由客户端控制的实际存储加密。是否可以在只有客户端知道加密密钥(而不是 k8s 管理员)的 K8s 环境中进行存储加密?

根据评论中的建议,我唯一想到的是 hashicorp vault

Vault is a tool for securely accessing secrets. A secret is anything that you want to tightly control access to, such as API keys, passwords, or certificates. Vault provides a unified interface to any secret, while providing tight access control and recording a detailed audit log.

您可能要检查的一些功能:

  1. API驱动接口
    由于 HTTP API,您可以通过编程方式访问其所有功能。 此外,还有几个官方支持的编程语言库(Go 和 Ruby)。这些库使与 Vault 的 API 的交互更加方便。还有一个 command-line 接口可用。
  2. 数据加密
    Vault 能够 encrypting/decrypting 数据而不存储它。这主要意味着如果发生入侵,即使攻击成功,黑客也无法访问真正的秘密。
  3. 动态秘密
    Vault 可以为某些系统生成机密 on-demand,例如 AWS 或 SQL 数据库。例如,当应用程序需要访问 S3 存储桶时,它会向 Vault 请求凭据,Vault 将按需生成具有有效权限的 AWS 密钥对。创建这些动态秘密后,Vault 也会在租约到期后自动撤销它们。这意味着秘密在被读取之前不存在。
  4. 租赁和续订:Vault 中的所有机密都有与之关联的租赁。在租约结束时,Vault 将自动撤销该秘密。客户可以通过 built-in renew APIs.
  5. 续租
  6. 便捷认证
    Vault支持token认证,方便安全

Vault 还可以自定义并连接到各种插件以扩展其功能。这一切都可以通过网络图形界面进行控制。