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
,、profile
credential
、)proxy
retry
中,spring.cloud.azure.xxx
则使用它们。 请参阅 Spring Cloud Azure 配置 ,获取有关这些常见属性的详细信息。 - 请参阅 Spring Cloud Azure 配置属性 ,获取有关嵌套属性的详细信息。
示例
请参阅 GitHub 上的 spring-cloud-azure-starter-keyvault-secrets 示例。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