跳到正文
2026 年 10 月:Railway和OpenCode 事件,该怎么做

AI API 密钥安全

在泄露的 AI 密钥花钱之前阻止它。

让你的提供商密钥远离你的应用。改为给每个应用、智能体和工具分配一个 INFRO 网关密钥,带有开关、IP 允许列表、模型限制和支出限额,每一项都在调用你的提供商之前检查。

一个已泄露的 INFRO 网关密钥的示例请求日志。该密钥仅限其服务器所在的网络 203.0.113.0/24,并设有每日支出限额 $50.00。来自其他网络的请求会以 403 ip_not_allowed 被拒绝,不在该密钥允许列表中的模型会以 403 model_not_allowed 被拒绝;两者都不会到达提供商。来自这些服务器的请求在组织自己的 OpenAI 和 Anthropic 账号上运行,每条都附有预估提供商费用。
  • 4 项检查

    每次请求时,在调用你的提供商之前。

  • 32 个网络

    按密钥设置在其 IP 允许列表中,支持 IPv4 或 IPv6,所有套餐均可用。

  • 无需部署

    用于关闭泄露的密钥。使用它的每个请求都会被拒绝。

  • AES-256-GCM

    适用于你连接的每个提供商密钥。密钥不会再次显示。

提供商密钥存放在哪里

同一个提供商密钥通常存放在五个地方,任何一份副本都能动用整个账号的额度。使用 INFRO 后,提供商密钥被密封在一个地方,每个应用、智能体和工具都持有自己的网关密钥。选择泄露发生的位置。

选择密钥泄露的位置
一个提供商密钥,复制到各处5 处中有 5 处暴露
你的提供商密钥 sk-proj-••••7Hc2已复制到 5 个位置
  1. 生产环境变量sk-proj-••••7Hc2在此泄露
  2. CI 和部署密钥sk-proj-••••7Hc2同一密钥
  3. 开发者笔记本电脑和 .env 文件sk-proj-••••7Hc2同一密钥
  4. 编码智能体的 shellsk-proj-••••7Hc2同一密钥
  5. 第三方 AI 工具sk-proj-••••7Hc2同一密钥
已暴露
你的整个提供商账号,最多可达提供商处设定的限额,直到在提供商处删除该密钥为止。
恢复方式
在提供商处删除该密钥,然后重新部署全部 5 个位置。
有了 INFRO,每个位置一个网关密钥5 个中有 1 个密钥暴露
你的提供商密钥 sk-proj-••••7Hc2密封保存在 INFRO 中
  1. checkout-apisk_infro_••••a91f每天 $50203.0.113.0/24已泄露,已控制
  2. ci-deploysk_infro_••••3c7e每天 $10203.0.113.64/27不受影响
  3. maya-laptopsk_infro_••••5d20每天 $530 天后过期不受影响
  4. claude-codesk_infro_••••8b14每天 $20仅限 Anthropic不受影响
  5. support-toolsk_infro_••••e602每月 $151 个模型不受影响
已暴露
checkout-api: 一个密钥,在你的服务器网络之外被拒绝,在网络内每天上限 $50。
恢复方式
在控制台中将其关闭,无需部署,然后只在那一个位置轮换。其他 4 个继续正常工作。

四项检查

