tool_name_glob)とどの引数
(JSONPathフィールドに対する args_match 句)です。
このページは、両方の正確な文法です — パターンが何にマッチし、何にマッチせず、各演算子が
どう型を強制するか — そのため、コンソールでオーサリングするルールが、ここで読むとおりに
正確に振る舞います。
目玉のユースケース:鈍い「shell.exec をブロック」を、外科的な「コマンドが rm -rf の
ように見えるときだけ shell.exec をブロック」に変えることです。glob はツール
ファミリーを選び;引数演算子はその中の危険な呼び出しを選びます。
これは構文リファレンスです。これらの句がルール上のどこに存在するか、ルールの順序、
判定については、ファイアウォールルールの詳細リファレンスを
参照してください。ルールフィールドそのものについては、
ファイアウォール概要を参照してください。
1. この構文がどこに適用されるか
両方の形式は、コンソールの/console/firewall 下でファイアウォールルールにオーサリング
されます(書き込みは Developer+ が必要)。マッチャーを直接呼び出すことはありません
— ゲートウェイが解決されたポリシーに対して、
すべてのツール呼び出しでそれを評価します。ルールは、そのサーフェス、その
tool_name_glob、そのオプションのスキル glob、そしてその args_match 句がすべて
マッチしたときにマッチします;最初にマッチしたものが勝ちます。
2. ツール名 glob 文法
tool_name_glob は意図的に小さく予測可能な文法です — 完全な正規表現ではありません。
パターンは大文字小文字を区別してマッチされます(MCP ツール名は慣習的に小文字と
ドットなので、Discovered tools タブから名前をコピーするとき、ケースフォールドは
驚かせるでしょう)。
* (または空)— すべてのツールにマッチ
* (または空)— すべてのツールにマッチ
空のパターンまたは裸の
* は、すべてのツールにマッチします。キャッチオールルールに
使うか、代わりにポリシーの default_verdict に頼ってください。foo.* — プレフィックスマッチ
foo.* — プレフィックスマッチ
shell.* は shell.exec、shell.read、shell.write にマッチします。裸の shell
にはマッチしません(ドットが必須です — プレフィックス glob は名前空間化された
子のみをカバーします)。*.exec — サフィックスマッチ
*.exec — サフィックスマッチ
*.exec は、名前空間化された shell.exec と、裸の名前空間化されていない exec
にマッチします(プロバイダネイティブの関数呼び出しと非名前空間化 MCP サーバーは
裸の動詞でツールを公開するため、サフィックスルールは両方の形状をカバーします)。
サフィックスはドットまたは文字列の先頭にアンカーされたままなので、*.exec は
shell.execute にはマッチしません。*.X.* — 中間(インフィックス)マッチ
*.X.* — 中間(インフィックス)マッチ
*.shell.* は、任意の <server>.shell.<verb> 形状にマッチします —
local.shell.exec、byo.shell.run。インフィックスの各側に少なくとも 1 文字を
必要とするため、*.shell.* は裸の shell や .shell. 単体にはマッチしません。
対称的な *.X.* 形状のみがインフィックスとして扱われます;foo.*.bar のような
混合パターンは exact match にフォールスルーします。それ以外 — exact match
それ以外 — exact match
上記の 4 つのワイルドカード形状のいずれでもないパターン(リテラルなツール名、
または
foo.*.bar のような不正な組み合わせを含む)は、exact で大文字小文字を区別する
文字列として比較されます。3. JSONPath 引数句
args_match は句のセットであり、それぞれが {path, op, value} トリプルです。
path はツール呼び出しの引数オブジェクトへの JSONPath です;op は 7 つの演算子の
ひとつです;value は何と比較するかです。ルール内のすべての句は AND されます
— ルールが発火するには、すべての句がマッチしなければなりません。
サポートされる 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 にマッチします。 |
regex | string に対する RE2 パターン(線形時間、後方参照なし)。 | 値と解決された引数の両方が string でなければなりません。無効なパターンは句を無効化します(決してマッチしません)。 |
in | メンバーシップ — 値がリストの任意の要素と等しい。 | 値は JSON 配列でなければなりません;各要素は eq セマンティクスで比較されます。 |
cidr_match | 解決された値が、所与のネットワーク内の IP である。 | 値は CIDR 文字列(IPv4 または IPv6、例:10.0.0.0/8、fd00::/8);引数は IP としてパースされなければなりません。 |
gt | より大きい、数値。 | 両側が数値に強制されなければなりません。数値らしい文字列は強制されません — 型不一致(非マッチ)です。 |
lt | より小さい、数値。 | gt と同じ数値のみのルール。 |
5. ひとつの実例
破壊的なデータベースエクスポートをブロックしますが、それがプライベートネットワーク ホスト上の本番接続をターゲットにするときだけ:db.* はルールをデータベースツールファミリーにスコープし;
3 つの句は AND されるため、判定(例えば deny)は、statement が破壊的でかつ接続が
2 つの名前付き本番ターゲットのひとつでかつそのホストがプライベートな 10.0.0.0/8
範囲に入るときにのみ発火します。パブリック IP 上の dev 接続に対する db.query は、
このルールに触れられずに通り過ぎます。
6. Egress(host / CIDR)ルール
上記のcidr_match 演算子は、ツールがその引数で報告する IP にマッチします。それは、
ツールが実際に到達するアウトバウンド宛先を host/CIDR の許可または拒否リストで評価する
egress サーフェスルールとは異なります — 主要な SSRF と
データ持ち出しの防御です。Egress ルールは
同じ CIDR 表記を使いますが、egress サーフェスに存在します;egress リスト形式については
ファイアウォールルールを参照してください。
CIDR egress ルールを出荷するプリセットはありません —
tight 自律性レベルは、ネットワーク
範囲ではなく、一般的なフェッチ形状のツール名(http_fetch、fetch_url、
web_search、request)を 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 リスト。
危険なツール呼び出し
これらの句が防御する脅威、そしてルールをそれにスコープする方法。
判定用語集
ルールがマッチしたら
allow、audit、deny、sanitize、その他が何をするか。なぜブロックされたのか?
特定のブロックを、発火したルールと句までトレースします。
