Частые вопросыОпубликовано: 14.08.20260 просмотров

API Key 泄露了怎么办?止损清单和预防方案(2026 应急手册)

密钥误发群聊、出现在截图或提交到 GitHub 后的完整应急流程:60秒止损清单、账单异常排查、Git历史清理、盗刷索赔方法、自动化预防工具。

核心原则:先撤销,后调查

时间就是金钱:密钥泄露后,每拖延 1 分钟,都可能被扫描工具发现并开始盗刷。

止损优先级

  1. 0-60 秒:撤销密钥(最高优先级)
  2. 1-5 分钟:查看账单,确认损失
  3. 5-30 分钟:创建新密钥,恢复服务
  4. 30 分钟-1 小时:清理泄露来源
  5. 1 小时后:联系服务商,申请赔偿(如果有)

60 秒止损清单

密钥轮换流程 API Key 紧急轮换流程

第 1 步:立即撤销密钥(20 秒)

操作路径

  1. 登录服务商控制台(platform.openai.com / console.anthropic.com / 中转站后台)
  2. 进入 API Keys密钥管理 页面
  3. 找到泄露的密钥(根据备注或创建时间)
  4. 点击 撤销(Revoke)删除(Delete)
  5. 确认操作

关键

  • ✅ 不要等确认"有没有人看到"再撤销
  • ✅ 撤销密钥会立即失效,正在进行的请求会中断
  • ❌ 只修改账户登录密码不能让旧密钥失效

第 2 步:降低消费上限(20 秒)

目的:如果有多个密钥,不确定哪个泄露了,先锁死账户总额度。

操作

  1. 控制台 → 账户设置Billing
  2. 找到 消费上限(Spending Limit)每月限额
  3. 临时设置为 当前已用额度 + ¥10

示例

当前本月已消费:¥50
临时设置上限:¥60
效果:只能再花 ¥10,超过后自动停止服务

第 3 步:暂停高风险任务(20 秒)

如果你有自动化脚本、定时任务、服务器上运行的应用:

立即执行

# 停止相关服务
systemctl stop my-api-service

# 或杀掉进程
pkill -f my_script.py

或者

  • 暂停 GitHub Actions 工作流
  • 停止云函数(Lambda、Cloud Functions)
  • 禁用定时任务(Cron Job)

<div class="mermaid-diagram">
flowchart TD
    A[发现泄露] --> B[立即行动<br/>5分钟内]

    B --> C1[禁用泄露的Key]
    B --> C2[检查使用记录]
    B --> C3[评估影响范围]

    C1 --> D[创建新Key]
    C2 --> E{发现异常调用?}
    C3 --> F[计算损失金额]

    E -->|是| G[导出调用日志]
    E -->|否| H[继续监控]

    G --> I[分析攻击者IP/特征]
    F --> J[联系服务商]
    D --> K[更新生产环境]

    I --> L[加入黑名单]
    J --> M[申请退款/补偿]
    K --> N[验证服务恢复]

    L --> O[复盘总结]
    M --> O
    N --> O

API Key 泄露应急响应流程

</div>

详细应急流程

异常告警配置 配置异常用量告警

第 4 步:保存证据并核对账单(5 分钟)

记录泄露信息

必须记录

  • 泄露发生时间:2026-08-15 14:30
  • 泄露位置:微信群 / GitHub 仓库 / 截图
  • 密钥末四位:...aB3d(不要记录完整密钥)
  • 泄露范围:50 人的微信群 / 公开仓库 / 私密聊天

截图保存

  • 泄露时的聊天记录或代码截图
  • 当时的时间戳
  • 账单异常记录

导出账单明细

操作

  1. 控制台 → Usage账单明细
  2. 筛选时间范围:泄露前 1 小时到现在
  3. 导出 CSV 或 Excel

重点检查

检查项正常异常(盗刷迹象)
请求时间你的正常工作时间凌晨 3:00-5:00(你在睡觉)
模型你常用的模型从未用过的模型(如 Dall-E、TTS)
Token 用量每次 500-2000 Token每次 10,000+ Token(刷上限)
请求频率每分钟 5-10 次每秒 10+ 次(脚本批量)
IP 地址你的 IP陌生国家/地区的 IP

计算损失金额

泄露前 1 小时账单:¥5.00
泄露后到撤销密钥:¥120.00
可疑消费:¥120.00 - ¥5.00 = ¥115.00

