浏览 AI 知识库

API Key 怎么放环境变量:避免进入仓库、构建产物和日志

把 API Key 放进环境变量只是第一步。仓库历史、构建日志、错误日志和前端产物仍可能泄漏秘密,需要逐处检查并准备轮换。

按实际操作顺序推进

每完成一段就检查当前输出,确认结果符合预期后再继续。

  1. 01准备动手前,把材料和不能改的部分定下来
  2. 02执行一次 API Token 泄漏,先撤销再清理历史
  3. 03检查为什么“仓库扫描无密钥,浏览器仍能看到 Key”还不能交付
  4. 04完成密钥位置清单与泄漏检查结果通过哪些检查才算完成
从手头这一份材料开始

密钥已经移进 .env,为什么仍然可能泄漏

API Key 已从代码移到 `.env`,但 `.env` 被提交,构建日志又打印了完整请求头。所谓使用环境变量并没有消除泄漏。

  • 源码、历史、日志和产物均已扫描
  • 不同环境使用不同最小权限凭证
  • 轮换与撤销流程已验证
本例材料

动手前,把材料和不能改的部分定下来

需要确认本例内容
现有材料Node 项目、Git 仓库、CI 和 Docker 镜像;凭证分开发、本地测试和生产三套。
不能越过的边界密钥不进入源码、历史、镜像、前端包、日志和截图;生产使用受控 secret store;发现泄漏先撤销轮换。
要交付的结果密钥位置清单与泄漏检查结果
实际操作

API Key 怎么放环境变量,从“分类与最小权限”开始做

分类与最小权限

记录每个密钥的服务、环境、所有者、scope、有效期和可执行动作,开发与生产分离。

选择存储位置

本地使用受控配置或密钥管理,CI/CD 使用平台 secrets,生产使用适当的密钥服务;不写入仓库。

阻止进入前端和构建

检查打包变量前缀、静态产物、source map、容器层和配置模板,任何浏览器可见值都视为公开。

清理日志和错误

对请求头、连接串、URL 参数和异常对象脱敏,禁止调试打印完整环境。

扫描与轮换演练

扫描历史、产物和日志;发现泄漏先撤销轮换,再清历史与缓存,记录影响。

密钥生命周期

一次 API Token 泄漏,先撤销再清理历史

阶段实际检查证据决定
发现构建产物和日志出现 token 片段扫描结果、时间和版本立即停止继续传播
撤销服务端吊销旧 Token,生成最小 scope 新值吊销回执和新版本旧值不再可用
清理历史提交、缓存、source map、镜像层扫描前后差异不把‘删当前文件’当完成
防复发日志脱敏、CI secret、提交钩子和轮换日期自动扫描和演练记录明确责任人和到期时间

Token 和服务名为演示;真实泄漏按组织事件响应流程处理。

最终输出

完成后的密钥位置清单与泄漏检查结果

位置清单记录本地 `.env.local`(gitignored)、CI secret 和生产 secret;构建产物与 Git 历史扫描无明文。日志中 Authorization 被遮罩;测试 Key 轮换后旧 Key 返回 401,新 Key 仅有最小 scope。

常见失败

为什么“仓库扫描无密钥,浏览器仍能看到 Key”还不能交付

仓库扫描无密钥,浏览器仍能看到 Key

原因
变量被注入前端构建或接口返回
怎么改
检查最终 JS 包和网络请求,服务器端代理敏感调用,立即轮换已暴露凭证
验收方式

密钥位置清单与泄漏检查结果通过哪些检查才算完成

进一步核对

后端与数据:参考资料与核对入口