Przejdź do głównej treści
Reguła firewall dopasowuje wywołanie narzędzia na dwóch osiach: które narzędzie (tool_name_glob) i które argumenty (klauzule args_match nad polami JSONPath). Ta strona to precyzyjna gramatyka obu — co wzorzec dopasowuje, czego nie i jak każdy operator koercjonuje typy — aby reguła, którą autorujesz w konsoli, zachowywała się dokładnie tak, jak ją tu czytasz. Sztandarowy przypadek użycia: zamień tępe „zablokuj shell.exec” w chirurgiczne „zablokuj shell.exec tylko gdy polecenie wygląda jak rm -rf”. Glob wybiera rodzinę narzędzi; operatory argumentów wybierają niebezpieczne wywołanie w niej.
To referencja składni. Po to, gdzie te klauzule żyją na regule, kolejność reguł i werdykty, zobacz głęboką referencję Reguły Firewall. Po same pola reguły zobacz przegląd Firewall.

1. Gdzie ta składnia ma zastosowanie

Obie formy są autorowane na regule firewalla, w konsoli pod /console/firewall (zapisy wymagają Developer+). Nigdy nie wywołujesz matchera bezpośrednio — brama ewaluuje go na każdym wywołaniu narzędzia wobec rozwiązanej polityki. Reguła pasuje, gdy jej powierzchnia, tool_name_glob, opcjonalny glob skilla oraz klauzule args_match wszystkie pasują; wygrywa pierwsze dopasowanie.
Reguła bez klauzul args_match pasuje na samym globie nazwy narzędzia. Dodaj klauzule argumentów tylko, gdy nazwa narzędzia nie jest wystarczająco specyficzna.

2. Gramatyka glob nazwy narzędzia

tool_name_glob to celowo mała, przewidywalna gramatyka — nie pełny regex. Wzorce są dopasowywane z uwzględnieniem wielkości liter (nazwy narzędzi MCP są konwencjonalnie pisane małymi literami z kropkami, więc składanie wielkości liter zaskoczyłoby cię, gdy kopiujesz nazwę z zakładki Discovered tools).
Pusty wzorzec lub goły * dopasowuje wszystkie narzędzia. Użyj go na regule łapiącej wszystko lub polegaj zamiast tego na default_verdict polityki.
shell.* dopasowuje shell.exec, shell.read, shell.write. Nie dopasowuje gołego shell (kropka jest wymagana — glob przedrostka pokrywa tylko dzieci w przestrzeni nazw).
*.exec dopasowuje narzędzie w przestrzeni nazw shell.exec oraz gołe, nieumieszczone w przestrzeni nazw exec (natywne dla dostawcy wywołania funkcji i serwery MCP bez przestrzeni nazw wystawiają narzędzia pod gołym czasownikiem, więc reguła przyrostka pokrywa oba kształty). Przyrostek pozostaje zakotwiczony na kropce lub początku łańcucha, więc *.exec nie dopasowuje shell.execute.
*.shell.* dopasowuje dowolny kształt <server>.shell.<verb>local.shell.exec, byo.shell.run. Wymaga co najmniej jednego znaku po każdej stronie infiksu, więc *.shell.* nie dopasowuje gołego shell ani samego .shell.. Tylko symetryczny kształt *.X.* jest traktowany jako infiks; mieszany wzorzec jak foo.*.bar przechodzi do dopasowania dokładnego.
Każdy wzorzec, który nie jest jednym z czterech kształtów wieloznacznych powyżej (w tym dosłowna nazwa narzędzia lub zniekształcona kombinacja jak foo.*.bar), jest porównywany jako dokładny łańcuch z uwzględnieniem wielkości liter.
Nie ma wieloznacznika pojedynczego znaku ?, klas znaków ani * w środku tokenu (np. sh*l.exec). Wzorzec, który nie jest jednym z czterech wspieranych kształtów, jest dopasowywany dosłownie — sh*l.exec dopasowuje tylko narzędzie dosłownie nazwane sh*l.exec. Autoruj z kształtami powyżej, nie z pamięcią mięśniową regexu.

3. Klauzule argumentów JSONPath

args_match to zestaw klauzul, każda trójka {path, op, value}. path to JSONPath do obiektu argumentów wywołania narzędzia; op to jeden z siedmiu operatorów; value to to, z czym porównać. Wszystkie klauzule w regule są połączone AND — każda klauzula musi pasować, by reguła odpaliła.
{
  "clauses": [
    {"path": "$.command", "op": "regex", "value": "rm -rf|drop table"},
    {"path": "$.connection", "op": "in", "value": ["prod", "replica"]}
  ]
}

Wspierany podzbiór JSONPath

KształtDopasowuje
$.fooKlucz najwyższego poziomu.
$.foo.barZagnieżdżony klucz.
$.foo[0]Element tablicy po indeksie.
$.arr[1].kIndeks, potem klucz (kombinacje powyższych).
To cały podzbiór. Nie ma wieloznaczników ($.*), filtrów ($.foo[?(...)]), wycinków ($.foo[0:2]) ani rekurencyjnego zstępowania ($..foo).
Fail-closed na ścieżce. Jeśli ścieżka klauzuli rozwiązuje się do niczego — klucz brakuje, argumenty nie są poprawnym JSON-em lub wartość jest złego typu dla operatora — ta klauzula ewaluuje się do false, reguła nie odpala, a ewaluacja przechodzi do następnej reguły lub domyślnej polityki. Zniekształcony argument nigdy nie auto-odmawia i nigdy nie wysypuje silnika.

