Spring Boot如何从Azure Key Vault获取keys/secrets及配置问题解决
Spring Boot 正确对接Azure Key Vault 获取密钥/密钥对操作指南
仅配置Key Vault URI无法正常运行的核心原因是Azure Key Vault默认禁止匿名访问,缺少合法身份验证凭证会导致应用启动阶段拉取配置失败,后续接口请求自然无法正常处理。
1. 引入对应依赖
首先需要在项目中引入Azure Key Vault的Spring Boot Starter依赖,以Maven为例:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>azure-spring-boot-starter-keyvault-secrets</artifactId> <version>匹配当前Spring Boot版本的最新稳定版</version> </dependency>
Gradle配置参考:
implementation 'com.azure.spring:azure-spring-boot-starter-keyvault-secrets:<版本号>'
2. 补充完整配置(核心)
除了Key Vault URI之外,还需要配置身份验证信息,根据部署场景分为两种方式:
- 本地开发场景:使用Azure服务主体验证,需要提前在Azure AD中创建服务主体,并给该服务主体配置Key Vault的
Secret Get、Secret List访问权限,配置文件示例如下:
azure: keyvault: secret: property-sources: - endpoint: https://<你的KeyVault名称>.vault.azure.com/ # 国际版Azure后缀为.com,国内Azure后缀为.cn client: id: <服务主体客户端ID> secret: <服务主体客户端密钥> tenant-id: <Azure租户ID>
- 生产部署到Azure资源场景:如果应用部署在Azure的App Service、VM、AKS等资源上,直接开启对应资源的系统分配托管身份,给该托管身份配置Key Vault的访问权限即可,无需在配置文件中硬编码client-id和client-secret,SDK会自动获取环境内的身份凭证。
3. 读取Key Vault中存储的内容
配置完成后,你可以用两种方式读取存储的密钥/配置:
- 使用
@Value注解直接注入,比如你在Key Vault中存储了名为db-password的密钥,代码写法如下:
@Value("${db-password}") private String dbPassword;
- 注入
Environment对象后调用方法读取:
@Autowired private Environment environment; // 调用时获取 String dbPwd = environment.getProperty("db-password");
4. 异常排查注意项
如果配置完成后仍无法正常启动,可以按以下顺序排查:
- 确认服务主体/托管身份的Key Vault访问策略配置正确,对应权限已授予
- 确认应用所在网络可以访问Key Vault,Key Vault防火墙没有拦截应用的访问IP
- 确认Key Vault的URI拼写正确,国内/国际版的域名后缀没有混淆
- 确认依赖版本和当前项目的Spring Boot版本匹配,不存在版本冲突
内容的提问来源于stack exchange,提问作者Srinivas
相关产品推荐
相关产品推荐

