我已成功配置一个 Spring Boot 应用程序以使用 Azure Key Vault。 Key Vault 提供数据库的用户名和密码。现在,当我配置另一个类似的应用程序连接到同一数据库 URL 上托管的单独数据库模式时,这次我在同一 Key Vault 上使用后缀为“APP2”的密钥名称保存了用户 ID 和密码。
奇怪的是,应用程序 2 以某种方式连接到应用程序 1 使用的数据库,这是因为它使用应用程序 1 的凭据,即键 SPRING-DATASOURCE-USERNAME 和 SPRING-DATASOURCE-PASSWORD 的值
是否有任何默认的 spring boot/jps 逻辑始终用于 SPRING-DATASOURCE-PASSWORD 这些键。
spring:
datasource:
url: <datasource url>
type: com.zaxxer.hikari.HikariDataSource
username: "${SPRING-DATASOURCE-USERNAME}"
password: "${SPRING-DATASOURCE-PASSWORD}"
cloud:
azure:
keyvault:
secret:
property-sources[0]:
credential:
managed-identity-enabled: true
endpoint: <key vault url>
这是应用程序 2 的 yaml
spring:
datasource:
url: <datasource url>
type: com.zaxxer.hikari.HikariDataSource
username: "${SPRING-DATASOURCE-USERNAME-APP2}"
password: "${SPRING-DATASOURCE-PASSWORD-APP2}"
cloud:
azure:
keyvault:
secret:
property-sources[0]:
credential:
managed-identity-enabled: true
endpoint: <key vault url>
我尝试从 Key Vault 中删除应用程序 2 密钥,该应用程序仍然可以运行并连接到应用程序 1 数据源。我尝试删除应用程序 1 使用的密钥,现在两个应用程序都因用户 id.password 错误而启动失败。
我尝试删除应用程序 1 使用的密钥,现在两个应用程序都因错误的用户 ID.密码错误而启动失败。
Spring Boot 没有任何默认逻辑来自动为
SPRING-DATASOURCE-USERNAME
和 SPRING-DATASOURCE-PASSWORD
等属性选择特定的键名称。属性值根据配置中的占位符 ${...}
进行解析。
application.properties
或 application.yaml
文件中显式指定密钥名称,而不是依赖 Spring Boot 属性占位符。此方法可以帮助确保每个应用程序从 Azure Key Vault 检索正确的机密。application.yaml
应用 1:
spring:
datasource:
url: <datasource url>
type: com.zaxxer.hikari.HikariDataSource
username: ${spring.datasource.username}
password: ${spring.datasource.password}
cloud:
azure:
keyvault:
secret:
spring.datasource.username: <Azure Key Vault secret name for username>
spring.datasource.password: <Azure Key Vault secret name for password>
application.yaml
应用 2:
spring:
datasource:
url: <datasource url>
type: com.zaxxer.hikari.HikariDataSource
username: ${spring.datasource.username.app2}
password: ${spring.datasource.password.app2}
cloud:
azure:
keyvault:
secret:
spring.datasource.username.app2: <Azure Key Vault secret name for username for App2>
spring.datasource.password.app2: <Azure Key Vault secret name for password for App2>