如何检索 Vault 属性以在 application.yml 中配置 MongoDB 属性?

Posted

技术标签:

【中文标题】如何检索 Vault 属性以在 application.yml 中配置 MongoDB 属性?【英文标题】:How to retrieve vault properties to configure MongoDB properties in application.yml? 【发布时间】:2019-12-06 12:49:07 【问题描述】:

我想从保管库中检索一些秘密(数据库用户名/密码)并使用 spring.data.mongodb 配置 MongoDB。

我在 spring-boot-starter-data-mongodb 应用程序中完成了保险库集成。

硬编码值工作正常,尝试使用 $vault.application-name.property_name 获取保管库属性

这是我在application.yml中提供的配置:

spring:
  data:
    mongodb: 
      host: 10.xx.xxx.xxx
      port: 27017
      database: $vault.application-name.database-name
      username: $vault.application-name.database-username
      password: $vault.application-name.database-password
      authentication-database: $vault.application-name.authentication-database

考虑到上述配置是否正确,我应该从保管库接收这些属性,但目前,应用程序在执行时抛出以下异常:

2019-07-29 11:28:20,683 [iption='null'-localhost:27017] org.mongodb.driver.cluster INFO Exception in monitor thread while connecting to server localhost:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
    at com.mongodb.connection.SocketStream.open(SocketStream.java:63) ~[mongodb-driver-core-3.4.3.jar:?]
    at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115) ~[mongodb-driver-core-3.4.3.jar:?]
    at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:113) [mongodb-driver-core-3.4.3.jar:?]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_181]
Caused by: java.net.ConnectException: Connection refused (Connection refused)
    at java.net.PlainSocketImpl.socketConnect(Native Method) ~[?:1.8.0_181]
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[?:1.8.0_181]
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[?:1.8.0_181]
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[?:1.8.0_181]
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[?:1.8.0_181]
    at java.net.Socket.connect(Socket.java:589) ~[?:1.8.0_181]
    at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:57) ~[mongodb-driver-core-3.4.3.jar:?]
    at com.mongodb.connection.SocketStream.open(SocketStream.java:58) ~[mongodb-driver-core-3.4.3.jar:?]
    ... 3 more

【问题讨论】:

你读过这篇文章An Intro to Spring Cloud Vault吗? 是的,但我想不出正确的语法。 【参考方案1】:

与Spring Cloud Vault 集成时,理想情况下,唯一需要提供的是role 名称。 除了 Spring Cloud Vault 与 Spring Boot 之外,我不会建议任何其他集成方法,因为您需要在 Spring Boot 初始化 MongoDB 配置之前获取属性,这可能会变得非常棘手。

请参阅docs 以获取更多参考,这里是mysql with Spring Cloud Vault 示例的链接。

【讨论】:

以上是关于如何检索 Vault 属性以在 application.yml 中配置 MongoDB 属性?的主要内容,如果未能解决你的问题,请参考以下文章

无法将存储的 Vault 机密检索到 Kubernetes 中的 Springboot 应用程序

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

如何使用 jQuery 检索单击元素的属性? [复制]

使用返回“权限被拒绝”的 csi 驱动程序从 Vault 中检索机密

无法使用 azure JavaScript 函数和 Key Vault 机密检索 cosmosDB 数据

如何从 vimeo 帐户检索视频源以在 exoplayer android 中播放?