跳转到主要内容
当一个智能体被劫持时——提示注入、一个被投毒的工具结果、一个 失控循环——它实际能的,恰好被一件事所限定:它的 API 密钥 被允许做什么。一个没有限制、没有策略的密钥会把一个被攻陷的 智能体变成一次波及整个工作区的事故。 本页是你在每个密钥上线之前对它运行、并在此后按节奏再次运行的 加固流程。它刻意保持简短:一份检查清单、一个完整示例,然后是 通向每个字段深度内容的链接。关于它背后的心智模型,从 范围与密钥 开始;关于逐字段参考,参见 密钥总览

1. 最小权限检查清单

在密钥编辑器(/console/token)中让每个密钥——新的或现有的—— 经过这六道门。设置其中任何一个都需要 Developer 角色或以上; 两个策略平面(§5–6)单独编写,并在此处绑定
model_limits 设为这个智能体所需的精确列表(并启用 model_limits_enabled)。一次对任何列表之外模型的调用会在它 离开网关之前被拒绝,因此一个被劫持的智能体无法升级到一个 更贵或能力更强的模型。 检查: 列表是否短到工作所允许的程度——理想情况下一个模型? 深度:模型限制
allow_ips 设为智能体实际从中调用的源地址或 CIDR。一个从 其他任何地方出示的泄露密钥会在认证层被拒绝。空意味着允许所有 IP。 检查: 对于一个固定主机或定时智能体,列表是否非空且限定到 那个出口?深度:IP 允许列表
credit_limit_usd 设为智能体在其生命周期内永远不应跨越的 天花板。网关对照密钥的花费执行它。0 意味着无限——一个 失控循环可以耗尽你的整个余额。 检查: 上限是一个真实的预算,而非 0?深度: 配额、上限与到期
expired_time 设为一个绝对到期——sprint、部署或 CI 运行的 结束。-1 意味着永不到期。一个短寿命密钥无法作为被遗忘的 攻击面滞留。 检查: 一个短暂或承包商密钥是否有一个真实的到期,而非 -1?深度:到期密钥
通过 guardrail_id 附加一个 防护栏, 使请求(以及在支持的地方,响应)文本在它到达模型之前被筛查 PII、密钥和注入意图。 检查: 一个处理敏感提示词的密钥是否绑定了一个防护栏,或 继承一个工作区默认值?参见 §5。
通过 firewall_policy_id 附加一个 防火墙策略,使该密钥发出的每一次工具 调用、MCP 派发和 egress 都对照一个智能体合法需要之物的允许 列表被评估。 检查: 一个调用工具的智能体是否绑定了一个防火墙策略,或 继承工作区默认值?参见 §6。
上面的字段是密钥上唯一的客户可配置杠杆——全部在控制台中 设置;这里没有任何东西需要修改智能体代码。回读一个密钥会显示它 被掩码;明文在创建时显示一次。参见 密钥掩码

2. 做什么 / 多久一次 / 在哪里

三个问题把检查清单从一项一次性杂务变成一种姿态。

做什么

上面的六道门,按顺序:model_limitsallow_ipscredit_limit_usdexpired_timeguardrail_idfirewall_policy_id

多久一次

每个密钥创建时,以及在一次周期性审查中——当一个 智能体的范围变更时、当你 轮换 一个 密钥时,以及对长寿命密钥按固定节奏。

在哪里

在控制台密钥编辑器(/console/token)中,作为一个 Developer+。两个策略在它们自己的控制台中编写,然后在密钥上 绑定。

3. 一个具体的最小权限密钥

