使用 Spring Cloud Vault 在 Spring Boot 应用程序中自动更新 AWS 凭证

Posted

技术标签:

【中文标题】使用 Spring Cloud Vault 在 Spring Boot 应用程序中自动更新 AWS 凭证【英文标题】:Automatically renew AWS credentials in a Spring Boot application using Spring Cloud Vault 【发布时间】:2019-03-27 18:05:54 【问题描述】:

我正在尝试创建一个定期从 AWS S3 获取数据的 Spring Boot 应用程序。

AWS S3 凭证在应用程序启动时使用 Spring Cloud Vault 从 Vault 中获取。

我的问题是由于 Vault 政策,AWS S3 凭证的使用寿命有限,因此我必须不时重新启动我的应用程序才能从 Vault 获取新凭证

有没有办法使用这些凭据自动重启 bean?

【问题讨论】:

【参考方案1】:

TL;DR

不,没有自动化,但你可以自己做。

更长的阅读时间

Spring Boot 和 Spring Cloud 并不是真正用于不间断地对配置应用持续更新。 Spring Cloud Config 附带Refresh Scope 支持,允许使用@RefreshScope 注释bean 并触发重新初始化的bean 的刷新。这种方法需要与消息总线集成或触发刷新端点。

另一种仅限于 AWS 功能的替代方案是提供自己的 AWSCredentialsProvider 实施,该实施由 Vault PropertySource 支持,该 Vault PropertySource 将轮换应用于您的凭证。这需要您提供一些与VaultConfigurer 集成的代码,甚至直接通过SecretLeaseContainer 来获取秘密生命周期事件回调。见here for an integration example。

有一个ticket asking for the same question 包含为什么这种模式不能广泛适用的背景。

【讨论】:

以上是关于使用 Spring Cloud Vault 在 Spring Boot 应用程序中自动更新 AWS 凭证的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Vault 和带有 Vault 后端的 Spring Cloud Config 之间的区别

使用Spring Cloud Config进行分布式配置:Vault 后端

使用 Spring Cloud Vault 在 Spring Boot 应用程序中自动更新 AWS 凭证

引起:java.lang.IllegalArgumentException:令牌(spring.cloud.vault.token)不能为空 - Hashicorp Vault

为生产配置 Spring Cloud Config Server 和 Spring Cloud Vault

Spring Cloud Config 和 Spring Cloud Vault 的初始化顺序