メインコンテンツへスキップ
ファイアウォールルールは、ツール呼び出しを 2 つの軸でマッチ します:どのツールtool_name_glob)とどの引数JSONPathフィールドに対する args_match 句)です。 このページは、両方の正確な文法です — パターンが何にマッチし、何にマッチせず、各演算子が どう型を強制するか — そのため、コンソールでオーサリングするルールが、ここで読むとおりに 正確に振る舞います。 目玉のユースケース:鈍い「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 サーバーは 裸の動詞でツールを公開するため、サフィックスルールは両方の形状をカバーします)。 サフィックスはドットまたは文字列の先頭にアンカーされたままなので、*.execshell.execute にはマッチしません
*.shell.* は、任意の <server>.shell.<verb> 形状にマッチします — local.shell.execbyo.shell.run。インフィックスの各側に少なくとも 1 文字を 必要とするため、*.shell.* は裸の shell.shell. 単体にはマッチしません。 対称的な *.X.* 形状のみがインフィックスとして扱われます;foo.*.bar のような 混合パターンは exact match にフォールスルーします。
上記の 4 つのワイルドカード形状のいずれでもないパターン(リテラルなツール名、 または foo.*.bar のような不正な組み合わせを含む)は、exact で大文字小文字を区別する 文字列として比較されます。
? 単一文字ワイルドカード、文字クラス、トークン中の *(例:sh*l.exec)は ありません。4 つのサポートされる形状のいずれでもないパターンは、リテラルに マッチされます — sh*l.exec は、リテラルに sh*l.exec という名前のツールにのみ マッチします。正規表現の筋肉記憶ではなく、上記の形状でオーサリングしてください。

3. JSONPath 引数句

args_matchのセットであり、それぞれが {path, op, value} トリプルです。 path はツール呼び出しの引数オブジェクトへの JSONPath です;op は 7 つの演算子の ひとつです;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 でない、または値が演算子にとって間違った型である場合 — その句は false に評価され、ルールは発火せず、評価は次のルールまたはポリシーデフォルトに フォールスルーします。不正な引数は決して自動的に deny せず、エンジンをクラッシュ させることもありません。

4. 引数演算子

7 つの演算子、閉じたセットです。コンソールのバリデータとライブエンジンは、まったく 同じ語彙を共有するため、保存される句は実行される句です。
演算子比較するもの型ルール
eq完全な等価性。型付き:string↔string、bool↔bool、または number↔number。混合型は決してマッチしません。
contains部分文字列の包含。両側が string でなければならず;それ以外は非マッチです。空の値は任意の string にマッチします。
regexstring に対する RE2 パターン(線形時間、後方参照なし)。値と解決された引数の両方が string でなければなりません。無効なパターンは句を無効化します(決してマッチしません)。
inメンバーシップ — 値がリストの任意の要素と等しい。値は JSON 配列でなければなりません;各要素は eq セマンティクスで比較されます。
cidr_match解決された値が、所与のネットワーク内の IP である。値は CIDR 文字列(IPv4 または IPv6、例:10.0.0.0/8fd00::/8);引数は IP としてパースされなければなりません。
gtより大きい、数値。両側が数値に強制されなければなりません。数値らしい文字列は強制されません — 型不一致(非マッチ)です。
ltより小さい、数値。gt と同じ数値のみのルール。
gtlt は厳密に数値です。ツールが {"max_rows": "10000"}(文字列)を送る場合、 gt 5000 句は発火しません — 文字列は決して強制されません。数値は数値に対して 比較してください;文字列形状の値には regex または contains を使ってください。

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.* はルールをデータベースツールファミリーにスコープし; 3 つの句は AND されるため、判定(例えば deny)は、statement が破壊的でかつ接続が 2 つの名前付き本番ターゲットのひとつでかつそのホストがプライベートな 10.0.0.0/8 範囲に入るときにのみ発火します。パブリック IP 上の dev 接続に対する db.query は、 このルールに触れられずに通り過ぎます。
信頼する前に句を証明してください:ポリシーの Test タブは、サンプルのツール呼び出しを ドライランし、マッチしたルールと判定を表示します。何も永続化せず、何もディスパッチ しません。ファイアウォール可観測性を参照してください。

6. Egress(host / CIDR)ルール

上記の cidr_match 演算子は、ツールがその引数で報告する IP にマッチします。それは、 ツールが実際に到達するアウトバウンド宛先を host/CIDR の許可または拒否リストで評価する egress サーフェスルールとは異なります — 主要な SSRF と データ持ち出しの防御です。Egress ルールは 同じ CIDR 表記を使いますが、egress サーフェスに存在します;egress リスト形式については ファイアウォールルールを参照してください。
CIDR egress ルールを出荷するプリセットはありません — tight 自律性レベルは、ネットワーク 範囲ではなく、一般的なフェッチ形状のツール名http_fetchfetch_urlweb_searchrequest)を deny します。egress を特定の宛先にピン留めする必要があるとき、 自分自身の host/CIDR deny ルールをオーサリングしてください。

7. クイックリファレンス

Glob 形状

* すべて · foo.* プレフィックス · *.exec サフィックス(+ 裸の動詞)· *.X.* インフィックス · それ以外 exact。大文字小文字を区別。

JSONPath

$.foo · $.foo.bar · $.foo[0] · $.arr[1].k。ワイルドカード、 フィルタ、スライス、再帰的下降なし。

文字列演算子

eq(型付き)· contains(部分文字列)· regex(RE2)· in(リストメンバーシップ)。

数値とネットワーク演算子

gt / lt(数値のみ、文字列強制なし)· cidr_match (IPv4/IPv6 が範囲内)。

関連

ファイアウォールルール

完全なルールモデル — サーフェス、順序、サニタイザ、シーケンス、egress リスト。

危険なツール呼び出し

これらの句が防御する脅威、そしてルールをそれにスコープする方法。

判定用語集

ルールがマッチしたら allowauditdenysanitize、その他が何をするか。

なぜブロックされたのか?

特定のブロックを、発火したルールと句までトレースします。