HashiCorp Vault 用于填充 kubernetes 秘密

问题描述 投票:0回答:3

最近了解了HashiCorp Vault以及它与Kubernetes结合的用法。我发现了两篇非常棒的博客文章,介绍如何使用 HashiCorp Vault 通过使用 init 容器和共享卷(post1post2)动态生成信用。 Kubernetes 还提供了一种使用 Kubernetes 机密处理凭证的好方法,这也使人们能够通过环境变量读取凭证。因此,它为秘密存储提供了一个很好的抽象。

我的问题是,HashiCorp Vault 是否也可用于用凭证填充 Kubernetes Secrets?如何实现?

kubernetes hashicorp-vault kubernetes-secrets
3个回答
6
投票

正如 @Rico 提到的那样,暴露 Vault 和 Kubernetes 中的秘密就违背了使用 Vault 的初衷。

使用 Vault,数据会被加密(传输/休息),并且您可以对谁可以访问哪些数据提供访问粒度控制。将 Vault 内的数据暴露给 Kubernetes Secret 对象(基本上仅限于 base64 编码)将在很大程度上抵消 Vault 的最大好处,即保护您的基础设施并成为负责管理您的机密的单一实体。

Vault 是一个很棒的工具,但在我看来,对于非开发配置来说它可能会变得更加复杂,因为你必须附加 Consul 之类的东西,这样你才能拥有持久的后端存储,因此利用架构分布式模式例如 sidecar 模式 也可能过于杀伤力,根本不推荐。

  • 但有了它,您就可以在与“主”容器相同的 Pod 中“生存”一个 Vault 实例,从而利用 Vault 提供的加密服务,但我们会将 Vault 的生命周期与 Pod 的生命周期联系起来。
  • 使用这种方法,我们需要在每个 Pod 上都有一个 Vault 实例,以防我们计划必须访问秘密信息,这只会使系统变得极其复杂。 通过这种方法,我们可以将多个保管库实例上的每个对象所需的秘密信息分开,从而将我们的基础设施的秘密信息传播到多个地方,但我们不断增加管理基础设施的挑战。

所以我绝对明白,尝试找到一种方法来将 Pod 所需的秘密信息放在旁边可能看起来很诱人,特别是以简单的方式,但如果完全不加密,它肯定会达不到目的。

既然解决了这个问题,为什么不简单地创建一个 Vault 控制器,它是负责与 Vault 交互的实体,并且负责查询 Vault 中的包装令牌,在之后可以暂时授予对某些秘密信息的访问权限。被 Pod 内的 init 容器打开?这是因为启动 Pod 需要额外的时间,因为我们需要执行一些早期调用才能检索 Wrapped Token?或者是由于每当需要从 Vault 查询秘密数据时都必须执行额外的调用而导致额外的延迟?

每当我想到集成 Kubernetes 和 Vault 的想法时,我通常会想到由 Kelsey Hightower 创建的以下原型,解释如下这里


3
投票

我的问题是,HashiCorp Vault 是否也可用于使用凭证填充 Kubernetes Secret,以及如何实现?

是和不是。

否:Kubernetes 或 Vault 方面均不提供支持。仅支持使用服务帐户通过 Vault 进行身份验证。一个更大的问题是,为什么您希望 Vault 填充 Kubernetes 机密中的机密,因为它们在 Vault 中已经“安全”了。

是的:您必须构建自己的自动化系统。你所有的秘密都是这样的:

kubectl create secret generic mynicepass2 --from-literal=key1=`vault read <your-secret>`

2
投票

考虑到5年过去了,一些较新的东西:

当然,您需要考虑 Andre 提到的事情:您最终将得到带有该秘密数据的 Kubernetes 秘密(而不是将秘密数据注入到 POD 中)

  1. Vault CSI 提供商

  2. Vault 秘密操作员

HashiCorp 支持的三种 HashiCorp Vault 和 Kubernetes 集成方法的比较提供了Vault-agent sidecar、CSI 提供程序和 Vault Secrets Operator 之间的比较。

  1. 以 HashiCorp Vault 作为提供商的外部秘密。如果您同时使用不同的秘密提供者,可能特别相关

  2. 银行金库变异网络钩子

© www.soinside.com 2019 - 2024. All rights reserved.