一句话定义
密钥管理(Secrets Management)指的是:把 API Key、数据库密码、访问令牌(AI 词典:Token">Token)这类"拿到就能用"的字符串集中保管、按需发放、随时撤回、留下记录的一整套做法。云厂商提供的托管密钥服务常叫 KMS(Key Management Service)。
打个比方
家门钥匙有两条路:塞在门口地垫下,或者交给前台保险柜。地垫的问题是,进过门的人都知道地垫在哪;保险柜给你一张取用凭证,谁取了哪把钥匙、什么时候取的,都有登记。硬编码 API Key 就是塞地垫,而且这块地垫会被复制几千份——仓库、镜像、备份、同事电脑里各一份。
为什么总在这四个地方泄露
- Git 历史:
api_key = "sk-..."是最省事的写法。改掉那一行没用,commit 历史、fork 出去的分支里都还在。撤回密钥(rotate)才算数,删记录不算。 - 前端代码:浏览器按 F12 就能看到发出的请求。打包压缩只是让人读得慢点,不改变"它在用户机器上"这个事实。打进前端的 Key 等于公开发布。
- 日志:调试时把整个请求体打出来,异常堆栈里带着 Authorization 头,日志又集中采集、长期保留、很多人能看。泄露常常不是被攻击,而是因为顺手打了一行 log。
- 配置文件与 CI:
.env忘了进.gitignore,CI 日志把变量回显出来,镜像层里留着"已经删掉"的文件。
和相邻概念的区别
| 概念 | 管什么 | 泄露后果 |
|---|---|---|
| 密钥管理 | API Key、密码、Token 的存放与发放 | 别人能冒用你的身份调用服务、读数据 |
| KMS | 加解密、签名用的密钥本身 | 数据失去机密性 |
| 配置管理 | 端口、超时等普通参数 | 一般无害 |
KMS 和密钥管理常搭配使用,但一个管"加密钥匙",一个管"进门凭据",不是一回事。环境变量也不等于密钥管理,它只是"不写进代码"的最低成本手段,进程列表、崩溃转储、CI 日志照样能把它带走。
正确做法长什么样
默认假设代码、前端产物、日志、Git 历史都会被公开。密钥只在运行时由平台注入,代码里只留一个引用名;能用短期凭证就别用永不过期的 Key;提交前挂一个密钥扫描(secret scanning)钩子拦截;按环境分级授权,能读生产数据的和只能读测试的别共用一把;出事第一步是轮换,不是删记录。
不写代码的人也用得上:网页、插件、群聊让你粘贴 API Key 时,先问一句"它存哪儿";自己的模型 Key 别贴进聊天记录和截图里。具体工具与服务怎么选,以各家官方文档为准。