保存

  • 导出的账单明细 CSV
  • 异常请求的 Request ID
  • 损失金额计算过程

第 5 步:创建新密钥并恢复服务(10 分钟)

原则:一应用一密钥

错误做法 ❌:

旧密钥:sk-old-xxx(用于所有应用)
新密钥:sk-new-xxx(继续用于所有应用)

正确做法 ✅:

Chatbox:sk-chatbox-xxx
VS Code:sk-vscode-xxx
自动化脚本:sk-script-xxx
测试环境:sk-test-xxx

创建新密钥的配置

必须设置的限制

  1. 备注名称

    Chatbox - 个人电脑 - 2026-08-15
    
  2. 额度限制

    每日上限:¥10
    或每月上限:¥100
    
  3. 模型限制(如果平台支持):

    仅允许:gpt-4o, claude-3.5-sonnet
    禁止:dall-e-3, tts-1(防止被用于生成图片/语音)
    
  4. IP 白名单(可选,适合固定 IP):

    仅允许:123.45.67.89(你的家庭 IP)
    

逐项恢复服务

优先级排序

  1. 最高优先级:正在给客户提供服务的生产环境
  2. 高优先级:个人工作主力工具(VS Code、Chatbox)
  3. 中优先级:自动化脚本、定时任务
  4. 低优先级:测试环境、实验性项目

恢复步骤

  1. 创建新密钥
  2. 替换应用中的密钥
  3. 测试 1-2 个请求,确认正常
  4. 恢复下一个应用

第 6 步:清理泄露来源(30 分钟)

场景 1:误发到聊天工具(微信、Telegram、Slack)

操作

  1. 立即撤回消息(如果在 2 分钟内)
  2. 通知群成员
    【紧急】刚才不小心发了一个 API 密钥,
    已撤销,请大家不要使用。如果保存了请删除。
    
  3. 删除聊天记录(对方也要删除)
  4. 更换密钥(已在第 5 步完成)

风险

  • ✅ 私密聊天(1 对 1):风险较低
  • ⚠️ 小群聊(< 10 人):中等风险
  • ❌ 大群聊(> 50 人):高风险,密钥必须撤销

场景 2:出现在截图或文档中

操作

  1. 删除截图

    • 删除本地文件
    • 删除云盘备份
    • 删除分享链接
  2. 检查传播范围

    • 谁看到了这个截图?
    • 是否被转发到其他群?
    • 是否被上传到公开网站?
  3. 更换密钥(已完成)

预防

  • 截图前用马赛克遮住密钥
  • 使用专门的截图工具自动遮挡敏感信息

场景 3:提交到 Git 仓库

这是最危险的场景,因为:

  • Git 历史永久保留密钥
  • GitHub 有自动扫描工具,秒级发现密钥
  • 即使删除文件,历史记录中仍然存在

立即操作

  1. 撤销密钥(已完成)

  2. 从当前代码中移除

    # 删除硬编码的密钥
    git rm config.py
    git commit -m "Remove leaked API key"
    git push
    
  3. 检查 Git 历史

    # 搜索密钥在哪些提交中出现
    git log -S "sk-proj-" --all
    
  4. 清理 Git 历史(可选,复杂且有风险):

    方法 A:使用 BFG Repo-Cleaner

    # 下载 BFG
    wget https://repo1.maven.org/maven2/com/madgag/bfg/1.14.0/bfg-1.14.0.jar
    
    # 清理包含密钥的文件
    java -jar bfg-1.14.0.jar --delete-files config.py my-repo.git
    
    # 清理 Git 引用
    cd my-repo
    git reflog expire --expire=now --all
    git gc --prune=now --aggressive
    
    # 强制推送
    git push --force
    

    方法 B:使用 git-filter-branch

    git filter-branch --force --index-filter \
      "git rm --cached --ignore-unmatch config.py" \
      --prune-empty --tag-name-filter cat -- --all
    
    git push --force --all
    

    ⚠️ 警告:强制推送会改写历史,影响所有协作者。谨慎使用。

  5. 通知协作者

    密钥已泄露并撤销,请大家执行:
    git fetch --all
    git reset --hard origin/main
    

场景 4:部署环境(服务器、云函数)

