跳转到主要内容
你已经为你的工作区编写了一个防护栏和一个防火墙策略。现在 你想让这一个密钥——你的财务智能体所用的那个——运行一份比 工作区其余部分更严格的内容策略和一份更紧的工具允许列表。 这正是密钥上那两个附加字段所做的:把一个防护栏和一个防火墙 策略绑定到单个密钥,于是该密钥发出的每个请求都恰好被那些 策略筛查和执行——无需修改智能体代码、无需重新部署。 本页涵盖这两个字段、它们在请求时如何解析,以及那一条让人 踩坑的解析规则:一个被禁用的防火墙附加项与一个被禁用的 防护栏附加项行为不同。

1. 按密钥的安全策略:密钥上的两个字段

一个防护栏筛查流经一个模型的文本(PII、密钥、越狱)。一个 防火墙策略治理一个智能体发出的工具调用(哪些工具、哪些 MCP 服务器、哪些主机)。两者都是工作区限定的、命名的策略—— 编写一次、在整个工作区共享——而一个密钥通过两个字段选择 加入某个特定的策略:
字段绑定在控制台中设置
guardrail_id筛查该密钥提示词与响应的防护栏。Developer+
firewall_policy_id评估该密钥工具调用的防火墙策略。Developer+
两者都在 /console/token 的密钥编辑器中设置。设置任一项都是一个 Developer+ 操作——策略本身同样由 Developer+ 编写 (参见 范围与密钥)。
这两个字段是独立的。一个密钥可以附加一个防护栏而附加 防火墙策略,或反之,或两者都附加,或都不附加——每个平面各自 解析。把一个字段留空(0)与关闭执行不是一回事; 参见 §3

2. 一个具体的例子

假设你的工作区默认防护栏标记 PII 但允许它通过,而默认防火墙 策略审计每一次工具调用。这对大多数智能体都没问题——但你的 财务智能体处理客户 SSN,且永远不应调用一个 shell 工具。编写一份 更严格的 finance-guardrail(直接拦截 PII)和一份 finance-firewall(只允许它需要的三个工具),然后把两者都 绑定到那个智能体的密钥上:
# 通过 CONSOLE(UserAuth —— 你的会话)配置,而非中继密钥。
# 这是 /console/token 编辑器所发出的密钥更新调用。
PUT /api/token
{
  "id": 4127,
  "name": "finance-agent",
  "guardrail_id": 12,          // finance-guardrail (PII = block)
  "firewall_policy_id": 8      // finance-firewall (3-tool allow-list)
}
从下一次请求开始,该密钥的流量被防护栏 12 筛查,它的工具 调用被策略 8 评估——而工作区中的每个其他密钥都继续运行 工作区默认值。该智能体自己的代码从不改变;它继续用它的 sk-orca-… 密钥像以前一样调用 https://api.orcarouter.ai/v1/...
这就是最小权限模式:每个智能体一个范围狭窄的密钥,每个都绑定 到它的工作实际需要的策略。当那个智能体被攻陷时,影响半径就是 它的密钥被授权能做的——仅此而已。参见 最小权限检查清单

3. 解析:那条让人踩坑的规则

对于每个请求,网关独立地解析活跃的防护栏和活跃的防火墙 策略。对两者而言顺序看起来相同——先附加项、后工作区默认值 ——但它们在一种情形上分道扬镳。

防护栏解析

该密钥的 guardrail_id 指向一个存在且已启用的防护栏。该 防护栏筛查该请求。
禁用被附加的防护栏是一个关闭开关。该密钥得到内容 筛查——它不会回退到工作区默认值。这是有意为之:附加一个 防护栏并禁用它,正是你为该密钥关闭筛查的方式。
密钥上没有 guardrail_id。工作区已启用的默认防护栏适用 (如果设置了的话)。
没有附加项且没有工作区默认值 → 该请求在无内容筛查的情况下 通过。

防火墙解析

该密钥的 firewall_policy_id 指向一个存在且已启用的策略。 该策略评估该密钥的工具调用。
这里就是区别所在。一个被禁用的防火墙附加项回退到工作区 默认防火墙策略——它不会关闭执行。禁用一个防火墙附加项 会把该密钥还原到工作区默认值;它不会让该密钥失去防护。
密钥上没有 firewall_policy_id → 工作区已启用的默认防火墙 策略适用。
禁用一个被附加的策略并不对称。 一个被禁用的防护栏 附加项意味着该密钥无防护栏。一个被禁用的防火墙附加项 意味着回退到工作区默认值。如果你想让一个密钥真正不运行任何 防火墙执行,你无法通过禁用它的附加项来实现——确保没有设置 工作区默认防火墙策略(或者限定该密钥的范围,使它不发出任何 受治理的工具调用)。
每个工作区在任何时刻最多只能有一个防护栏和一个防火墙策略作为 默认值;晋级一个新默认值会在同一事务中降级旧的那个,所以你 永远不会意外地拥有两个。

4. 一次拦截的表现形式

当一个被绑定的策略拒绝一个请求时,调用方会看到一个结构化的 错误——智能体可以作出反应而不是崩溃:
平面错误码HTTP成本
防护栏guardrail_blocked400无——输入拦截在计量之前触发;输出拦截会退款。标记为 skip-retry。
防火墙(inbound)firewall_blocked400一次 inbound 拦截在模型调用之前触发,因此不消耗模型 token。Skip-retry。
防火墙(已挂起)firewall_approval_pending400为人工审批挂起;智能体轮询并在获批后重新提交。
两个错误体都是 OpenAI 形态的,并点明策略和原因,因此你的 智能体可以根据错误码进行分支。完整的事件记录以及匹配如何被 记录,参见深度参考。

5. 下一步去哪里

范围与密钥

完整的三层模型——工作区、策略、密钥——以及一个密钥携带的 每个字段。

令牌对象

密钥上的每个字段:model_limitsallow_ipscredit_limit_usdexpired_time,以及两个策略附加项。

防护栏

编写你通过 guardrail_id 绑定的内容策略——规则、PII 实体、动作和预设。

防火墙

编写你通过 firewall_policy_id 绑定的工具调用策略—— 判定、执行面和自治级别。
想要一步设置你整个工作区的姿态,而不是一个一个地绑定密钥? 一个自治级别会一次性写入两个平面——防护栏和防火墙。然后 在少数几个需要比工作区默认值走得更远的密钥上附加更严格的 策略。参见 防护栏 vs 防火墙