Spring Boot 始终对两个单独的应用程序使用来自 Azure Key Vault 的相同 SPRING-DATASOURCE-USERNAME 和 SPRING-DATASOURCE-PASSWORD

问题描述 投票:0回答:1

我已成功配置一个 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 错误而启动失败。

spring-boot jpa azure-keyvault
1个回答
0
投票

我尝试删除应用程序 1 使用的密钥,现在两个应用程序都因错误的用户 ID.密码错误而启动失败。

Spring Boot 没有任何默认逻辑来自动为

SPRING-DATASOURCE-USERNAME
SPRING-DATASOURCE-PASSWORD
等属性选择特定的键名称。属性值根据配置中的占位符
${...}
进行解析。

  • 如果 Azure Key Vault 和 Spring Boot 配置仍然存在问题,您可以尝试另一种方法,直接在
    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>

© www.soinside.com 2019 - 2024. All rights reserved.