一个用一个廉价模型、从单一主机汇总支持工单的定时智能体,几乎 不需要任何权限。一个完全加固的密钥:
字段取值原因
model_limits一个汇总模型无法升级到前沿模型
allow_ips调度器的出口 CIDR泄露的密钥在别处无用
credit_limit_usd一个每周上限失控循环无法耗尽余额
expired_time部署结束自动到期,无法滞留
guardrail_id一个 PII 脱敏防护栏请求文本被筛查
firewall_policy_id只允许它的工具没有意外的工具调用
如果这个智能体被劫持,它仍然只能调用一个模型、只能从一个 IP 范围、只能在它的上限之内,并且只能调用其防火墙策略允许的工具。 工作区的其余部分毫发无损——而且 防火墙审计追踪 会精确显示它被授权做了什么。
一个没有 model_limits、没有 allow_ipscredit_limit_usd: 0expired_time: -1,且没有任何策略附加的密钥拥有最大权限。 如果它泄露,持有者就得到了你的整个工作区。把那个组合当作一个 发现,而非一个默认——参见 无限 vs 有界

4. /v1 中继调用 vs 控制台

检查清单在控制台中用你的会话(一个 Developer+ 用户)配置。 你的智能体从不触碰那些配置路由——它在 /v1/* 推理调用上出示它 范围限定的中继密钥(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": "Summarize this ticket..."}]
  }'
如果该密钥的 model_limits 不包含 openai/gpt-4o-mini,这个调用 在它离开网关之前就被拒绝。如果调用方的 IP 不在 allow_ips 中, 它在认证层被拒绝。智能体代码保持不变;密钥决定影响半径。

5. 第 5 道门——绑定的防护栏

guardrail_id 把一个工作区限定的、有序的内容策略绑定到密钥。 解析是密钥的显式防护栏(如果它存在且已启用),否则工作区默认值, 否则无。
防护栏在被禁用时是一个严格的关闭开关:一个被禁用或被删除的 guardrail_id 意味着该密钥得到防护栏——它不会回退到 工作区默认值。这与防火墙平面(§6)相反,所以要验证绑定的防护栏 是已启用的,而不只是已附加。
一个防护栏的规则在模型之前(输入阶段)运行,并在支持的地方, 在响应上(输出阶段)运行,动作为 blockmaskflag。 例如 PII Shield 预设,在请求到达模型之前就脱敏请求中的 PII。 作为 Developer+ 编写和附加防护栏——参见 防护栏绑定策略

6. 第 6 道门——绑定的防火墙策略 + 网关范围

firewall_policy_id 绑定一个工作区限定的工具调用策略。它治理 一个智能体所采取的动作——声明的工具、模型发出的 tool_calls、 MCP 派发和出站 egress——对照一个有序规则列表,其判定为 allowauditdenysanitizepending_approvalcap_cost
防火墙平面的解析与防护栏不同:一个被禁用的被附加防火墙 策略回退到工作区默认值,它不关闭执行。所以绑定一个策略并 禁用它会把密钥还原到工作区默认值——它永远不会静默地失去防护。
一步设置两个平面最快的方式是一个自治级别——一个原子地配置 你工作区防火墙防护栏姿态(tight / balanced / permissive) 的单一开关,支持一键撤销。参见 防火墙 §8
is_firewall_gateway 是一种单独的密钥——仅为防火墙 MCP 和 evaluate-hook 路由(/api/v1/firewall/*)铸造,永不用于推理。一个 普通密钥在那些路由上会得到 403,而一个网关密钥在推理路径上是 过度授权的。启用该标志,以及读取一个网关密钥的明文,都需要 Admin+。一个密钥,一个用途。

7. 检查清单之后

安全智能体基线

推荐的起始姿态——一个自治开关,然后从真实流量调优。

绑定策略

guardrail_idfirewall_policy_id 如何附加和解析。

过度代理

这份检查清单旨在遏制的那种威胁。

泄露密钥

一个限定范围密钥暴露的那一刻该做什么。
每个密钥越狭窄,万一某个智能体被攻陷时的影响半径就越小——而 每个智能体被授权做了什么的记录也越清晰。在每个密钥上运行最小 权限检查清单,并持续运行它。