每项检查都以各自有文档说明的代码拒绝请求,因此你的日志会准确说明原因,而且每一项都可以在控制台或通过 API 调整,无需部署。四项检查在每个套餐中都提供。

  1. 01

    关闭开关

    这个密钥是开启的吗?

    在控制台或通过 API 关闭一个密钥后,使用它的每个请求都会被拒绝。它的密钥内容、限额和历史都会保留;重新开启即可恢复同一个密钥。

    403 key_disabled文档

  2. 02

    允许的网络

    它是从你的服务器发起调用的吗?

    每个密钥最多 32 个 IPv4 或 IPv6 地址或 CIDR 范围,与 Cloudflare 边缘报告的客户端地址进行匹配,绝不使用 X-Forwarded-For。没有可信地址时,请求会被拒绝。

    403 ip_not_allowed文档

  3. 03

    模型和提供商

    它被允许使用这个模型吗?

    批准组织、项目或密钥可调用的模型,以及密钥可触达的提供商。每个密钥属于一个环境,永远不会触达该环境之外的连接。

    403 model_not_allowed文档

  4. 04

    支出限额

    它的限额能覆盖这个请求吗?

    按密钥设置每日、每周、每月或终身限额,与组织、项目和成员的预算并存。限额无法覆盖的请求会在调用提供商之前被拒绝。

    402 key_budget文档

  • 带重叠期的轮换一步完成轮换:新密钥继承旧密钥的所有设置,旧密钥在你部署期间最多可继续使用七天,或立即停用。支出限额是共享的,因此轮换不会带来新的额度。
  • 过期时间为密钥设定一个失效时间,适用于外包人员、演示或迁移。
  • 只显示一次,以哈希存储网关密钥是 32 个随机字节,只显示一次,仅以 SHA-256 摘要存储。即使数据库泄露,也不会泄露可用的密钥。
  • 猜测会被限速一分钟内认证失败 30 次的地址,在这一分钟结束前会被以 429 拒绝,且发生在查找任何密钥之前。

支出上限

泄露的密钥、陷入循环的智能体、用脚本刷你免费额度的客户:每一种都会停在与其规模相当的上限处,而不会耗尽你的整个预算。每个适用的上限都会在调用你的提供商之前检查,并把在途请求的最坏情况计算在内。

上限可叠加

一条请求必须符合适用于它的每一个上限。最严格的那个起决定作用,所以在合适的位置设置一个小上限,能在问题触及组织上限之前很久就将其拦住。

  1. 组织
  2. 项目
  3. 成员
  4. 网关密钥
  5. 终端客户
一个组织的示例预算:组织硬上限、项目预算、网关密钥的每日限额、密钥的终身限额以及终端客户上限。在所选危机“网关密钥泄露”中,对应的上限达到限额,下一条请求会在调用任何提供商之前以 402 key_budget 被拒绝。 该密钥当天在 $50 时停止。其他所有密钥继续服务。

该密钥当天在 $50 时停止。其他所有密钥继续服务。

按范围划分的支出上限:周期、行为、拒绝代码和套餐
上限周期行为方式拒绝代码套餐
组织每月目标和硬上限目标会告警;硬上限会告警或阻断。仅所有者可以设置。402 organization_budget所有套餐
项目按月告警或阻断,告警阈值由你自己设定。402 project_budget所有套餐
成员按月告警或阻断,针对某个人的活动。402 member_budget所有套餐
网关密钥每日、每周、每月或终身始终阻断。终身限额永不重置。402 key_budget所有套餐
终端客户每日、每周或每月对每位客户适用同一条规则,按组织或项目设置,并可由你的后端设置覆盖值。402 end_user_budgetTeam 及以上

经过负载测试在一次沙盒测试中,$1 的阻断式上限在最多 500 个并发请求下 12 次运行全部守住(测试及其方法)。上限按 INFRO 对提供商费用的估算计算,而不是你的提供商发票;在阻断式上限下,价格未知的模型会被拒绝,除非你允许它,所以也请在提供商处保留一个支出限额。 支出控制文档

密钥泄露

适用于 INFRO 网关密钥。如果泄露的是提供商密钥,请先在提供商处删除它:只有这样才能阻止它。

  1. 1无需部署即可遏制关闭网关密钥,或者把密钥收窄到你服务器的网络并降低其支出限额,让你的应用继续运行。这些都不需要部署,所有检查都发生在任何提供商调用之前。
  2. 2替换它密钥已泄露时,请无重叠地轮换。替换密钥保留标签、项目、限额、允许列表、环境和历史访问权限,并只显示一次。
  3. 3查看它做了什么每条请求记录都会注明发起请求的网关密钥,以及模型、状态和预估提供商费用;可按该密钥过滤请求日志和用量。控制台会显示今天每个密钥的允许列表拒绝了多少个请求。
  4. 4检查是否在 INFRO 之外被使用在 Business 套餐中,开启用量访问的成本对账,会报告某个已连接提供商密钥上从未经过 INFRO 的用量。没有该访问权限时,它会显示“未检查”,而绝不会显示“无绕过”:请查看提供商自己的用量页面。
  5. 5保留记录密钥变更、轮换和策略编辑都记录在审计日志中,注明由谁在何时执行,这些记录数据库拒绝更新或删除。
