应用安全

API Key 泄露后如何防止接口被滥用?

API Key 泄露不等于业务停摆。本文给出事发后的处置顺序,以及让泄露的 Key 本身变得不值钱的五层绑定方法:来源、证书、配额、契约与审计。

先定性:API Key 泄露不是「密钥事故」,是「凭证事故」

API Key 和普通密码最大的区别是它通常不绑定人:没有二次验证、没有异常登录提醒、没有会话过期概念,拿到字符串就等于拿到权限。在 AI 应用里更糟——Key 往往直接等同于可计费额度,泄露后的损失以推理账单的形式立刻体现。

所以正确的心态不是「怎么保证 Key 永不泄露」(做不到),而是让泄露后的 Key 价值尽可能低、影响面尽可能小、可发现得尽可能早。下面的处置顺序和绑定方法,都是围绕这三件事设计的。

泄露的四个典型路径与检测信号

泄露路径 典型场景 可观测信号
前端代码 Key 写在 Web/小程序包里,被反编译提取 请求来源全是浏览器,但用的却是服务端 Key
公共代码仓库 配置文件、测试脚本误提交 仓库里出现符合 Key 前缀的字符串
第三方集成 把 Key 交给合作方,对方安全水位更低 调用来自未知出口网段,用量与合作方申报不符
日志与错误上报 日志行、堆栈、APM 里明文打印 Key 日志检索命中 Key 格式,或第三方日志平台被越权访问

第一条和第二条占了绝大多数。判断一家公司 API 安全是否及格,看它有没有「密钥扫描 + 自动轮换 + 调用侧绑定」这三件套就够了,而不是看它有没有写安全规范。

事发后的处置顺序

1. 先轮换,但不要只轮换。 轮换能终止已泄露字符串的持续滥用,是必须的第一步;但如果新 Key 的绑定关系和旧的一模一样,那么泄露方式没变、下次还会发生。轮换和「改绑定」必须一起做。

2. 定位影响面。 拉取泄露 Key 在可疑时段内的调用明细:来源 IP/网段、调用的端点、消耗额度、读取或写入了哪些数据。这一步决定你要不要走数据泄露通报流程,不能跳过。

3. 收紧调用侧绑定。 把 Key 与来源 IP 段、mTLS 客户端证书、允许的端点范围绑定。

两项能力的真实门槛(写方案前先确认):

  • mTLS:官方文档写明所有套餐都可以用 Cloudflare 托管的 CA 配置 mTLS,这一点常被误认为必须买 API Shield。限制在于:自带 CA(BYO CA)只有 Enterprise 可以,且最多 5 个。所以「用客户端证书替代字符串凭据」在低套餐上也能立刻启动。
  • Schema 正向校验:属于 API Shield,而 API Shield 在文档中标明为 Enterprise-only paid add-on。它的价值是把黑名单式的「猜攻击长什么样」换成「请求不符合契约就拒绝」。上传 Schema 的规模也有套餐配额(Free:5 个启用 Schema / 200 KiB,且规则动作只能 Block;Business:10 个 / 2 MiB;Enterprise:可选 Log 或 Block)。若暂时够不到 API Shield,可先用 WAF 的 Application Profiles 走「先检测、后缓解」的路线——先在 Profile Analysis 里观察再决定是否需要 Custom Rule 阻断。

4. 加配额与降速。 给每个 Key 设分层配额:每分钟、每天、总额度三道闸。配额的作用不是防住攻击者,而是把单次泄露的损失上限锁死。这里要注意 Cloudflare 的限流计数器是按数据中心独立累计的,且从检测到超限到执行动作可能有几秒延迟;要把某个 Key 的绝对上限锁死,必须在应用层实现权威计数。

5. 建立审计闭环。 记录每次调用的身份、端点、参数摘要与结果码,保证事后能回放。没有可回放的审计,前面的所有控制都无法复盘验证。

6. 复盘:为什么会被写进前端/仓库? 把结论落到工程规范上——CI 阶段的密钥扫描、运行时从密钥管理服务注入、禁止明文进日志。

