首页 > 解决方案 > Istio 和 Hashicorp Vault:使用 SPIFFE 对 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 提供哪些选项来执行此类操作?有没有这方面的好资源?

我很感激你提供的任何建议。

标签: authenticationkubernetesistiohashicorp-vaultmtls

解决方案


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

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

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

设置 Vault 并且您可以使用 Kubernetes pod 进行身份验证后,您可以在其周围使用任何包装器。人们试图以不同的方式做到这一点,但一种可能性是https://www.hashicorp.com/blog/injecting-vault-secrets-into-kubernetes-pods-via-a-sidecar。就个人而言,我使用的是https://github.com/postfinance/vault-kubernetes,因为它非常适合我的需求。

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


推荐阅读