curl -X PATCH https://api.infro.io/manage/v1/gateway_keys/$KEY_ID \
  -H "Authorization: Bearer $INFRO_MANAGEMENT_TOKEN" \
  -H 'If-Match: "7"' \
  -H "Content-Type: application/json" \
  -d '{"disabled": true}'

# Every request with the key: 403 key_disabled
# Its secret, limits and history are kept.

同样的三项更改也在控制台中该密钥的页面上。使用管理 API 时,更改需要附上你最后读取的版本(If-Match),因此两个人同时处理同一事件时不会互相覆盖。

提示词中的密钥

人们会把 .env 文件粘贴进聊天,智能体也会从 shell 中读出它们。在 Business 套餐中,护栏会检查提示词、工具调用和响应中的密钥格式,然后在调用你的提供商之前拦截请求、用 [SECRET] 替换匹配内容或进行标记。

  • OpenAI
  • Anthropic
  • Google API 密钥
  • AWS 访问密钥 id
  • GitHub 令牌
  • Slack 令牌
  • Stripe 生产密钥
  • INFRO 密钥
  • JWT
  • PEM 私钥

检测基于模式:它只匹配这些格式,因此会漏掉 AWS 秘密访问密钥、密码以及它不认识的格式。每次匹配都会计入请求记录。 护栏文档

示例:一位开发者把环境变量文件粘贴进一次 chat completion 请求。在请求到达提供商之前,护栏的机密信息检测器会把 OpenAI 密钥替换为 [SECRET],响应会带上请求头 X-INFRO-Guardrails: redacted。

智能体、工具和人

编程智能体使用自己的密钥

Claude Code、Codex 和各种智能体 SDK 使用网关密钥调用 INFRO 的 /v1/messages 和 /v1/responses,而不是你的 Anthropic 或 OpenAI 密钥。为每位开发者或每个智能体各分配一个,带有支出限额、过期时间和网络允许列表;吊销它不会影响其他任何人。

Claude Code & Codex

工具凭据不进入智能体Business

每个 MCP 服务器只需连同其令牌注册一次。INFRO 在每次调用时附上令牌,因此任何智能体、提示词或配置文件都不持有它,每个网关密钥也只能使用授予它的工具。

MCP 网关安全模型

控制台登录是另一扇门

支持身份验证器应用、通行密钥和硬件密钥的双因素认证,一份可以结束的会话列表,以及一项要求每位成员都启用双因素认证的组织设置。 Business 套餐起提供 SAML 或 OIDC 单点登录以及 SCIM。

双因素认证与会话

我们持有的密钥

存储提供商密钥的平台正是十月那些攻击的目标,所以同样的问题也适用于我们。这些控制措施逐字引自 Trust Center 自己的陈述。

