Istio 和 Hashicorp Vault:使用 SPIFFE 通过 Vault 进行身份验证

Istio and Hashicorp Vault: using SPIFFE to authenticate with Vault

我是 Hashicorp Vault 的新手。我想知道是否有一种方法可以利用 SPIFFE 协议自动对 Vault 进行身份验证,因此基于 Vault 客户端的 mTLS 证书,Kubernetes/Istio 中的工作负载可以作为特定用户(实体?)访问 Vault 或者团体。发出请求的 k8s 工作负载只能根据其 SPIFFE 身份的 Vault 权限访问 Vault 机密。

我希望不需要传递 Vault 凭据(令牌、密码等),并且只在 mTLS 连接和 SPIFFE 协议上授予访问权限。这样的事情可能吗?如果 Vault 位于 Kubernetes 集群之外(因此不能有 Istio sidecar),有什么选择?

如果我的要求不可能实现,一个不太理想的解决方案是更新应用程序代码,以基于 pod 的 k8s 服务帐户以某种方式使用 Vault 进行身份验证。 Vault 提供了哪些选项来执行此类操作?有什么好的资源吗?

感谢您提供的任何建议。

我不知道如何使用 SPIFFE 进行 Vault 身份验证,但我同意这可能很有趣(我不确定 https://www.vaultproject.io/docs/auth/cert 是否有帮助,但我从未尝试过)。

据我所知,https://www.vaultproject.io/docs/auth/kubernetes 中描述了将 Kubernetes 与 Hashicorp Vault 集成的一般方法。 Vault 部署在哪里并不重要:它可以在同一个 Kubernetes 集群中,在同一个服务网格中,或者它可以是一个完全不相关的实体(例如,部署在某个随机 VM 上的专用实例)。

您基本上是在 Vault 上定义角色和策略,它们映射到特定的 kubernetes 服务帐户和命名空间,然后 Kubernetes pod 将能够使用与其服务帐户关联的 JWT 进行身份验证。

设置 Vault 并且您可以使用 Kubernetes pods 进行身份验证后,您可以对其进行任何包装。人们试图以不同的方式做到这一点,但一种可能性是 https://www.hashicorp.com/blog/injecting-vault-secrets-into-kubernetes-pods-via-a-sidecar . Personally, I'm using https://github.com/postfinance/vault-kubernetes 因为它非常符合我的需要。

重要的部分是设置 Vault 以正确支持 Kubernetes:在进入任何试图获取机密的 Kubernetes 包之前,请务必先仔细检查。