最近了解了HashiCorp Vault以及它与Kubernetes结合的用法。我发现了两篇非常棒的博客文章,介绍如何使用 HashiCorp Vault 通过使用 init 容器和共享卷(post1、post2)动态生成信用。 Kubernetes 还提供了一种使用 Kubernetes 机密处理凭证的好方法,这也使人们能够通过环境变量读取凭证。因此,它为秘密存储提供了一个很好的抽象。
我的问题是,HashiCorp Vault 是否也可用于用凭证填充 Kubernetes Secrets?如何实现?
正如 @Rico 提到的那样,暴露 Vault 和 Kubernetes 中的秘密就违背了使用 Vault 的初衷。
使用 Vault,数据会被加密(传输/休息),并且您可以对谁可以访问哪些数据提供访问粒度控制。将 Vault 内的数据暴露给 Kubernetes Secret 对象(基本上仅限于 base64 编码)将在很大程度上抵消 Vault 的最大好处,即保护您的基础设施并成为负责管理您的机密的单一实体。
Vault 是一个很棒的工具,但在我看来,对于非开发配置来说它可能会变得更加复杂,因为你必须附加 Consul 之类的东西,这样你才能拥有持久的后端存储,因此利用架构分布式模式例如 sidecar 模式 也可能过于杀伤力,根本不推荐。
所以我绝对明白,尝试找到一种方法来将 Pod 所需的秘密信息放在旁边可能看起来很诱人,特别是以简单的方式,但如果完全不加密,它肯定会达不到目的。
既然解决了这个问题,为什么不简单地创建一个 Vault 控制器,它是负责与 Vault 交互的实体,并且负责查询 Vault 中的包装令牌,在之后可以暂时授予对某些秘密信息的访问权限。被 Pod 内的 init 容器打开?这是因为启动 Pod 需要额外的时间,因为我们需要执行一些早期调用才能检索 Wrapped Token?或者是由于每当需要从 Vault 查询秘密数据时都必须执行额外的调用而导致额外的延迟?
每当我想到集成 Kubernetes 和 Vault 的想法时,我通常会想到由 Kelsey Hightower 创建的以下原型,解释如下这里。
我的问题是,HashiCorp Vault 是否也可用于使用凭证填充 Kubernetes Secret,以及如何实现?
是和不是。
否:Kubernetes 或 Vault 方面均不提供支持。仅支持使用服务帐户通过 Vault 进行身份验证。一个更大的问题是,为什么您希望 Vault 填充 Kubernetes 机密中的机密,因为它们在 Vault 中已经“安全”了。
是的:您必须构建自己的自动化系统。你所有的秘密都是这样的:
kubectl create secret generic mynicepass2 --from-literal=key1=`vault read <your-secret>`
考虑到5年过去了,一些较新的东西:
当然,您需要考虑 Andre 提到的事情:您最终将得到带有该秘密数据的 Kubernetes 秘密(而不是将秘密数据注入到 POD 中)
HashiCorp 支持的三种 HashiCorp Vault 和 Kubernetes 集成方法的比较提供了Vault-agent sidecar、CSI 提供程序和 Vault Secrets Operator 之间的比较。
以 HashiCorp Vault 作为提供商的外部秘密。如果您同时使用不同的秘密提供者,可能特别相关