提供商凭据加密存放,并绑定到单个租户
你所连接的提供商密钥使用 AES-256-GCM 加密,密钥作为 Worker 密钥保存,绝不放在数据库中。组织和连接标识符作为附加认证数据绑定其中,因此被复制到其他租户的行——或同一租户的其他行——的加密凭据会默认失败,而不是被解密。为成本对账而连接的凭据在各自的绑定下单独加密。
任何地方都没有“显示”功能
提供商凭据一旦保存,任何界面都不会再返回它——控制台、API、内部运营控制台都不会。任何一方能看到的只有最后四个字符和时间戳。如果你丢失了密钥,请在提供商处轮换;我们无法向你显示它。
INFRO API 密钥以哈希形式静态存储
网关密钥是来自密码学随机源的 32 个字节。我们存储的是它的 SHA-256 摘要、一个显示前缀和最后四个字符,因此即使数据库泄露,也不会泄露可用的凭据。吊销时写入一条墓碑记录,而不是删除该行,因此不会被仍在各个地点之间传播的陈旧缓存条目所遮蔽。
加密密钥可以在无需你参与的情况下轮换
轮换用于加密客户凭据的密钥,会就地重新加密每一份已存储的凭据。它不要求客户重新输入任何内容,所存储的算法带有版本字符串,因此未来的方案可以与当前方案共存,而不需要一次性切换日。

INFRO 做不到的事

从 INFRO 或其他任何地方窃取的提供商密钥,都可以直接用于调用提供商,绕过所有 INFRO 限制。请连接限定在各自项目或工作区内的密钥,并在提供商处设置支出限额:即使我们失守,这项控制依然有效。尚未到位的措施列在 Trust Center 上。

2026 年 10 月

两起事件中的建议都一样:替换密钥,在提供商处删除旧密钥,并查看它做了什么。提供商密钥存放的地方越少,一次泄露需要的轮换就越少;你确实分发出去的密钥,应带有无需部署即可调整的限制。

Railway披露于 2026年10月21日

Railway 的说法

An unauthorized party may have accessed encrypted customer environment variables and, for some of them, obtained the decrypted contents, in a series of attacks aimed at compromising AI inference providers.

该怎么做

轮换 Railway 持有的每一个变量,AI 提供商密钥优先:替换,在提供商处删除旧密钥,部署,并查看旧密钥的用量。

Railway breach: what happened and what to do复查于 2026年10月22日

OpenCode披露于 2026年10月17日

OpenCode 的说法

A breach related to a large-scale distillation attack affected 1.4% of OpenCode Console users, those with external AI providers linked, and provider keys saved in a workspace may have been exposed.

该怎么做

创建一个限定范围的替换密钥,在提供商处吊销旧密钥,并查看自 10 月 16 日起的提供商用量。

OpenCode Console breach: what happened and what to do复查于 2026年10月21日

每段摘要都来自该公司自己的披露,按我们的分析中的引用呈现。撰写时两起事件仍在进行中;这些分析每周复查,所有变更都记录在修订说明中。

实战指南

常见问题

如果我的 OpenAI 或 Anthropic API 密钥泄露了,该怎么办?

在提供商处创建替换密钥,在那里删除泄露的密钥,部署替换密钥,然后在提供商处查看旧密钥在其可能被使用的整个期间的用量。让密钥失效的是在提供商处删除它;应用或网关做不到把被盗的密钥召回。然后在提供商处为替换密钥设置支出限额,并让它远离代码、客户端应用和共享环境。

INFRO 如何限制 API 密钥泄露造成的损失?

你的应用持有 INFRO 网关密钥,而不是你的提供商密钥。每个网关密钥都可以关闭(403 key_disabled)、限制在最多 32 个网络内(403 ip_not_allowed)、收窄到已批准的模型和提供商,并设置每日、每周、每月或终身的支出限额(402 key_budget)。每项检查都在调用你的提供商之前、在每个套餐上执行,且无需部署。泄露的网关密钥是一个可以关闭的有限问题;泄露的提供商密钥则会触及整个提供商账号。

我可以按客户、按项目或按时间段为 AI 支出设置上限吗?

可以。预算适用于组织(有会告警的每月目标,以及会告警或阻断的硬上限)、项目和成员(每月),以及网关密钥(每日、每周、每月,或永不重置的终身限额)。 从 Team 套餐起,终端客户上限可按日、周或月限制你的每一位客户,并可为特定客户设置覆盖值。 在调用你的提供商之前,会检查每一个适用的上限,并按最坏情况计入仍在处理中的请求,被拒绝的请求会返回指明该上限的 402。上限计算的是 INFRO 对提供商费用的估算,而不是你的提供商的发票,因此请同时在提供商处保留一个支出限额。

