Spring Cloud Config Server如何对接Azure Key Vault作为后端存储
Spring Cloud Config Server 对接 Azure Key Vault 实操指引
依赖配置
- 直接在Config Server的构建文件中引入Spring Cloud Azure官方的Config Server Starter,不需要手写自定义适配逻辑。注意Spring Boot、Spring Cloud、Spring Cloud Azure三个组件的版本要严格对应:Spring Boot 3.2.x搭配Spring Cloud 2023.0.x、Spring Cloud Azure 5.11.x;Spring Boot 2.7.x搭配Spring Cloud 2021.0.x、Spring Cloud Azure 4.14.x,版本不匹配会直接启动报错。
- Maven项目在
pom.xml中添加如下依赖:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-config-server</artifactId> </dependency>
- Gradle项目对应引入:
implementation 'com.azure.spring:spring-cloud-azure-starter-config-server'
核心参数配置
- 在Config Server的配置文件中添加AKV相关配置,如果你要把Config Server自身的敏感配置也存到AKV,就用
bootstrap.yml,否则用application.yml即可,基础配置示例如下:
server: port: 8888 spring: cloud: config: server: # 开启AKV作为配置后端存储 azure-key-vault: enabled: true # 如需同时对接Git作为配置源,追加git配置即可,同配置键下AKV的配置优先级默认高于Git # git: # uri: 你的Git配置仓库地址 # default-label: main azure: keyvault: secret: # 替换为你自己的AKV实例终结点 endpoint: https://{你的AKV实例名}.vault.azure.net/ # 仅非Azure环境部署时需要配置服务主体认证参数,本地调试、Azure资源托管标识认证场景不需要加这段 # credential: # client-id: 服务主体应用ID # client-secret: 服务主体客户端密钥 # tenant-id: 所属Azure租户ID
认证配置说明
根据部署场景选择对应认证方式即可,全程不需要硬编码密钥:
- 本地开发调试:本地安装Azure CLI后执行
az login登录有AKV访问权限的账号,启动Config Server会自动复用CLI的登录凭证,不需要额外配置 - Azure环境部署(AKS、App Service、Azure VM等):给Config Server所在的计算资源开启系统分配托管标识,在AKV的访问控制(IAM)中给该托管标识分配
Key Vault Secrets User角色,启动后会自动拉取托管标识凭证完成认证 - 非Azure环境部署:提前在Azure AD中创建服务主体,给服务主体分配
Key Vault Secrets User角色,将客户端ID、密钥、租户ID配置到服务器环境变量中,不要明文写在配置文件里提交到代码库
验证规则与常见问题
- AKV中存储的配置项命名只能包含小写字母、数字和短横线,不支持下划线、驼峰命名:比如要存键为
db.password的配置,在AKV中创建的secret名称要写成db-password,Spring会自动完成格式转换完成配置绑定 - 应用隔离规则和Git后端一致:如果secret名称为
{应用名}-{配置键},比如order-service-db-url,则只有服务名为order-service的客户端拉取配置时能拿到该值;如果secret名称不带应用名前缀,比如application-log-level,则所有服务拉取配置时都能拿到该公共配置 - 集成验证:配置完成后启动Config Server,访问
http://{Config_Server地址}:8888/{应用名}/{环境标识},如果返回的配置内容中包含你存在AKV中的secret值,就说明集成成功 - 排查方向:如果拉不到配置,先把日志级别
logging.level.com.azure.spring.cloud设为DEBUG看具体报错,90%以上的问题集中在三类:AKV防火墙没放行Config Server的出口IP、配置的身份没有AKV secret的读权限、secret命名不符合规范
内容的提问来源于stack exchange,提问作者Nick2597
相关产品推荐
相关产品推荐

