教程2026-11-02 · 智涌AI

AI 开发平台密钥泄露自查:环境变量、Bedrock、CI 怎么轮换

AI 开发平台密钥泄露自查头图:四步流程从列落点到吊销换新与核账单

Wiz 在 2026-10-30(美国时间)把十月一串 AI 开发平台事故串成「Black October」:至少 9 家披露了安全事件,公开信息里攻击者进去后都在翻环境变量,尤其是能调大模型的密钥。站内已发过这条快讯。按 Wiz 报告、AWS Bedrock 处置文档、GitHub 泄露密钥补救文档和 OpenAI API 密钥安全指引(2026-11-02 北京时间查阅)整理。不复现攻击,只写文档里写明的自查与轮换步骤。

先认清:攻击者要的是环境变量里的 AI 钥

Wiz 写明:没有找到把这 9 起事件串起来的同一个漏洞或同一条依赖链。Fireworks、Zeabur、Lightning 归因于凭证被拿;Railway 初步说是构建基础设施提权;Warp 指向第三方依赖;OpenCode 指向遗留系统。共同点是「进去之后专门找存着的环境变量,重点是 AI 访问凭证」。

下游滥用被 Wiz 叫做 LLMJacking。他们观察到两把企业 Bedrock 密钥:第一把约 30 小时内约 80 万次调用、约 90% 成功;第二把约 13 小时内约 170 万次调用。按标价估算,这两例合计超过 10 万美元用量。Northflank 状态页要求客户假定环境变量已被解密,立刻轮换全部密钥。站内此前的OpenCode 控制台密钥泄露也在这一波里。

删掉仓库里的那一行密钥,不等于密钥失效——GitHub 和各模型厂商都把「先吊销」写成第一步。

自查第 1 步:把「钥可能落过的地方」列成表

对照 Wiz 写到的攻击面,把团队实际用过的托管面摊开。按常见落点逐项打勾。

落点你要核对什么处置原则(官方口径)
AI 开发 / 部署平台上的环境变量OpenAI、Anthropic、Bedrock、各大模型网关、向量库、对象存储密钥是否曾写入平台 Secrets / Env假定已暴露则全量轮换(Northflank 通告口径);到原厂控制台吊销旧钥
本机与容器环境变量OPENAI_API_KEY、ANTHROPIC_API_KEY、AWS_ACCESS_KEY_ID / Bedrock bearer、各类 *_API_KEYOpenAI:用环境变量存钥,勿写入代码;轮换后更新所有引用处
CI / CD(GitHub Actions 等)仓库 / 组织 / Environment Secrets;工作流日志是否曾打印过密钥GitHub:日志里出现未脱敏值 → 删日志并轮换;定期审查并轮换已登记密钥
Git 历史与公开仓库误提交的 .env、notebook、配置样例、fork / gistGitHub:泄露密钥视为已失陷;删提交或重建仓库不能替代吊销
云厂商 API 钥面板Bedrock 长短期 API key;IAM 用户上的 service-specific credentialAWS:长钥可停用 / 重置 / 删除;短钥需作废生成会话或 Deny bearer 调用

别和提示词注入混在一块:注入是骗 Agent 把数据送出去(见提示词注入防护清单);这篇讲的是密钥已经以明文或平台密文形式,落在别人可能读到的地方。扩展后门那类自查(如Cursor 扩展后门自查)也替不了这篇的平台密钥轮换。

自查第 2 步:Bedrock 密钥按官方流程止血

Wiz 那两个案例,失陷的都是企业 Bedrock 密钥。AWS 文档把密钥分成两类,处置不一样:

# 长期钥:立即停用(把 ID 换成创建时返回的 ServiceSpecificCredentialId)
aws iam update-service-specific-credential \
  --user-name bedrock-api-user \
  --service-specific-credential-id "${ServiceSpecificCredentialId}" \
  --status Inactive

# 长期钥:重置(生成新密钥材料;已过期则删掉重建)
aws iam reset-service-specific-credential \
  --user-name bedrock-api-user \
  --service-specific-credential-id "${ServiceSpecificCredentialId}"

AWS Security Blog 把顺序写得更靠前:能用 STS 临时凭证就别发长期 API key;必须用 bearer 时优先短钥;长期钥用条件键卡住最长有效期(创建时可限制天数),并收紧 AmazonBedrockLimitedAccess 里用不到的权限。同时核对本月 Bedrock / 跨区域推理用量有没有异常。

自查第 3 步:GitHub 上「泄露 → 吊销 → 换新」

GitHub《Remediating a leaked secret》写得很直:密钥一旦泄露,就按已经失陷处理。只从代码里删掉、再推一个 commit、甚至删库重建,都挡不住别人继续用那把还活着的钥。

  1. 在密钥颁发方控制台(OpenAI / Anthropic / AWS / 云数据库等)吊销或删除旧密钥。若担心业务中断:先创建同等权限的新钥 → 应用切到新钥并确认可用 → 再吊销旧钥。
  2. 把新钥写进 GitHub Actions 的 Secrets(仓库 / 组织 / Environment),不要写回工作流 YAML。
  3. 若工作流日志里曾打出未脱敏的密钥:按文档删除相关 run 日志,并轮换该密钥。
  4. 打开 push protection(Secret Protection)和个人账号的「Push protection for users」,降低再次推上去的概率。
  5. 定期审计已登记 Secrets:不用的删掉;还在用的轮换,缩短失陷窗口。生产环境可用 Environment secrets + required reviewers,让敏感作业先过人审。

GitHub Actions 安全参考还提醒:别把整段 JSON/YAML 塞进一个 Secret(脱敏靠精确匹配,大包容易漏);派生出的 JWT、Base64 值也要单独登记,否则日志里红不掉。

自查第 4 步:OpenAI 等模型厂商控制台

OpenAI《Best practices for API key safety》和《Keeping your account secure》里,跟「平台环境变量被翻」直接相关的几条:

Anthropic、其他网关、向量库控制台按钮名字不同,顺序一样:吊销 → 换新 → 更新所有平台 Env / CI Secret → 核对近 30 天账单。用过 Wiz 点名那批平台托管密钥的团队,默认按全量轮换做。

常见坑

完成标准

最后

把团队用过的 AI 平台列一张表,先把环境变量里出现过的模型钥在原厂吊销并换新;Bedrock 用户按第 2 节把长钥停掉或重置。五条完成标准打完勾,再去看用量页——比事后追 10 万美元账单便宜。

关注公众号「智涌AI速递」

每天的 AI 快讯、实用教程和 AI项目实测,也会同步发到微信公众号。在微信里搜索「智涌AI速递」就能关注;不用微信的话,可以用 RSS 订阅本站。