我对 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 小时后将无法再通过数据库进行身份验证。
换句话说,一小时后,连接丢失,除了重新启动微服务之外,似乎没有其他方法可以获取新的数据库凭据。那么如果有以下问题:
我的猜测是 Vault 与 Spring Boot 的预期用途与我的理解不同。
考虑一个简单的用例,我想将产品评级作为事件存储在事件存储中。
我可以使用两种不同的方法:
对于这两种方法,我都出现了一些架构问题:
使用轴突时:
使用卡夫卡时:
我不知道 SO 是否是此类问题的首选论坛...我只是想知道您在这个特定用例中推荐什么作为最佳实践。期待您的反馈,并随时指出我在之前的问题中遗漏的其他想法。
编辑@12/11/2020:我刚刚找到了一个相关的讨论,其中包含与我的问题相关的有用信息。
两个简单的问题:
mvnw spring-boot:build-image?我正在为 Spring Boot 应用程序构建 Docker 映像。该应用程序依赖于其他第三方服务,这些服务在映像构建过程中不一定(也不应该)可用。因此,映像构建失败,因为 Spring Boot 应用程序在启动时检查这些第三方依赖项并尝试重新连接,直到它们可用。旁注:后者无法更改,因为它内置在正在使用的第三方服务的框架中。
我也不明白为什么应该实际启动应用程序来构建 Docker 映像。
感谢您的回复以及可能的其他背景信息。
spring-boot ×2
apache-kafka ×1
architecture ×1
axon ×1
buildpack ×1
cqrs ×1
docker ×1
maven ×1