首页/开发/CI/CD 与发布速查/动态密钥(Dynamic Secrets)
环境与配置管理60 条

动态密钥(Dynamic Secrets)

按需为每个应用实例生成短期凭据(数据库账号、云 STS 等):用完即回收,泄露窗口从「永久」压缩到「TTL 内」。

CI/CD 与发布速查开发更新于 2026-10-13

动态密钥是什么

动态密钥指密钥管理系统(如 HashiCorp Vault)按需为每个应用实例生成短期凭据:数据库账号、云临时凭据、消息队列账号等,用完即回收。泄露窗口从「永久、直到人工轮换」压缩到「TTL 之内」,每份凭据背后有租约记录可审计到具体实例。代价是应用要适配「凭据会过期」:处理续租或重建连接。

基本信息

适用平台HashiCorp Vault 及同类方案;云侧 STS 临时凭据是同一思路
机制数据库等引擎创建账号并绑定租约,TTL 到期自动删除
收益免人工轮换、凭据与实例一一对应、可审计
配套应用需处理凭据到期续租或重建连接

典型使用场景

  • 数据库访问:每个服务实例拿专属账号,权限按角色模板收窄
  • 云资源访问:工作负载换取短期 STS 凭据,替代长期密钥
  • 审计与合规:租约记录回答「谁在何时拿到了什么权限」
  • 降低轮换负担:不再人工轮换共享口令,生命周期自动化
  • 应急收口:泄露响应时吊销租约即可,无需全网改密

数据库引擎示意

数据库引擎示意
vault secrets enable database  # 启用数据库密钥引擎
vault write database/config/mydb \
  plugin_name=postgresql-database-plugin \
  connection_url="postgresql://{{username}}:{{password}}@db:5432/app" \
  allowed_roles=app-role  # 角色白名单
vault read database/creds/app-role  # 按需取一份短期账号
# 返回含用户名、密码与租约号,TTL 到期自动删除
短 TTL 会让连接池失效更频繁:TTL 与应用连接管理策略要联合调参,先在测试环境验证续租路径。
换取凭据的入口本身也要鉴权:应用通过 K8s、AppRole 等认证方式换 token,别让 Vault token 变成另一种长期秘密。

引擎与凭据对照

引擎生成内容典型 TTL
database数据库账号与密码小时级
aws云临时凭据分钟到小时级
pki短期证书天级
消息队列专用账号按租约配置
到期与吊销是两条路径:租约到期自动清理用于常态,人工吊销用于泄露响应,两条都要演练过再上生产。

易错点

  • TTL 太短且应用不续租:连接频繁中断,续租与重连逻辑要提前验证
  • 动态账号权限按模板放太宽:每个短期账号都是潜在越权入口,模板按最小权限写
  • 凭据被长期缓存:缓存时间超过 TTL 后连接被拒,缓存策略要与租约对齐
  • 只看申领不看使用:租约记录要与访问日志并起来审计,否则查不出异常使用
  • 连接配置嵌着高权限账号:生成凭据用的管理账号权限过大,应只保留建号与删号的最小权限
  • 应用启动时才第一次取凭据:凭据系统抖动会拖垮启动,做好重试与降级预案(缓存未过期的上一份)

数据来源与参考

  • HashiCorp Vault 文档《Dynamic secrets》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