检查清单

  • 环境变量

    # 检查是否有硬编码密钥
    grep -r "sk-proj-" /var/www/myapp/
    
  • 配置文件

    cat /etc/myapp/config.ini
    cat ~/.env
    
  • 构建日志

    • GitHub Actions → 查看 Workflow 日志
    • CI/CD 平台 → 查看构建输出
  • 容器镜像

    # 如果密钥被打包到 Docker 镜像
    docker rmi myapp:latest
    # 重新构建,使用环境变量传递密钥
    

第 7 步:联系服务商(1 小时后)

何时需要联系客服

  • 发现大量非本人消费(> ¥100)
  • 账单中有陌生的请求 ID
  • 怀疑密钥被自动扫描工具盗刷
  • 希望申请赔偿或减免

提供的信息

应该提供 ✅:

  • 泄露发生时间:2026-08-15 14:30-14:45
  • 密钥末四位:...aB3d
  • 异常消费金额:¥115.00
  • 异常请求 ID:req-abc123, req-def456
  • 异常时间段:14:35-14:40(你当时不在电脑前)
  • 已采取的措施:已撤销密钥、已创建新密钥

不要提供 ❌:

  • ❌ 完整 API Key
  • ❌ 账户密码
  • ❌ 其他密钥的完整内容

申请赔偿的可能性

平台类型赔偿可能性条件
OpenAI 官方通常不赔偿,但可以尝试申诉
Anthropic 官方同上
中转站部分平台有"盗刷险"或赔偿政策
企业账户如果有正式协议,可协商赔偿

成功案例

  • 用户在 GitHub 公开仓库泄露密钥,24 小时内被盗刷 ¥2000
  • 提供了详细的时间线和证据
  • 中转站同意赔偿 50%(¥1000)

失败案例

  • 用户将密钥分享给朋友,朋友使用后产生费用
  • 平台认为是"授权使用",拒绝赔偿

泄露后的风险评估

审计日志检查 检查可疑的调用记录

低风险场景

  • 误发到 1 对 1 私密聊天,对方可信
  • 出现在私有仓库(仅团队成员可见)
  • 泄露时间 < 5 分钟,立即撤销

行动

  • 撤销密钥
  • 创建新密钥
  • 监控账单 24 小时

中风险场景

  • 误发到小群聊(< 10 人)
  • 出现在截图中,被少数人看到
  • 提交到私有仓库,但有外部协作者

行动

  • 立即撤销密钥
  • 通知相关人员
  • 监控账单 7 天
  • 检查是否有异常消费

高风险场景

  • 提交到 GitHub 公开仓库
  • 误发到大群聊(> 50 人)
  • 出现在公开博客、论坛、社交媒体

行动

  • 立即撤销密钥(0 秒容忍)
  • 降低账户消费上限
  • 清理 Git 历史(如果在 GitHub)
  • 监控账单 30 天
  • 准备向服务商申诉
  • 考虑更换账户(如果损失巨大)

<div class="mermaid-diagram">
graph LR
    A[检测方法] --> B[主动检测]
    A --> C[被动监控]

    B --> B1[GitHub扫描]
    B --> B2[代码审查]
    B --> B3[依赖检查]

    C --> C1[用量异常]
    C --> C2[IP异常]
    C --> C3[调用模式异常]

    B1 --> D[GitGuardian]
    B2 --> D[SonarQube]
    C1 --> E[实时告警]
    C2 --> E
    C3 --> E

    style E fill:#ef4444
    style D fill:#10b981

泄露检测方法

</div>

预防措施

导出使用报告 导出详细用量报告用于分析

1. 一应用一密钥

目的:缩小事故影响范围。

示例

Chatbox:sk-chatbox-xxx(每日 ¥10 上限)
VS Code:sk-vscode-xxx(每日 ¥20 上限)
生产服务器:sk-prod-xxx(每日 ¥100 上限)
测试环境:sk-test-xxx(每日 ¥5 上限)

好处

  • Chatbox 密钥泄露,不影响生产服务器
  • 发现异常消费,立即定位是哪个应用

2. 设置额度上限

个人账户

单个密钥:每日 ¥10 或每月 ¥100
账户总额度:每月 ¥500

企业账户

测试密钥:每日 ¥20
生产密钥:每日 ¥500
账户总额度:每月 ¥10,000

3. 启用消费提醒

推荐配置

  • 单日消费 > ¥50 → 邮件提醒
  • 单日消费 > ¥100 → 短信提醒
  • 余额 < ¥10 → 邮件提醒

4. 使用环境变量

