跳转到主要内容
一条 防火墙策略 是一个有序的规则列表, 而一条规则不过是一个小袋字段:它匹配哪些工具调用、在哪个执行面上, 以及如何处理它们。当你需要读一条别人写的规则——或精确地推理一条你正在 构建的规则——你想要把字段列表放在一处。那就是本页。 你在控制台规则编辑器中编写规则(写入需要 Developer+);编辑器写入下面的 结构化字段。本页是字段级别的地图;深度匹配引擎位于 防火墙规则

1. 防火墙规则 schema 一览

每条规则都携带同样的字段。只有 verdict 总是必需的——其他一切都收窄该 规则匹配什么配置所选判定,而一个缺失的匹配器是空真。
字段用途
priority评估顺序——更低的先运行
verdict规则匹配时的动作(必需)。
stage要限定到的 执行面;空 = 全部。
tool_name_glob针对工具名的 Glob
args_match_jsonJSONPath 参数谓词,作为一个 JSON 编码字符串。
egress_jsonHost / CIDR 白名单-黑名单(egress 规则),作为一个 JSON 编码字符串。
sanitize_json脱敏配置(当 verdict = sanitize 时),作为一个 JSON 编码字符串。
cap_cost_cents以美元分计的运行成本上限(当 verdict = cap_cost 时)。
sequence_json有序多步链谓词(序列规则),作为一个 JSON 编码字符串。
label / notes人类名称和理由——显示在事件中,被引擎忽略。
一条规则在它所有声明的匹配器同时成立时触发——执行面匹配(或为空)、 工具 glob 匹配、参数子句匹配(或缺失),以及 egress 范围匹配(仅 egress 规则)。引擎按优先级顺序遍历规则,首个匹配生效;如果没有任何匹配,则 应用策略的 default_verdict

2. priority —— 评估顺序

一个整数序数。更低的先运行;两条相同优先级的规则由规则 id(插入顺序) 打破平局。把你特定的划分放在你宽泛的兜底之上——一个优先级 10 的针对一个 受信任工具的 allow 胜过一个优先级 100deny *
留出间隔(10、20、30),这样你以后能在两条现有规则之间插入一条新规则而不必 给整条策略重新编号。关于排序策略参见 规则优先级

3. verdict —— 动作

那一个必需字段。当一条规则匹配时,它的判定决定对该调用发生什么:
判定效果
allow放行该调用,会被记录。
audit放行并记录以供审查——通常的 default_verdict
deny拦截该调用。
sanitize从工具参数中脱敏匹配的子串,然后转发。
pending_approval为一名人工审查者挂起该调用。
cap_cost一旦一次智能体运行累积的花费越过一个上限就拒绝。
一个 denyinbound 执行面上返回 HTTP 400 firewall_blocked,或在 mcp 执行面上返回一个工具错误。一个被挂起的调用返回 HTTP 400 firewall_approval_pending,带一个智能体轮询的 id。在 影子模式 下,每个执行性判定都被降级为 audit,原因前缀为 [shadow] would …。关于完整的表和拦截形态参见 判定

4. stage —— 执行面

把规则钉到防火墙的执行面之一。把它留空,该规则就适用于所有执行面:
一个智能体在请求上向模型声明的工具。在模型甚至还没能选中它之前就拦截 一个危险工具。
模型在其回复中发出的 tool_calls
通过 防火墙 MCP 网关 路由的一次 tools/call
一个工具触及的出站 host / IP / CIDR——SSRF 与数据外泄的执行面。
某些判定 + 执行面搭配在保存时被拒绝,因为该判定无法在那里触发:cap_cost 是一个派发前的运行成本上限,在 responseegress 上是惰性的; pending_approval 只在 inbound 上挂起,所以一个明确的 response/egress 钉住被拒绝。编辑器隐藏这些组合;API 拒绝它们。参见 执行面

5. tool_name_glob —— 哪个工具

针对工具名的一个小而大小写敏感的 glob——shell.* 针对一整个家族、*.delete 针对一个跨服务器的动词、http_fetch 针对一个精确工具。空或 * 匹配每一个 工具。一个可选的技能名 glob(相同语法)在所属技能上 AND 一个第二条件, 所以你能信任来自一个内置技能的工具,并对来自一个社区技能的它设门。 完整的语法——前缀、后缀、中缀、精确,以及绊倒人的那些边界——是它自己的 参考:Glob 模式语法

6. args_match_json —— 用什么参数

glob 回答哪个工具args_match_json 回答用什么参数——即”拦截 shell.exec”与”只在命令是 rm -rf 时拦截 shell.exec”之间的差别。它的值 是一个携带一组 JSONPath 子句、全部 ANDJSON 编码字符串。解码后, 该子句对象看起来像:
{
  "clauses": [
    { "path": "$.command",    "op": "regex",      "value": "rm -rf|drop table" },
    { "path": "$.connection", "op": "in",         "value": ["prod", "replica"] },
    { "path": "$.ip",         "op": "cidr_match", "value": "10.0.0.0/8" }
  ]
}
在一个请求体中,该字段把那个对象作为一个转义字符串携带,例如 "args_match_json": "{\"clauses\":[{\"path\":\"$.command\",\"op\":\"regex\",\"value\":\"rm -rf\"}]}"。 运算符是 eqcontainsregexincidr_matchgtlt。一个 缺失的 args_match_json 是空真——该规则仅靠 glob 匹配。完整的谓词语言、 路径语法,以及一个损坏子句的故障关闭行为在 验证参数参数 cookbook 中。

