shell.exec、编辑文件、抓取 URL,并加载社区技能——其中任何一项都可能
rm -rf 一个卷、读取一个 .env,或外泄到一个攻击者主机。本配方用
防火墙 锁定那个执行面:拒绝破坏性 shell、校验你
确实允许的调用的参数、围栏 egress,并把真正高风险的操作挂起交给人工。
这一切都不触及你智能体的代码——策略存在于网关,并在下一次调用时执行。
下面的一切都在控制台中配置(Firewall → Posture / Policies)。那些
管理路由使用你的控制台会话,而非一个中继密钥。只有你智能体发出的
/v1/* 调用携带一个 sk-orca-… 密钥。策略编辑需要 Developer 角色。1. 从观察开始,而不是拦截——安全编码智能体基线
不要盲目地编写规则。给智能体它的sk-orca-… 密钥,然后打开
Firewall → Posture 并应用 balanced
自治级别。在一个事务中,
这会审计每一次工具调用、flag PII,并拒绝破坏性 shell——所以在你从
真实流量中了解该智能体其余行为的同时,最糟糕的动作已经被围栏了。
让它运行,然后读取 Firewall → Discovered tools:工作区见过的每一个
工具,被标记为 covered(有规则适用)或 gap(没有)。那份列表是
你的允许列表草稿。当信息流看起来对了,就转到 tight(默认拒绝)或编写
下面的定向策略。
2. 拒绝破坏性 shell——不可协商的底线
对一个编码智能体最重要的单条规则是没有破坏性 shell。balanced 和
tight 自治级别已经把它作为 Block destructive shell 预设附带,该预设
实例化出真实、可编辑的 deny 规则,覆盖工作区直连工具名
(shell.*、bash、cmd.*、powershell.*、exec.*)以及一个已注册
服务器暴露的 MCP 命名空间形式(*.shell.*、*.cmd.*、…)。
如果你宁愿把它收得比”拒绝所有 shell”更紧,就编写一条只拒绝破坏性
命令、审计其余的规则。一条规则在一个工具名 glob 加上一个可选的
参数谓词(针对调用参数的 JSONPath)上匹配:
拒绝 rm -rf 但允许其他 shell 调用
拒绝 rm -rf 但允许其他 shell 调用
在 Firewall → Policies 中,在你的默认值之上加入一条规则:
- Tool glob:
shell.exec - Args match(JSONPath 子句):
- Verdict:
deny
eq、contains、regex、in、
cidr_match、gt、lt。一个 $.command 匹配该正则的调用被拦截;
其余一切落到下一条规则。拦截长什么样
拦截长什么样
inbound 执行面上一次被拒绝的调用返回 HTTP 400,带错误码
firewall_blocked 和一条点明工具与原因的消息。一次通过 MCP 网关
派发的调用会作为一次工具错误(firewall deny: …)返回,因此模型
能作出反应而不是崩溃。Inbound 拦截在上游模型调用之前触发,因此它们
不消耗模型 token。3. 对你保留的工具校验参数
允许一个工具不等于允许它的每一个参数。同一个 JSONPath 谓词——它限定 一个 deny 的范围——也让你约束一个被允许调用的形态——这样db.query
就不能携带一个 DROP,而 file.write 就不能逃出一个目录。
拦截一个 SQL DROP
Glob
db.query,子句
{"path":"$.sql","op":"regex","value":"(?i)\\bdrop\\b"},判定
deny。脱敏参数中的密钥
判定
sanitize 会在调用被转发之前从工具调用参数中脱敏匹配的
子串。它绝不触及工具返回的内容;在 inbound 执行面上(还没有调用时
参数)它升级为一次拦截。4. 控制 egress——围栏智能体能访问的地方
一个能抓取 URL 的编码智能体可能被引导进 SSRF(命中云元数据或一个 内部10.x 主机)或被用来外泄。tight 自治级别附带一个 SSRF 预设,
它直接拒绝 fetch 形态的工具名(http_fetch、web_search、
fetch_url、request,以及它们的 <server>.* 形式)。
对于目的地级别的控制,编写一条 egress 规则。Egress 规则用
allow / deny 条目按 host 或 CIDR 限定范围,在 egress 执行面上
评估:
没有预设附带基于 CIDR 的 egress 规则——SSRF 预设匹配的是 fetch 形态的
工具名。上面的 host/CIDR 拒绝列表是你自己编写的。参见
阻止外泄 了解完整模式。
5. 把高风险操作挂起交给人工(HITL)
有些操作既不该被自动允许也不该被自动拒绝——一次部署、一次git push、一次破坏性迁移。对这些,使用 pending_approval 判定。调用
被挂起,智能体得到一个带审批 id 的”已挂起”响应,一名审查者带外解决它:
- 编写一条规则(例如 glob
deploy.*,判定pending_approval)。 - 被挂起的调用返回 HTTP 400
firewall_approval_pending,带一个 审批 id。 - 一名审查者从控制台(Developer+)或经由一个 HMAC 签名的 webhook 回调批准它。
- 智能体轮询该审批,然后携带一个一次性的
X-OrcaRouter-Firewall-Approval头重新提交原始调用——网关便放行 这一次。
6. 治理它加载的技能和 MCP 服务器
编码智能体在运行时拉入能力——社区技能、自带 MCP 服务器。防火墙在网关 治理二者:- 技能被扫描进一个风险等级,带一个执行模式(
allow/quarantine/block)。一个自动检测到的技能被隔离——挂起等待审批——直到 一名审查者清查它。参见 技能。 - 你注册的 MCP 服务器会把每一次
tools/call通过网关派发,网关在 派发前于mcp执行面上评估每一个。凭据被加密存储;一个健康探测报告ok/degraded/down。参见 MCP 服务器 和 加固一个 MCP 智能体。
7. 验证与观察
在你依赖一条策略之前,对它做 dry-run。Test 标签页针对当前策略评估 一个样本工具调用,并显示判定、匹配到的规则和原因——什么都不派发, 什么都不持久化。一旦上线,Firewall → Events / Runs 就是每一次评估的 记录,可按判定、执行面、工具和运行过滤,而anomaly feed 会对照工作区 学习到的基线标记速率/成本尖峰、retry_loop 以及前所未见的工具路径。
回顾
防火墙参考
完整的策略平面——执行面、判定、解析、自治。
防火墙规则
匹配语言:glob、参数子句、egress、序列。
危险的工具调用
本配方所防御的威胁。
过度自主
为何过度授权的智能体是核心的智能体风险。
自治智能体配方
端到端锁定一个完全自治的智能体循环。
阻止外泄
深入讲解 egress 与致命三要素模式。