❌ 错误做法

# config.py
API_KEY = "sk-proj-abc123..."  # 硬编码,容易泄露

✅ 正确做法

# config.py
import os
API_KEY = os.getenv("OPENAI_API_KEY")  # 从环境变量读取
# .env 文件(不要提交到 Git)
OPENAI_API_KEY=sk-proj-abc123...
# .gitignore
.env
config.local.py
secrets/

5. 使用密钥管理工具

个人用户

  • 1Password:密钥存储和自动填充
  • Bitwarden:开源密码管理器
  • 系统钥匙串(macOS Keychain、Windows Credential Manager)

企业用户

  • HashiCorp Vault:企业级密钥管理
  • AWS Secrets Manager:云端密钥存储
  • Azure Key Vault:微软云密钥服务

6. 启用 Git 密钥扫描

GitHub

  • 仓库 Settings → Security → Secret scanning(自动启用)
  • 发现密钥会立即发邮件警告

GitLab

  • 需要手动配置 Secret Detection

本地检查

# 安装 gitleaks
brew install gitleaks

# 扫描仓库
gitleaks detect --source . --verbose

7. 截图前遮挡敏感信息

工具推荐

  • Snipaste(Windows/Mac):截图后可编辑,添加马赛克
  • Xnip(Mac):自动识别并遮挡敏感信息
  • ShareX(Windows):自动模糊指定区域

手动检查

  • API Key
  • 邮箱地址
  • 用户名
  • IP 地址
  • 内部域名

真实案例

案例 1:GitHub 公开仓库泄露

情况

  • 开发者将含密钥的 config.py 提交到公开仓库
  • 5 分钟后,GitHub 扫描到密钥并发邮件警告
  • 10 分钟后,自动化脚本开始盗刷
  • 24 小时后发现,已损失 ¥2000

教训

  • ✅ 使用 .gitignore 排除配置文件
  • ✅ 提交前用 gitleaks 扫描
  • ✅ 启用 GitHub Secret Scanning

案例 2:微信群误发密钥

情况

  • 用户本想发一段代码,复制时多选了 .env 文件内容
  • 粘贴到 50 人的技术群
  • 1 分钟后发现,立即撤回
  • 但已有 3 人看到并截图

结果

  • 密钥被其中 1 人用于测试,产生 ¥5 费用
  • 幸好及时撤销,未造成大损失

教训

  • ✅ 粘贴前检查内容
  • ✅ 使用专门的代码分享工具(Gist、Pastebin)

案例 3:外包团队泄露

情况

  • 企业将密钥提供给外包团队
  • 外包团队离职员工将密钥保存在个人电脑
  • 3 个月后,该员工用密钥测试自己的项目
  • 企业发现异常消费 ¥500

教训

  • ✅ 项目结束后立即撤销密钥
  • ✅ 不要共享主密钥,使用子账户或临时密钥
  • ✅ 定期审计密钥使用情况

预防措施检查清单

措施优先级难度效果成本
使用环境变量⭐⭐⭐⭐⭐免费
.gitignore配置⭐⭐⭐⭐⭐免费
Pre-commit检查⭐⭐⭐⭐免费
Key轮换制度⭐⭐⭐⭐免费
IP白名单⭐⭐⭐免费
额度限制⭐⭐⭐⭐⭐免费
密钥管理服务⭐⭐⭐¥50+/月
WAF防护⭐⭐¥300+/月

总结:泄露应急检查表

立即行动(0-5 分钟)

  • 撤销泄露的密钥
  • 降低账户消费上限
  • 暂停高风险任务

评估损失(5-30 分钟)

  • 导出账单明细
  • 查找异常消费
  • 计算损失金额
  • 保存证据截图

恢复服务(30-60 分钟)

  • 创建新密钥(一应用一密钥)
  • 设置额度和模型限制
  • 逐项恢复服务
  • 测试确认正常

清理泄露(1-2 小时)

  • 删除聊天记录或截图
  • 清理 Git 历史(如果需要)
  • 检查部署环境
  • 通知相关人员

后续跟进(1-7 天)

  • 监控账单异常
  • 联系服务商申诉(如果需要)
  • 检查是否有二次泄露
  • 加强预防措施

最后更新:2026-08-15
应急热线:服务商客服(各平台不同)

延伸阅读

Опубликовано: 14 августа 2026 г.
最后更新: 16.08.2026