如何无需Azure CLI实现Spring Boot集成Azure Key Vault?
无需Azure CLI即可运行集成Azure Key Vault的Spring Boot应用
针对你的Spring Boot 3.1.5应用依赖Azure CLI登录才能访问Key Vault的问题,有几种可行的替代方案,完全摆脱CLI依赖:
方案1:用Azure AD服务主体(本地/非Azure环境通用)
- 在Azure AD中创建一个服务主体,给它分配Key Vault的**
Key Vault Secrets User角色**(只给读取机密的权限,遵循最小权限原则) - 记下这个服务主体的三个核心信息:客户端ID、客户端密钥、租户ID
- 修改
application.properties,替换掉原来依赖CLI的配置,直接配置服务主体凭据:
azure.keyvault.uri=https://<你的密钥保管库名称>.vault.azure.net/ azure.keyvault.client-id=<服务主体客户端ID> azure.keyvault.client-secret=<服务主体客户端密钥> azure.keyvault.tenant-id=<你的Azure租户ID>
配置完成后启动应用,Spring Boot会直接通过服务主体身份验证访问Key Vault,再也不用依赖Azure CLI登录。
方案2:用系统托管标识(仅Azure托管环境适用)
如果你的应用部署在Azure云服务(比如App Service、AKS、VM)里,这是最省心的方案:
- 打开Azure门户,找到你的应用托管资源(比如App Service),进入「标识」选项卡,启用系统分配的标识
- 回到Key Vault的「访问控制(IAM)」页面,把刚才启用的托管标识添加进去,分配
Key Vault Secrets User角色 - 不用修改任何配置文件,Spring Boot会自动识别托管标识,完成身份验证——全程不用管任何凭据,也不需要Azure CLI
方案3:用环境变量传递凭据(避免配置文件明文存密钥)
如果不想在application.properties里明文写客户端密钥,可以把服务主体信息通过环境变量传递:
- Windows系统:
set AZURE_KEYVAULT_CLIENT_ID=<客户端ID> set AZURE_KEYVAULT_CLIENT_SECRET=<客户端密钥> set AZURE_KEYVAULT_TENANT_ID=<租户ID> set AZURE_KEYVAULT_URI=<Key Vault URI>
- Linux/macOS系统:
export AZURE_KEYVAULT_CLIENT_ID=<客户端ID> export AZURE_KEYVAULT_CLIENT_SECRET=<客户端密钥> export AZURE_KEYVAULT_TENANT_ID=<租户ID> export AZURE_KEYVAULT_URI=<Key Vault URI>
启动应用时,Spring Boot会自动读取这些环境变量,完成Key Vault的身份验证,同样不需要Azure CLI。
注意事项
- 服务主体的权限要卡准,只给必要的读取权限,别给多余权限增加风险
- 客户端密钥是敏感信息,生产环境别硬编码到代码或配置文件里,优先用托管标识或者环境变量
- 托管标识是Azure环境下最安全的方案,不用手动管理凭据,Azure会自动维护
内容的提问来源于stack exchange,提问作者Sk Monjurul Haque
相关产品推荐
相关产品推荐

