跳轉到主要內容
一條防火牆規則在兩個軸上匹配工具呼叫:哪個 工具(一個 tool_name_glob)和哪些引數args_match 子句,在 JSONPath 欄位上)。本頁是兩者的精確 語法——一個模式匹配什麼、不匹配什麼,以及每個 操作符如何強制類型——以便你在控制台撰寫的規則行為與你 在此讀到的完全一致。 頭號使用情境:把一個粗鈍的「封鎖 shell.exec」轉變成一個外科手術式的 「只在命令看起來像 rm -rf 時封鎖 shell.exec」。glob 挑選工具系列;引數操作符挑選其中危險的呼叫。
這是語法參考。關於這些子句位於規則上的何處、規則 排序和裁決,參見防火牆規則 深度參考。關於規則欄位本身,參見 防火牆概覽。

1. 此語法適用於何處

兩種形式都在防火牆規則上撰寫,在控制台中位於 /console/firewall(寫入需要 Developer+)。你從不直接呼叫 匹配器——閘道在每次工具呼叫時對照解析後的政策 評估它。一條規則當其表面、其 tool_name_glob、其可選的技能 glob,以及args_match 子句全部匹配時才匹配;第一個匹配者勝出。
一條沒有 args_match 子句的規則僅以工具名稱 glob 匹配。 只在工具名稱不夠具體時才加入引數子句。

2. 工具名稱 glob 語法

tool_name_glob 是一個刻意小巧、可預測的語法——而非完整 正規表示式。模式以區分大小寫匹配(MCP 工具名稱 慣例上是小寫加點,所以大小寫摺疊會在你從 Discovered tools 分頁複製名稱時讓你意外)。
一個空模式或一個裸 * 匹配所有工具。在一個 全捕捉規則上使用它,或改為依賴政策的 default_verdict
shell.* 匹配 shell.execshell.readshell.write。它 匹配裸的 shell(點是必需的——前綴 glob 只涵蓋命名空間化的子項)。
*.exec 匹配命名空間化的 shell.exec 以及裸的、 未命名空間化的 exec(供應商原生函式呼叫和 非命名空間化的 MCP 伺服器在裸動詞下暴露工具,所以 後綴規則涵蓋兩種形狀)。後綴錨定在點 或字串開頭,所以 *.exec 匹配 shell.execute
*.shell.* 匹配任何 <server>.shell.<verb> 形狀—— local.shell.execbyo.shell.run。它要求中綴 每一側至少一個字元,所以 *.shell.* 匹配裸的 shell 或單獨的 .shell.。只有對稱的 *.X.* 形狀被視為中綴;像 foo.*.bar 這樣的 混合模式會落入精確匹配。
任何不是上述四個萬用字元形狀之一的模式 (包括字面工具名稱,或像 foo.*.bar 這樣的畸形組合) 都被當成精確、區分大小寫的字串比較。
沒有 ? 單字元萬用字元、沒有字元類別,也沒有 詞中 *(例如 sh*l.exec)。一個不是四個 支援形狀之一的模式被字面匹配——sh*l.exec 只匹配一個工具 字面命名為 sh*l.exec。用上述形狀撰寫,而非 正規表示式肌肉記憶。

3. JSONPath 引數子句

args_match 是一組子句,每個是一個 {path, op, value} 三元組。 path 是進入工具呼叫引數物件的一個 JSONPath;op 是 七個操作符之一;value 是要比較的對象。一條規則中的所有子句都被 AND 連接在一起——每個子句都必須匹配,規則才會觸發。
{
  "clauses": [
    {"path": "$.command", "op": "regex", "value": "rm -rf|drop table"},
    {"path": "$.connection", "op": "in", "value": ["prod", "replica"]}
  ]
}

支援的 JSONPath 子集

形狀匹配
$.foo一個頂層鍵。
$.foo.bar一個巢狀鍵。
$.foo[0]按索引取得的陣列元素。
$.arr[1].k索引再鍵(上述的組合)。
那就是整個子集。沒有萬用字元($.*)、過濾器 ($.foo[?(...)])、切片($.foo[0:2]),或遞迴下降($..foo)。
路徑上失敗封閉。如果一個子句的路徑解析為空—— 鍵缺失、引數不是有效的 JSON,或值對操作符是 錯誤類型——該子句評估為,規則 觸發,評估落入下一條規則或政策 預設值。畸形引數從不自動拒絕,也從不讓引擎崩潰。

