Spring Cloud Azure 机密管理

本文适用于: ✔️版本 4.14.0 ✔️ 版本 5.8.0

Spring Cloud Azure 构造PropertySource用于保存存储在 Azure 密钥库 机密中的机密。

依赖项设置

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-keyvault-secrets</artifactId>
</dependency>

提示

我们还提供支持spring-cloud-azure-starter-keyvault密钥库的所有功能。 如果选择使用它, spring.cloud.azure.keyvault.enable 则为要配置的属性,默认值为 true。 然后 spring.cloud.azure.keyvault.<keyvault-service>.enable ,可以使用此功能来禁用不需要的服务。

基本用法

如果要通过 client-id 以下 client-secret属性进行身份验证,需要以下属性:

Configuration Properties

spring:
  cloud:
    azure:
      keyvault:
        secret:
          property-sources:
            - name: key-vault-property-source-1
              endpoint: ${ENDPOINT_1}
            - name: key-vault-property-source-2
              endpoint: ${ENDPOINT_2}

Java 代码

@SpringBootApplication
public class SampleApplication implements CommandLineRunner {

    @Value("${sampleProperty1}")
    private String sampleProperty1;
    @Value("${sampleProperty2}")
    private String sampleProperty2;
    @Value("${samplePropertyInMultipleKeyVault}")
    private String samplePropertyInMultipleKeyVault;

    public static void main(String[] args) {
        SpringApplication.run(SampleApplication.class, args);
    }

    public void run(String[] args) {
        System.out.println("sampleProperty1: " + sampleProperty1);
        System.out.println("sampleProperty2: " + sampleProperty2);
        System.out.println("samplePropertyInMultipleKeyVault: " + samplePropertyInMultipleKeyVault);
    }
}

高级用法

属性名称中的特殊字符

密钥库机密名称仅支持字符。[0-9a-zA-Z-] 有关详细信息,请参阅Azure 密钥库 密钥、机密和证书Vault 名称和对象名称部分。 如果属性名称包含其他字符,则可以使用以下部分中所述的解决方法。

- 机密名称中使用,而不是 . 在机密名称中使用

. 机密名称不支持。 如果应用程序具有包含的属性名称.,例如spring.datasource.url,在 Azure 密钥库中保存机密时将替换为.-该名称。 例如,保存在 spring-datasource-url Azure 密钥库。 在应用程序中,仍可用于 spring.datasource.url 检索属性值。

注意

此方法不能满足这样的 spring.datasource-url要求。 在密钥库中保存spring-datasource-url时,仅spring.datasource.url支持检索spring-datasource-url属性值,但spring.datasource-url不受支持。 若要处理这种情况,请参阅 “使用属性占位符 ”部分。

使用属性占位符

例如,假设你在 application.properties 文件中设置此属性

property.with.special.character__=${propertyWithoutSpecialCharacter}

应用程序将获取 propertyWithoutSpecialCharacter 密钥名称并将其值 property.with.special.character__分配给 。

区分大小写

若要启用区分大小写的模式,可以设置以下属性:

spring.cloud.azure.keyvault.secret.property-sources[].case-sensitive=true

不检索密钥库中的所有机密

如果在密钥库中存储了 1000 个机密,并且只想使用其中 3 个机密。 可以按 spring.cloud.azure.keyvault.secret.property-sources[].secret-keys. 列出 3 个机密名称。

设置刷新间隔

默认情况下,机密 KeyVaultPropertySource 将每隔 30 分钟刷新一次。 可以按 spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval. 配置时间。 例如: spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval=60m 表示每隔 60 分钟刷新一次。 设置为 0 禁用自动刷新。

PropertySource 优先级

如果多个 PropertySources 中存在键,则会由优先级决定。

  • 如果 PropertySource 列表中没有 SystemEnvironmentPropertySource ,则 KeyVaultPropertySource 采用最高优先级。
  • 如果 PropertySource 列表中存在 SystemEnvironmentPropertySource ,则 SystemEnvironmentPropertySource 优先级高于 KeyVaultPropertySource。 这意味着可以使用环境变量替代应用程序中的密钥库机密值。
  • 如果 PropertySource 列表中有多个 KeyVaultPropertySource,则定义顺序为优先级顺序。 以上面的示例为例, key-vault-property-souece-1 优先级高于 key-vault-property-souece-2

所有可配置属性

properties 默认值 说明
spring.cloud.azure.keyvault.secret.property-enabled true 是否启用密钥库属性源。
spring.cloud.azure.keyvault.secret.property-sources[].name 此属性源的名称。
spring.cloud.azure.keyvault.secret.property-sources[].endpoint Azure 密钥库终结点。
spring.cloud.azure.keyvault.secret.property-sources[].case-sensitive false 密钥是否区分大小写。
spring.cloud.azure.keyvault.secret.property-sources[].secret-keys 此属性源支持的密钥。 如果缺少此属性,则检索所有密钥。
spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval 30 分钟 刷新所有密钥库机密的时间间隔。
spring.cloud.azure.keyvault.secret.property-sources[].service-version 发出 API 请求时使用的机密服务版本。
spring.cloud.azure.keyvault.secret.property-sources[].client 客户端相关属性。
spring.cloud.azure.keyvault.secret.property-sources[].credential 凭据相关属性。
spring.cloud.azure.keyvault.secret.property-sources[].profile 配置文件相关属性。
spring.cloud.azure.keyvault.secret.property-sources[].proxy 代理相关属性。
spring.cloud.azure.keyvault.secret.property-sources[].retry 重试相关属性。
  • 请参阅使用 Microsoft Entra ID 授权访问权限,确保安全主体已获得访问 Azure 密钥库 机密的足够权限。
  • 如果未在配置spring.cloud.azure.keyvault.secret.property-sources[].xxx通用属性(如 client,、profilecredential、)proxyretry中,spring.cloud.azure.xxx则使用它们。 请参阅 Spring Cloud Azure 配置 ,获取有关这些常见属性的详细信息。
  • 请参阅 Spring Cloud Azure 配置属性 ,获取有关嵌套属性的详细信息。

示例

请参阅 GitHub 上的 spring-cloud-azure-starter-keyvault-secrets 示例