Vault 直接集成或通过微服务

Vault direct integration or via a microservice

我正在使用 Hashicorp Vault 在 KV Secrets 引擎中存储多个秘密,其中之一是数据库连接字符串 - 用户名、密码、主机 ip 和端口。我有多个微服务,需要使用这个db secret来连接db。

请说明以下哪些集成模式有效:

  1. 与 Vault 直接集成:每个微服务都将与 Vault 直接连接以获取操作所需的秘密。所有微服务都将配置保险库令牌(在 K8s 机密中)以访问保险库。
  2. 通过另一个微服务检索秘密:是否应该有一个抽象层,即一个单独的微服务用于 Vault 交互,所有其他微服务将调用此 vault-microservice 的 API 来获取他们想要的秘密。保险库令牌(在 K8s Secrets 中)将仅由一个微服务访问。

另一个微服务是一个抽象层。这是额外的工作,可能允许您在将来更改机密提供程序。

除非您可以证明编写和维护该抽象层是合理的(因为您想在某些部署中使用 Vault 而在其他部署中使用 AWS Secrets Manager),否则请不要打扰。

另一个问题是,虽然Vault的KV store很常见,还有其他几种实现方式,但如果要用Transit, PKI or SSH CA怎么办?这些服务存在于其他地方(例如在 AWS 中),但它们不具有对等功能。您可能不想在抽象层中支持这些差异。

一种允许您将实现与代码分离的低成本替代方案是在代码中使用简单的 KVSecrets class 包装 Vault API class,一个software design pattern know as the facade。但请记住,除非您使用两项服务测试 class,否则您无法保证有一天可以迁移到另一项服务。

所以考虑到这一切,直接调用API或者use the Vault library for your programming language