跳转到主要内容
密钥总会落到它们不该出现的地方。一个开发者把一个 .env 文件 粘进提示词里”帮忙调试”。一份检索到的文档携带了内嵌的 API 密钥。一个模型在被要求”展示配置”时,把一个 AWS 访问密钥 直接回显给客户端。一个智能体构造了一次工具调用,把一个有效 令牌烤进了参数里。上述每一种都是一条让凭据逃逸的路径——逃进 上游提供商的日志、逃进客户端的对话记录,或逃进一个第三方 工具。 本页介绍如何用 OrcaRouter 的 防护栏智能体防火墙 来防御 llm secret leakage——无需修改你的应用代码。
检测发生在网关上,位于每一个被绑定密钥的前面——因此单一策略 就能覆盖每个提供商、每个模型、每个智能体,无需任何 SDK 改动。

1. 密钥从哪里泄露

一条凭据可以在一个请求的三个不同点逃逸:
凭据在模型还没运行之前就已在请求里——一个被粘贴的密钥、 一段 .env 片段、一份检索到的 RAG 块里的一个令牌。不加检查 地放任,它就会到达上游提供商并可能落入对方的日志。用 Secrets Blocker 输入防护栏拦下它 (§2)。
模型把一个密钥发回你的客户端——它从上下文里反刍出一个密钥, 或臆造出一个凭据形态的字符串。用一条输出密钥规则捕获它 (§3)。
你的智能体构造了一次工具调用,参数里带着一个令牌。防火墙的 sanitize 判定会在调用派发之前,从参数中脱敏匹配的子串 (§4)。
前两个是内容检查(防护栏);第三个是动作检查(防火墙)。把 这三层叠加起来,构成纵深防御。

2. Secrets Blocker——拦下提示词中的凭据

Secrets Blockersecrets 类别下的一个防护栏预设,运行 在 input 阶段。它扫描请求中的凭据形态——AWS 访问密钥、 OpenAI 风格的密钥,以及 GitHub 令牌——并在调用离开网关之前 将其 block。凭据永远到不了模型。 在控制台里编写它一次,附加一个密钥,那个密钥发出的每一个请求 都会被筛查:
1

创建防护栏

在控制台中,打开 /console/guardrails,点击 New guardrail, 然后应用 secrets 类别下的 Secrets & API-Key Blocker 预设。它会为常见的凭据形态种下一组输入阶段的 block 规则—— 从那里可以自由编辑。
2

附加一个密钥

打开 /console/token,编辑一个 API 密钥,并从 Guardrail 下拉中选中该防护栏——或者把它设为工作区默认值,这样每个 未附加的密钥都会继承它。
3

发送一个请求

用那个 sk-orca-... 密钥,像之前一样调用网关:
curl https://api.orcarouter.ai/v1/chat/completions \
  -H "Authorization: Bearer sk-orca-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4o-mini",
    "messages": [
      {"role": "user", "content": "why is AKIAIOSFODNN7EXAMPLE rejected"}
    ]
  }'
这个 AWS 密钥形态触发了防护栏,该请求被以 HTTP 400 guardrail_blocked 拒绝。密钥永远到不了模型。
一个被拦截的请求不消耗配额——一次输入阶段的 block 在计量 之前就触发——并被标记为 skip-retry,因此重新运行同一条 提示词只会再次被拦截,而不会烧掉一个回退通道。
需要更宽的覆盖?secrets 类别还附带一个 Private Keys & Cloud Tokens 预设,用于拦截 PEM 私钥、Slack 和 Stripe 令牌、 Google API 密钥以及 JWT。两个一起应用——一条防护栏可以容纳 任意数量的规则。要把 JWT 和凭据形态作为带类型的实体来捕获 (带 [JWT] / [AWS_ACCESS_KEY] 标记),一条覆盖 jwtaws_access_keyapi_key_openaipii 规则是基于实体的 替代方案;参见 防护栏参考
防火墙的 tight 自治级别 会把 Secrets Blocker 防护栏作为其姿态的一部分开启,与 PII Shield 和破坏性 shell 的拒绝并列。如果你想要一个开关而不是手动编写 规则,那就是那条快速路径。凭据检查本身始终是防护栏—— 而不是防火墙的参数扫描器。

3. 拦截模型输出中的密钥