INFRO 会存储我的提供商 API 密钥吗?如何保护?

会:你只需连接一次自己的提供商密钥,INFRO 用它们来处理你的请求。每个密钥都用 AES-256-GCM 加密,加密密钥作为 Worker 密钥存放在数据库之外,并绑定了组织和连接,因此仅有数据库副本无法打开任何内容。没有任何控制台页面、端点或导出会返回已保存的凭据;控制台只显示它的最后四个字符。网关密钥仅以 SHA-256 摘要存储。

被盗的提供商密钥能绕过 INFRO 吗?

可以。INFRO 只治理经过它的流量。从任何地方取得的提供商密钥,包括从 INFRO 取得的,都可以绕过所有 INFRO 限额直接对提供商使用。请连接限定在各自项目或工作区、并在提供商处设置了支出限额的密钥:即使我们出问题,该限额依然有效。 在 Business 套餐中,开启用量访问的对账,会报告某个已连接密钥上没有经过 INFRO 的用量。

OpenCode 和 Railway 的泄露事件是怎么回事?

OpenCode 于 2026 年 10 月 17 日表示,一起与大规模蒸馏攻击有关的泄露事件影响了 1.4% 的 Console 用户,即关联了外部 AI 提供商的用户,工作区中保存的提供商密钥可能已被暴露。Railway 于 2026 年 10 月 21 日表示,未经授权的一方可能访问了加密的客户环境变量并解密了其中一部分,这些攻击旨在入侵 AI 推理提供商。两起事件的建议相同:替换密钥,在提供商处删除旧密钥,并查看其用量。INFRO 对两起事件各有一篇分析,仅依据这些公司自己的声明撰写。

INFRO 能阻止 API 密钥被粘贴进提示词吗?

在 Business 套餐中,护栏会检查提示词和响应中的 OpenAI、Anthropic、Google API 密钥、AWS 访问密钥 id、GitHub 令牌、Slack 令牌、Stripe 生产密钥和INFRO 密钥 格式、JWT 和 PEM 私钥,并在你的提供商看到之前阻断请求、将匹配内容替换为 [SECRET] 或加以标记。检测基于模式:它会漏掉不认识的格式,例如 AWS 的秘密访问密钥和密码。

Claude Code 和 Codex 需要我的 Anthropic 或 OpenAI 密钥吗?

不需要经过 INFRO。它们用网关密钥调用 INFRO 的 /v1/messages 和 /v1/responses,因此每位开发者或每个智能体都可以拥有自己的密钥,带支出限额、有效期和可选的网络允许列表,吊销它不会影响其他任何人的访问。智能体仍然可以读取同一个 shell 中留下的任何密钥,因此请从开发者环境中移除原始的提供商密钥。

什么是 LLMjacking?

LLMjacking 是指盗用云或 AI API 凭据,以受害者为代价调用托管的语言模型,用于攻击者自己使用或转卖访问权限。防御办法与任何能花钱的凭据相同:让提供商密钥远离代码和客户端应用,为每个密钥设置支出限额,按密钥监控用量,并能在无需部署的情况下关闭一个密钥。

哪些 INFRO 套餐包含这些控制?

每个套餐都包含关闭密钥、允许的网络、模型和提供商限制、支出限制、轮换和过期、双因素登录和通行密钥和审计日志。 支出告警在每个套餐中都会发送到邮件,从 Startup 套餐起还会发送到 Slack 和带签名的 webhook。 护栏、SSO 和 SCIM、带绕过检测的成本对账和MCP 网关均包含在 Business 套餐中。

合规情况、完整的控制措施列表以及尚未到位的措施都在 Trust Center 上。发现了漏洞?请写信至 security@infro.io。

开始使用

让下一次密钥泄露成为一个有边界的问题。

你的提供商、你的合同、你的密钥,密封在一个地方。你分发的每个密钥都有限制、可开关。模型支出零加价。