华为云 DEW 凭据管理实战:Spring Boot 配置密钥外置与自动轮转方案
一、为什么要把密钥挪出配置文件
数据库口令、Redis 密码、第三方 OpenAPI 的 AK/SK,常见写法是塞进 application.yml 后随代码进仓库。只要出现一次仓库权限外扩、一次镜像导出、一次流水线日志下载,凭证就等于公开。更麻烦的是轮转:改一次密码要同时改三套配置、挨个重启服务,成本高到多数团队干脆不轮转。
本文记录一次改造:把 Spring Boot 应用的敏感配置整体外置到华为云 DEW 凭据管理服务(CSMS),由 KMS 托管加密,应用只保留一个访问凭据,实现"配置与密钥分离 + 密码自动轮转"。
二、整体思路
核心是三件事:敏感数据不再出现在配置文件与镜像里;应用启动时按需拉取,失败则快速失败而不是带病启动;轮转由 CSMS 侧定时触发,应用通过定时重拉或双凭据窗口平滑切换。选择 CSMS 而不是自建 Vault,主要理由是托管加密密钥、自带版本管理与轮转策略,且支持细粒度 IAM 授权。
三、关键实现
创建凭据时选择"通用凭据",以 JSON 存放 db_password、redis_password 等字段。Spring Boot 侧实现一个 EnvironmentPostProcessor,在配置文件加载后、DataSource 初始化前,用 SDK 拉取凭据并解密,将字段注入 Environment。这样业务代码零改动,@Value 与配置绑定的写法都不受影响。
轮转策略按 30 天设置,同时保留最近两个版本。应用侧必须做两件事:一是轮转期间存在短暂的双版本共存,读取失败时要回退到上一个版本;二是数据库侧需同步改密,建议在轮转后由事件触发改密脚本,而不是先改数据库再更新凭据。
本地开发用一个开关控制:dev 环境直连读取本地 mock,prod 才走 CSMS,避免开发者电脑上也要配云凭据。CI 流水线里用临时委托账号,只授予 csms:ShowSecretVersion 与 kms:Decrypt 两个最小权限。
四、踩坑总结
一是日志泄露:SDK 异常里会带凭据名与版本号,务必在全局异常处理里过滤。二是启动依赖:CSMS 抖动会拖慢启动,需要设置超时与本地缓存兜底。三是轮转后连接池不刷新,老连接仍用旧口令,需要配合连接池的销毁重建。
改造完成后,配置文件里再没有明文口令,代码仓库的全量扫描也清零了高危项,运维轮转变成了点一次按钮的事。
- 点赞
- 收藏
- 关注作者
评论(0)