tool_name_glob) e quali argomenti (clausole args_match
sui campi JSONPath). Questa pagina è la grammatica
precisa per entrambi — cosa corrisponde un pattern, cosa non corrisponde e come ogni
operatore coercizza i tipi — così una regola che crei nella console si comporta
esattamente come la leggi qui.
Il caso d’uso di punta: trasformare uno smussato “blocca shell.exec” in un chirurgico
“blocca shell.exec solo quando il comando assomiglia a rm -rf”. Il glob sceglie
la famiglia di tool; gli operatori sugli argomenti scelgono la chiamata pericolosa al suo
interno.
Questo è il riferimento di sintassi. Per dove vivono queste clausole su una regola,
l’ordinamento delle regole e i verdetti, vedi il riferimento approfondito
Regole del firewall. Per i campi della regola in sé, vedi
la panoramica Firewall.
1. Dove si applica questa sintassi
Entrambe le forme sono create su una regola del firewall, nella console sotto/console/firewall (le scritture richiedono Developer+). Non chiami mai il matcher
direttamente — il gateway lo valuta su ogni chiamata a tool contro la
policy risolta. Una regola corrisponde
quando la sua superficie, il suo tool_name_glob, il suo glob opzionale sulla skill
e le sue clausole args_match tutti corrispondono; vince il primo match.
2. Grammatica dei glob sul nome del tool
Iltool_name_glob è una grammatica deliberatamente piccola e prevedibile — non una
regex completa. I pattern sono confrontati in modo case-sensitive (i nomi dei tool
MCP sono convenzionalmente in minuscolo-con-punti, quindi un case-fold ti sorprenderebbe
quando copi un nome dalla tab Discovered tools).
* (o vuoto) — corrisponde a ogni tool
* (o vuoto) — corrisponde a ogni tool
Un pattern vuoto o un nudo
* corrisponde a tutti i tool. Usalo su una regola
catch-all, o affidati invece al default_verdict della policy.foo.* — match di prefisso
foo.* — match di prefisso
shell.* corrisponde a shell.exec, shell.read, shell.write. Non
corrisponde al nudo shell (il punto è richiesto — un glob di prefisso copre solo i
figli con namespace).*.exec — match di suffisso
*.exec — match di suffisso
*.exec corrisponde al shell.exec con namespace e al nudo exec senza
namespace (le function call native dei provider e gli MCP server senza namespace
espongono i tool sotto il verbo nudo, quindi una regola di suffisso copre entrambe le
forme). Il suffisso resta ancorato a un punto o all’inizio della stringa, quindi
*.exec non corrisponde a shell.execute.*.X.* — match centrale (infix)
*.X.* — match centrale (infix)
*.shell.* corrisponde a qualsiasi forma <server>.shell.<verb> —
local.shell.exec, byo.shell.run. Richiede almeno un carattere su ciascun lato
dell’infisso, quindi *.shell.* non corrisponde al nudo shell o a .shell. da
solo. Solo la forma simmetrica *.X.* è trattata come infisso; un pattern misto come
foo.*.bar ricade sul match esatto.qualsiasi altra cosa — match esatto
qualsiasi altra cosa — match esatto
Qualsiasi pattern che non sia una delle quattro forme wildcard qui sopra (incluso un
nome di tool letterale, o un combo malformato come
foo.*.bar) è confrontato come una
stringa esatta, case-sensitive.3. Clausole JSONPath sugli argomenti
args_match è un insieme di clausole, ciascuna una tripla {path, op, value}. Il
path è un JSONPath nell’oggetto argomenti della chiamata a tool; op è uno di sette
operatori; value è ciò con cui confrontare. Tutte le clausole in una regola sono in
AND tra loro — ogni clausola deve corrispondere perché la regola scatti.
Sottoinsieme JSONPath supportato
| Forma | Corrisponde |
|---|---|
$.foo | Una chiave di primo livello. |
$.foo.bar | Una chiave annidata. |
$.foo[0] | Un elemento di array per indice. |
$.arr[1].k | Indice poi chiave (combinazioni delle precedenti). |
$.*), filtri
($.foo[?(...)]), slice ($.foo[0:2]) o discesa ricorsiva ($..foo).
Fail-closed sul path. Se il path di una clausola si risolve in nulla — la chiave
manca, gli argomenti non sono JSON valido, o il valore è del tipo sbagliato per
l’operatore — quella clausola valuta a false, la regola non scatta, e la
valutazione ricade sulla regola successiva o sul default della policy. Un argomento
malformato non auto-nega mai e non fa mai crashare il motore.
4. Operatori sugli argomenti
Sette operatori, un set chiuso. Il validatore della console e il motore live condividono esattamente lo stesso vocabolario, quindi una clausola che si salva è una clausola che gira.| Operatore | Confronta | Regole di tipo |
|---|---|---|
eq | Uguaglianza esatta. | Tipizzato: string↔string, bool↔bool, o number↔number. Tipi misti non corrispondono mai. |
contains | Contenimento di sottostringa. | Entrambi i lati devono essere stringhe; qualsiasi altra cosa è un non-match. Un valore vuoto corrisponde a qualsiasi stringa. |
regex | Un pattern RE2 (tempo lineare, no backreference) contro una stringa. | Valore e arg risolto devono essere entrambi stringhe. Un pattern non valido disabilita la clausola (non corrisponde mai). |
in | Appartenenza — il valore è uguale a qualsiasi elemento di una lista. | Il valore deve essere un array JSON; ogni elemento confronta con semantica eq. |
cidr_match | Il valore risolto è un IP dentro la rete data. | Il valore è una stringa CIDR (IPv4 o IPv6, es. 10.0.0.0/8, fd00::/8); l’arg deve parsare come IP. |
gt | Maggiore-di, numerico. | Entrambi i lati devono coercizzare a un numero. Una stringa che sembra numerica non è coercizzata — è un mismatch di tipo (non-match). |
lt | Minore-di, numerico. | Stessa regola solo-numerica di gt. |
5. Un esempio svolto
Blocca un export di database distruttivo, ma solo quando colpisce una connessione di produzione su un host di rete privata:db.* restringe la regola alla famiglia dei tool di
database; le tre clausole in AND insieme così il verdetto (un deny, diciamo) scatta
solo quando lo statement è distruttivo e la connessione è uno di due target prod
nominati e il suo host cade nel range privato 10.0.0.0/8. Una db.query contro una
connessione dev su un IP pubblico scivola oltre questa regola intatta.
6. Regole di egress (host / CIDR)
L’operatorecidr_match qui sopra corrisponde a un IP che un tool riporta nei suoi
argomenti. Questo è diverso da una regola sulla superficie egress, che valuta la
destinazione in uscita che un tool effettivamente raggiunge con una allow o deny list di
host/CIDR — la difesa principale da SSRF ed
esfiltrazione di dati. Le regole di egress usano
la stessa notazione CIDR ma vivono sulla superficie egress; vedi
Regole del firewall per il formato dell’elenco di egress.
Nessun preset fornisce regole di egress CIDR per te — il livello di autonomia
tight
nega i comuni nomi di tool in forma di fetch (http_fetch, fetch_url,
web_search, request), non i range di rete. Crea la tua regola di deny host/CIDR quando
hai bisogno di fissare l’egress a destinazioni specifiche.7. Riferimento rapido
Forme di glob
* tutti · foo.* prefisso · *.exec suffisso (+ verbo nudo) · *.X.* infisso ·
qualsiasi altra cosa esatto. Case-sensitive.JSONPath
$.foo · $.foo.bar · $.foo[0] · $.arr[1].k. No wildcard, filtri, slice o
discesa ricorsiva.Operatori su stringhe
eq (tipizzato) · contains (sottostringa) · regex (RE2) · in (appartenenza a
lista).Operatori numerici e di rete
gt / lt (solo numerici, no coercizione di stringhe) · cidr_match (IPv4/IPv6 nel
range).Correlati
Regole del firewall
Il modello completo delle regole — superfici, ordinamento, sanitizer, sequenze ed
elenchi di egress.
Chiamate a tool pericolose
La minaccia da cui queste clausole difendono, e come restringere una regola ad essa.
Glossario dei verdetti
Cosa fanno
allow, audit, deny, sanitize e gli altri una volta che una regola
corrisponde.Perché è stato bloccato?
Risali da un block specifico alla regola e alla clausola che sono scattate.
