HashiCorp Vault 动态机密和 Spring Boot

KDW*_*KDW 5 spring-boot microservices docker-compose hashicorp-vault

我对 HashiCorp Vault 用于为 Spring Boot 动态提供数据库机密的用例感到困惑。假设您有两个微服务:一个包含应用程序逻辑,另一个运行数据库引擎。第一个显然需要对数据库进行身份验证,这就是动态秘密发挥作用的地方。Vault 可以向第一个微服务提供此类凭据,因此您不必在管理两个微服务的 docker-compose 文件中使用 ENV 变量等。 在此输入图像描述

该应用程序可以是依赖 Spring Cloud Vault 的 Spring Boot 微服务来处理与 HashiCorp Vault 的通信以进行凭证管理。微服务启动时会要求 Vault 提供临时数据库凭据(在本例中它们持续一小时)。在此一小时的时间间隔内,应用程序可以连接到数据库并执行任何需要执行的操作。一小时后,凭据将过期并且不允许进行任何通信。

Spring Boot Cloud Vault 文档提到

当达到最大租用时间时,Spring Cloud Vault 不支持获取新凭据并使用它们配置数据源。也就是说,如果 Vault 中数据库角色的 max_ttl 设置为 24h,则意味着应用程序启动 24 小时后将无法再通过数据库进行身份验证。

换句话说,一小时后,连接丢失,除了重新启动微服务之外,似乎没有其他方法可以获取新的数据库凭据。那么如果有以下问题:

  1. 如果每次 TTL 过期时您(看似)被迫重新启动整个应用程序,那么在此特定示例中使用 Vault 的附加价值是什么?
  2. 当您使用静态机密时,这是否同样适用?
  3. 不改变微服务代码能解决这个问题吗?(K8S、Istio 等?)

我的猜测是 Vault 与 Spring Boot 的预期用途与我的理解不同。

KDW*_*KDW 0

本文介绍了 4 种可能的解决方案来缓解问题中描述的问题。作为解决问题的有效方法,应该采用更通用的(指“动态秘密的大量轮换”方法)和不太激进的(指“连接丢失时重新启动服务”方法)。