4. 引數操作符

七個操作符,一個封閉集合。控制台驗證器和即時引擎共用 完全相同的詞彙,所以一個能儲存的子句就是一個能執行的子句。
操作符比較類型規則
eq精確相等。型別化:string↔string、bool↔bool 或 number↔number。混合類型從不匹配。
contains子字串包含。兩側都必須是字串;其他任何東西都是非匹配。空值匹配任何字串。
regex一個 RE2 模式(線性時間,無反向引用)對著一個字串。value 和解析的引數都必須是字串。無效模式停用該子句(從不匹配)。
in成員資格——value 等於清單的任一元素。value 必須是一個 JSON 陣列;每個元素以 eq 語意比較。
cidr_match解析的值是給定網路內的一個 IP。value 是一個 CIDR 字串(IPv4 或 IPv6,例如 10.0.0.0/8fd00::/8);引數必須解析為一個 IP。
gt大於,數值。兩側都必須強制為數字。一個看起來像數字的字串不被強制——它是類型不匹配(非匹配)。
lt小於,數值。gt 相同的僅數值規則。
gtlt 嚴格是數值的。如果一個工具發送 {"max_rows": "10000"} (一個字串),一個 gt 5000 子句不會觸發——該字串從不被 強制。把數字對著數字比較;對字串形狀的值使用 regexcontains

5. 一個演練範例

封鎖一次破壞性的資料庫匯出,但只在它瞄準一個生產 連線、經由私有網路主機時:
{
  "tool_name_glob": "db.*",
  "args_match": {
    "clauses": [
      {"path": "$.statement", "op": "regex", "value": "(?i)drop|truncate|delete from"},
      {"path": "$.connection.name", "op": "in", "value": ["prod", "prod-replica"]},
      {"path": "$.connection.host_ip", "op": "cidr_match", "value": "10.0.0.0/8"}
    ]
  }
}
從上往下讀它:glob db.* 把規則範圍化到資料庫工具系列; 三個子句 AND 在一起,所以裁決(比如說一個 deny 在語句是破壞性的連線是兩個命名的 prod 目標之一其主機落在私有 10.0.0.0/8 範圍內時觸發。一個 對著公開 IP 上的 dev 連線的 db.query 會毫髮無傷地越過這條規則。
在你信任子句之前先證明它:政策上的 Test 分頁試執行一個 樣本工具呼叫並顯示匹配的規則和裁決,什麼都不持久化、 什麼都不派發。參見防火牆可觀測性

6. Egress(主機 / CIDR)規則

上面的 cidr_match 操作符匹配一個工具在其 引數中報告的 IP。那不同於一條 egress 表面規則,後者評估 一個工具實際觸及的外向目的地,用一個主機/CIDR 允許或 拒絕清單——主要的 SSRF 和資料外洩 防禦。Egress 規則使用相同的 CIDR 記法但位於 egress 表面;egress 清單格式參見防火牆規則
沒有預設值為你出貨 CIDR egress 規則——tight 自主等級拒絕 常見的擷取形狀工具名稱http_fetchfetch_urlweb_searchrequest),而非網路範圍。當你需要把 egress 釘到特定目的地時,撰寫你自己的主機/CIDR 拒絕規則。

7. 快速參考

Glob 形狀

* 全部 · foo.* 前綴 · *.exec 後綴(+ 裸動詞)· *.X.* 中綴 · 其他任何 精確。區分大小寫。

JSONPath

$.foo · $.foo.bar · $.foo[0] · $.arr[1].k。無萬用字元、 過濾器、切片或遞迴下降。

字串操作符

eq(型別化)· contains(子字串)· regex(RE2)· in(清單成員資格)。

數值與網路操作符

gt / lt(僅數值,無字串強制)· cidr_match (IPv4/IPv6 在範圍內)。

相關

防火牆規則

完整的規則模型——表面、排序、淨化器、序列和 egress 清單。

危險的工具呼叫

這些子句防禦的威脅,以及如何把規則範圍化到它。

裁決詞彙表

一旦規則匹配,allowauditdenysanitize 等做什麼。

為何被攔下?

將特定封鎖追溯到觸發的規則和子句。