让 Key 本身不值钱:五层绑定

五层绑定:由外到内逐层收敛,越靠内越难绕过 第 1 层 · 来源 IP / 网段 立刻挡掉异地调用;对云主机与代理效果有限 WAF 自定义规则 / IP 列表 第 2 层 · mTLS 客户端证书 凭据无法被字符串复制;需管理证书生命周期 全套餐可用(托管 CA) 第 3 层 · 端点与参数范围 限制 Key 只能调用指定接口,挡住横向移动 网关 / 应用层维护契约 第 4 层 · 分层配额 分钟 / 日 / 总额度三道闸,锁死单次损失上限 权威计数必须在应用层 第 5 层 · 短有效期与自动轮换 缩短暴露窗口;要求客户端支持热更新 你的密钥服务与发布流程
图 1:五层绑定不必一次全上。最低可行组合是「配额 + 端点范围 + 自动轮换」,mTLS 适合调用方固定的 B2B 场景。

五层不用一次全上。最低可用组合是「配额 + 端点范围 + 自动轮换」:这三样成本最低,却能把泄露的期望损失压一个数量级。mTLS 适合 B2B 与合作伙伴集成这类调用方固定的场景。

Cloudflare 能力 vs 应用层职责

事项 Cloudflare 能给到的 应用层必须做的
来源 IP 限制 IP Access 规则、WAF 自定义规则 网段白名单的维护与变更流程
强身份 mTLS(全套餐可用;BYO CA 限 Enterprise) 证书签发、轮换与吊销流程
契约校验 API Shield Schema validation(Enterprise 附加项) OpenAPI 文件的维护与版本管理
分层配额 Rate limiting rules(条数与维度受套餐限制) 权威计数账本:分钟/日/总额度
自动轮换 — 密钥管理服务 + 客户端热更新能力
泄露发现 Bot 与异常流量信号(依赖套餐) 用量异常告警、CI 密钥扫描、代码仓监控

边界与不适用情况

  • 公开只读接口配额可以放宽,但仍要做来源与配额绑定;免费公开不等于无成本。
  • 合作伙伴集成不要直接共享主 Key,应为每个合作方签发独立 Key 并写明额度,便于单独吊销而不影响其他渠道。
  • 已上线的老客户端可能无法热更新 Key:此时优先用「端点范围 + 来源 IP」兜底,再安排强制升级窗口。
  • 不要把 mTLS 当成万能解:它证明「调用方持有证书」,但不证明这个调用是否被业务逻辑许可;授权判断仍然要在应用层保留。

FAQ

轮换频率越高越好吗? 不是。轮换只降低长期泄露的价值,无法阻止泄露瞬间的爆发。真正决定损失量级的是配额和绑定范围;频率只要保证「发现到轮换」的窗口短于攻击者把额度用光的时间即可。

上了 mTLS 还需要 WAF 吗? 需要。mTLS 解决「你是谁」,WAF 与 Schema 校验解决「你发的内容里有没有攻击载荷、是否符合契约」。两者是不同层面,缺一层都会在另一层被打穿。

怎么发现 Key 已经泄露? 看三类异常:用量与业务曲线背离(业务没涨但调用涨了)、来源地理/网段与历史分布不符、调用端点集中在少数昂贵接口上。把这三条做成告警规则,比等对方找上门强。

免费档能做这些吗? 要分清三件事:① mTLS 可以——所有套餐都能用 Cloudflare 托管 CA 配 mTLS;② 基础限流可以但很粗——Free 套餐只有 1 条限流规则、计数维度仅为 IP、计数周期固定 10 秒;③ Schema 校验不能——API Shield 是 Enterprise 付费附加项。选型的判据是「默认拒绝未知契约」是否可用,而不是功能清单长度。

相关阅读

← 返回文章列表

Cloudflare 官方合作伙伴

正在为海外业务做架构决策?

企业版选型、架构咨询、风险评估——把你的场景告诉我们,我们给出可落地的方案和路径。

作为 Cloudflare 合作伙伴,我们可以为你提供:

预约咨询