一个密钥也可能在响应里离开——模型从它的上下文里回显出一个 密钥,或发出一个凭据形态的字符串。在 output 阶段添加一条 规则,在模型的回复返回给客户端之前对其进行筛查。 secrets 类别为此正好附带一个 Code Secret in Output 预设: 针对 PEM 私钥、AWS 访问密钥和 OpenAI 风格密钥令牌的输出阶段 block 规则。
{
  "type": "regex",
  "stage": "output",
  "action": "block",
  "pattern": "AKIA[0-9A-Z]{16}"
}
输出 block 在非流式和流式响应上都被执行——在流式中,一个 扫描器会在任何被拦截的内容到达客户端之前中途切断响应。一次 输出 block 会退还预先消耗的配额。
输出 mask(用一个带类型的标记替换一个匹配,而不是拒绝整个 响应)当前仅适用于非流式响应。对于输出中的凭据,在流式流量上 block 动作才是可靠的选择。在依赖它之前,先在防护栏的 Test 标签里证明你的阶段/流式组合。

4. 从工具调用参数中清理密钥

当你的智能体构造一次工具调用时,一条凭据可能随参数一起搭车。 防火墙的 sanitize 判定会从工具调用的参数中脱敏匹配的 子串并转发清理后的调用——在 responsemcp 执行面上, 那里有可供改写的调用时参数。 一条 sanitize 规则在它的 sanitize_json 配置里点名要脱敏哪些 检测器——一组内置的预设外加可选的自定义正则。被命中的 内容会被替换为 [redacted:<preset>](自定义匹配则替换为 [redacted:custom]):
{
  "priority": 10,
  "label": "Redact AWS keys from tool args",
  "stage": "response",
  "tool_name_glob": "*",
  "verdict": "sanitize",
  "sanitize_json": {
    "presets": ["aws_access_key", "aws_secret_key", "openai_key", "anthropic_key", "bearer_token"],
    "custom": []
  }
}
可供 sanitizer 使用的密钥形态预设有 aws_access_keyaws_secret_keyopenai_keyanthropic_keybearer_token (外加用于 PII 的 emailssn_uscredit_card)。一条 sanitize 规则必须至少点名一个预设或自定义模式——一个空的 sanitizer 在保存时会被拒绝。
Sanitize 脱敏的是参数,而非结果。 它清理你的智能体所编写 的一次工具调用的参数;它不会清洗一个工具所返回的内容。 而且在 inbound 执行面上——那里还没有调用时参数——sanitize 会 升级为一次 deny。匹配语言参见 防火墙规则参考
Secrets Blocker 防护栏(§2) 仍然是你针对请求体中凭据的主要防御——防火墙 sanitizer 是针对 专门出现在工具调用参数内部的密钥的动作层补充。

5. 把三道防御叠加起来

密钥在哪里拦下它的那一层动作
在提示词中Secrets Blocker(输入防护栏)block
在模型的回复中输出密钥规则(输出防护栏)block
在工具调用参数中防火墙 sanitizersanitize
任何新规则都先以影子模式(防火墙)或 flag 动作(防护栏) 上线。观察 events / Matches 信息流,确认它在真实凭据上触发、 而不在无害的相似字符串上触发,然后再切换到执行性动作。

6. 观察触发了什么

每一条触发的防护栏规则都会向工作区 Matches 信息流记录一次 匹配(match)——规则类型、动作、阶段,以及一个详情字符串 (GET /api/guardrail/match,Member)。命中的子串仅当 “Log raw content” 开启时才被记录,而它默认关闭——这是 隐私保守的姿态,因此 Matches 信息流自身不会变成密钥堆积的 地方。对凭据规则保持关闭,除非你确实需要那个子串用于分类排查。 防火墙的 sanitize 决策会落入防火墙 Events 信息流 (GET /api/workspace/firewall/events,Developer+),其中密钥和 规则 blob 永不被记录。

7. 下一步去哪里

防护栏参考

规则类型、PII 实体、预设、测试沙箱,以及完整的评估框架。

防火墙规则参考

匹配语言——工具 glob、参数子句和 sanitizer。

PII 暴露

姊妹内容威胁:提示词和响应中的个人数据。

数据外泄

当一条泄露的凭据成为一次出站外泄调用的载荷。

防护栏 vs 防火墙

哪个平面拦下哪类泄露,以及它们如何组合。

安全智能体基线

一并开启这些防御的起始姿态。