4. Operatory argumentów

Siedem operatorów, zamknięty zestaw. Walidator konsoli i żywy silnik dzielą dokładnie to samo słownictwo, więc klauzula, która się zapisuje, to klauzula, która działa.
OperatorPorównujeReguły typów
eqDokładna równość.Typowane: string↔string, bool↔bool lub number↔number. Mieszane typy nigdy nie pasują.
containsZawieranie podłańcucha.Obie strony muszą być stringami; cokolwiek innego to niedopasowanie. Pusta wartość dopasowuje dowolny string.
regexWzorzec RE2 (czas liniowy, brak backreferencji) wobec stringa.Wartość i rozwiązany arg muszą oba być stringami. Niepoprawny wzorzec wyłącza klauzulę (nigdy nie dopasowuje).
inPrzynależność — wartość równa się dowolnemu elementowi listy.Wartość musi być tablicą JSON; każdy element porównuje się z semantyką eq.
cidr_matchRozwiązana wartość to IP wewnątrz danej sieci.Wartość to string CIDR (IPv4 lub IPv6, np. 10.0.0.0/8, fd00::/8); arg musi parsować się jako IP.
gtWiększe-niż, numerycznie.Obie strony muszą koercjonować się do liczby. Wyglądający numerycznie string nie jest koercjonowany — to niedopasowanie typu.
ltMniejsze-niż, numerycznie.Ta sama reguła tylko-numeryczna co gt.
gt i lt są ściśle numeryczne. Jeśli narzędzie wysyła {"max_rows": "10000"} (string), klauzula gt 5000 nie odpala — string nigdy nie jest koercjonowany. Porównuj liczby z liczbami; użyj regex lub contains dla wartości w kształcie stringa.

5. Przepracowany przykład

Zablokuj destrukcyjny eksport bazy danych, ale tylko gdy celuje w produkcyjne połączenie nad hostem sieci prywatnej:
{
  "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"}
    ]
  }
}
Przeczytaj to z góry na dół: glob db.* zakresuje regułę do rodziny narzędzi bazy danych; trzy klauzule łączą się AND, więc werdykt (powiedzmy deny) odpala tylko gdy instrukcja jest destrukcyjna oraz połączenie jest jednym z dwóch nazwanych celów prod oraz jego host wpada w prywatny zakres 10.0.0.0/8. db.query wobec połączenia dev na publicznym IP przemyka obok tej reguły nietknięte.
Udowodnij klauzulę, zanim jej zaufasz: zakładka Test na polityce uruchamia dry-run przykładowego wywołania narzędzia i pokazuje dopasowaną regułę i werdykt, nie persystując niczego i nie dyspozytując niczego. Zobacz Obserwowalność Firewall.

6. Reguły egress (host / CIDR)

Operator cidr_match powyżej dopasowuje IP, które narzędzie zgłasza w swoich argumentach. To różni się od reguły na powierzchni egress, która ewaluuje wychodzący cel, do którego narzędzie faktycznie sięga, listą dozwolonych lub zakazanych hostów/CIDR — podstawowa obrona przed SSRF i eksfiltracją danych. Reguły egress używają tej samej notacji CIDR, ale żyją na powierzchni egress; zobacz Reguły Firewall po format listy egress.
Żaden preset nie dostarcza reguł egress CIDR za ciebie — poziom autonomii tight odmawia powszechnym nazwom narzędzi w kształcie fetch (http_fetch, fetch_url, web_search, request), nie zakresom sieci. Zautoruj własną regułę odmowy hosta/CIDR, gdy potrzebujesz przypiąć egress do konkretnych celów.

7. Szybka referencja

Kształty glob

* wszystkie · foo.* przedrostek · *.exec przyrostek (+ goły czasownik) · *.X.* infiks · cokolwiek innego dokładne. Z uwzględnieniem wielkości liter.

JSONPath

$.foo · $.foo.bar · $.foo[0] · $.arr[1].k. Bez wieloznaczników, filtrów, wycinków ani rekurencyjnego zstępowania.

Operatory stringów

eq (typowany) · contains (podłańcuch) · regex (RE2) · in (przynależność do listy).

Operatory numeryczne i sieciowe

gt / lt (tylko numeryczne, bez koercji stringa) · cidr_match (IPv4/IPv6 w zakresie).

Powiązane

Reguły Firewall

Pełny model reguł — powierzchnie, kolejność, sanityzatory, sekwencje i listy egress.

Niebezpieczne wywołania narzędzi

Zagrożenie, przed którym te klauzule bronią, i jak zakresować do niego regułę.

Słownik werdyktów

Co robią allow, audit, deny, sanitize i reszta, gdy reguła dopasuje.

Dlaczego to zostało zablokowane?

Prześledź konkretną blokadę z powrotem do reguły i klauzuli, które odpaliły.