spring - 使用 spring-cloud-vault 访问保管库 secret 并在 application.properties 中使用它

标签 spring spring-boot parameter-passing hashicorp-vault application.properties

我有一个托管在 Openshift 中的 Vault 服务器,我必须将 Vault 中的 secret 访问到我的 Spring 应用程序中。 我的 bootstrap.yml 如下所示:

spring:
  application:
    name: application-name
  profiles: dev
  cloud:
    vault:
      fail-fast: true
      host: HOST
      port: 443
      scheme: https
      token: MY_TOKEN
      authentication: TOKEN
      kv:
        enabled: true
        backend: secret
        profile-separator: '/'
        application-name: application-name

我检查了Vault日志并能够从Spring应用程序连接到Vault。

我可以使用值属性源访问 secret 。 但是,我想将 key 的值填充到 application.properties 中以更新 spring.datasource.username 和 spring.datasource.password 等属性。

有没有办法直接从application.properties访问 secret ?

最佳答案

TL; DR:是的,您可以在application.(properties|yml)中使用Vault属性。不建议在 bootstrap.(properties.yml) 中使用这些。

Spring Cloud 附带了一个 Bootstrap 上下文,配置库(例如 Spring Cloud Consul、Spring Cloud Config 和 Spring Cloud Vault)在其中初始化。这些集成获取配置并将其作为父 PropertySource 提供给您的应用程序。在属性绑定(bind)期间以及使用 Environment 解析属性值时,Spring Boot 会考虑这些(您可以选择以最高/最低优先级使用这些 PropertySource)。

引导应用程序时,通常首先发生的事情之一就是 @ConfigurationProperties 对象中的属性绑定(bind)。加载 bootstrap.(properties|yml) 时,通常 Spring Cloud Config 集成尚未运行,因此此时您看不到这些库贡献的属性。因此,引导上下文和实际应用程序上下文之间存在分离。

关于spring - 使用 spring-cloud-vault 访问保管库 secret 并在 application.properties 中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59561774/

相关文章:

java - Spring3/Hibernate3/TestNG : some tests give LazyInitializationException, 有些没有

java - 在java8 Collectors.toMap中,keyMapper值应该来自另一个常量映射的键

c - C 中的按名称传递实现

java - 为什么在启动时找到相同的属性文件,但后来在 Spring Java 应用程序中却找不到?

java - 从构造函数中初始化实例变量时出现 Mockito 错误

java - 健康端点仅显示 "status: up"并且不显示敏感信息

java - MongoDB-Spring QuerydslPredicateExecutor问题

c# - 如何将参数作为单个对象传递?

python - 传递变量、创建实例、 self 、类的机制和用法 : need explanation

MySQL从一张表计算百分比