Appearance
ADR-0007 已知凭据泄漏与暂不轮换的决定
- 日期:2026-07-27(记录),2026-07-28(归档进知识库)
- 状态:已决定 —— 暂不处理
- 相关:私有化部署总览
背景
私有化改造盘点时发现,各服务的 application-k8s.yaml 把环境相关配置连同密码一起打进了 jar,并随源码进入 22 个 git 仓库。这既是"镜像不通用"的根因(已由 prod profile 解决),也意味着生产凭据以明文散落在源码里。
任何拿到过源码的人(含离职员工、外包)都持有这些凭据。
泄漏清单
| 编号 | 凭据 | 位置 | 风险 |
|---|---|---|---|
| a | AWS IoT access-key-id + secret-access-key(AKIA… 长期密钥) | finance、vem 的 application-k8s.yaml | 最高。长期有效,可从公网直接调用该 IAM 用户权限范围内的 AWS API |
| b | Stripe api-key(sk_test_…) | finance | 测试密钥,风险较低 |
| b | Stripe client-id / webhook-secret | finance | webhook 签名可被伪造 |
| c | 生产 MySQL / Redis / RabbitMQ / Nacos 密码 | 各仓库 application-k8s.yaml | 中间件在内网,需先进内网 |
| d | SSH 私钥 | hiapi-cloud-admin-ts/deploy/keys/ | 已随旧镜像分发给客户,应视为已泄露 |
优先级判断:a 和 d 高于其余。自建中间件在内网,而 AWS 长期密钥从公网就能用,SSH 私钥已经在客户手里。
决定
业主已知悉风险,决定暂不轮换(2026-07-27)。
理由是这不阻塞私有化改造推进 —— prod profile 已让新部署不再读这些明文值,新客户环境用的是各自随机生成的密码。
后果(需要清楚承担的)
- 旧密钥本身依然有效。 配置外部化只是让新部署不再使用它们,并没有使它们失效
- 轮换与否不影响私有化的任何后续阶段
- 若将来发生 AWS 账单异常、Stripe 异常 webhook、客户环境被非授权访问,先查这里
这条记录为什么存在
原始记录只存在于一份本地未入库的方案文档里(私有化部署与应用市场落地方案.md,2026-07-28 已废弃删除)。若不归档,半年后不会有人记得仓库里那把 AKIA… 是活的。
不再重复建议轮换 —— 决定已经做过了。这里只保留事实,供将来排查时对照。