7. egress_json —— 哪些目的地

用于 egress 执行面:一个持有 host / CIDR 白名单-黑名单的 JSON 编码 字符串,对照一个工具触及的出站目的地匹配。解码后,该对象看起来像:
{
  "deny":  ["169.254.169.254", "10.0.0.0/8"],
  "allow": ["api.openai.com"]
}
条目以一个 CIDR、一个 IP 字面量或一个大小写不敏感的主机名匹配。极性跟随 判定——带一个执行性判定,deny 列表定义什么被拦截,而 allow 从其中划出 例外。
Baseline 防火墙模板附带一条带有一个现成 SSRF / 云元数据黑名单的 egress 拒绝规则(元数据 IP 169.254.169.254、RFC-1918 范围、回环、链路本地,以及 metadata.google.internal),所以你不必手工编写那些。在其上添加你自己的 目的地以设门你想要的任何其他东西。关于完整配方参见 Egress 控制,关于它为什么重要参见 数据外泄

8. sanitize_json —— 脱敏参数

verdict = sanitize 时使用:一个点名哪些预设 / 自定义正则在清理后的调用 被转发之前从工具参数中脱敏匹配子串的 JSON 编码字符串——用于剥除一个 智能体掉进一个参数里的密钥或 PII 值而不拦截整个动作。解码后,该对象看起来 像:
{ "presets": ["email", "ssn_us"], "custom": ["foo-\\d+"] }
Sanitize 只脱敏参数——绝不脱敏工具返回的内容。一条 sanitize 规则必须 点名至少一个预设或自定义模式(一个空的脱敏器被拒绝)。在 inbound 执行面上 没有调用时参数可脱敏,所以那里的一个 sanitize 判定升级为一次 deny
关于预设库和脱敏形态参见 脱敏响应

9. cap_cost_cents —— 一个花费上限

verdict = cap_cost 时使用:一个逐规则的运行成本上限,一个以美元分 计的整数。当该规则匹配时,一旦该智能体运行累积的花费越过该上限,该调用就 被拒绝——一个针对失控循环的断路器,在事件中解析为 allowdeny。该上限 必须是明确且非负的,而该规则不能被钉到 responseegress(在那里判定 是惰性的)。完整行为在 封顶成本

10. 一条完整的规则

把字段拼到一起——拒绝 shell.exec,但只在命令看起来具破坏性时,限定到模型 发出的工具调用:
{
  "priority": 10,
  "label": "block destructive shell",
  "stage": "response",
  "tool_name_glob": "shell.exec",
  "args_match_json": "{\"clauses\":[{\"path\":\"$.command\",\"op\":\"regex\",\"value\":\"rm -rf|mkfs|:\\\\(\\\\)\\\\{\"}]}",
  "verdict": "deny",
  "notes": "fork bombs and recursive deletes only — plain shell.exec audits"
}
执行面匹配 response 执行面,glob 挑选 shell.exec,单个子句收窄到一个 破坏性命令,而判定拒绝。任何其命令匹配该正则的 shell.exec 落到下一条 规则或策略默认。把一个密钥绑定到该策略(密钥上的 firewall_policy_id), 它在下一次调用时上线——无需重新部署。
在你依赖一条规则之前确认它恰好在你预期的内容上触发: 测试规则 对一个样本工具调用 dry-run 一条 策略,并返回判定、匹配到的规则和原因,而不派发任何东西。

11. 字段如何组合

一个 verdict。其他一切都是可选的:一个空的 stage 匹配所有执行面、 一个空的 tool_name_glob(或 *)匹配每一个工具,而一个缺失的 args_match_json 匹配任何参数。一个裸的 { "verdict": "audit" } 是一个 有效的兜底。
它们 AND。一条规则只在它的执行面、工具 glob、技能 glob、参数子句和 egress 范围全部成立时触发。要表达 OR,写多条规则。
sanitize_json 只为 sanitize 判定读取;cap_cost_cents 只为 cap_costegress_json 只在 egress 执行面上。控制台在保存时验证这些 搭配,所以一条显示一种行为却永远无法执行它的规则无法被持久化。
更低的 priority 胜出(平局由规则 id 打破)——首个匹配生效,而评估 在那里停止。参见 规则优先级

相关

创建策略

编写你的第一条策略并绑定一个密钥。

Glob 语法

完整的工具名 glob 语法。

判定

每个判定以及一次拦截是什么样。

验证参数

深入讲解 JSONPath 参数子句。

管理策略

编辑、版本化和还原策略。

防火墙规则

完整的匹配引擎参考。
刚接触动作平面?从 防火墙概览 开始,或看它 如何与文本筛查搭配,参见 防护栏 vs 防火墙