1. L’ordine: priorità ascendente, vince il primo match
All’interno di una policy, le regole sono valutate in ordinepriority ASC, id ASC:
- La
prioritypiù bassa gira per prima. Una regola conpriority: 0è controllata prima di una conpriority: 10. Pensala come una posizione in coda, non un punteggio di forza — il numero più piccolo ha la prima parola. - Le parità si risolvono per id della regola. Due regole alla stessa
prioritygirano in ordine di creazione (id della regola ascendente), così la regola più vecchia vince la parità. Usa priorità distinte quando l’ordine conta davvero anziché affidarti alla risoluzione della parità per id. - Vince il primo match. Il motore si ferma alla prima regola le cui condizioni tutte valgono e applica il suo verdetto. Le regole più in basso nell’elenco non vengono mai consultate per quella chiamata.
- Nessun match → il verdetto di default. Se nulla corrisponde, si applica il
default_verdictdella policy —audita meno che tu non l’abbia cambiato.
Una regola corrisponde solo quando ogni condizione dichiarata vale
contemporaneamente: la superficie, il
glob sul nome del tool, il glob opzionale sulla
skill, le clausole opzionali sugli argomenti
e lo scope di egress (solo regole egress). Un match parziale è un non-match, e la
valutazione passa alla regola successiva.
2. Un esempio concreto: specifico prima di ampio
Il compito di ordinamento canonico è far sopravvivere un allow stretto a un deny ampio. Metti la regola specifica a una priorità più bassa così viene raggiunta per prima:shell.echo colpisce prima la Regola A (priorità 10),
corrisponde, ed è consentita — il motore non raggiunge mai la Regola B. Una chiamata
a shell.exec ricade attraverso A (il glob non corrisponde), colpisce la Regola
B, ed è negata.
Inverti le priorità e il deny ampio shell.* a priorità 10 catturerebbe prima
shell.echo, e il tuo allow a priorità 20 sarebbe codice morto. La regola
generale: il più specifico per primo, il più ampio per ultimo.
3. Verifica l’ordine prima di farci affidamento
Ragionare sulla priorità sulla carta è soggetto a errori una volta che una policy ha più di una manciata di regole. La sandbox Test fa girare il motore reale contro una chiamata a tool di esempio e ti dice non solo il verdetto ma quale regola ha vinto — così puoi confermare che la regola che ti aspettavi sia effettivamente scattata:Invia una chiamata di esempio
Inserisci un nome di tool (e gli argomenti, se le tue regole li ispezionano) ed
eseguila. Nulla viene dispatchato e nulla viene persistito — è un dry run.
4. L’applicazione della skill si sovrappone
La priorità delle regole decide il verdetto della regola vincente — ma quella non è sempre la risposta finale. Se la chiamata a tool è di proprietà di una skill governata, la modalità di applicazione della skill è applicata sopra il verdetto vincente, dopo la risoluzione del primo match:| Modalità della skill | Effetto sul verdetto vincente |
|---|---|
allow | Nessun cambiamento — il verdetto della regola regge. |
quarantine | Escala qualsiasi cosa al di sotto di deny a pending_approval; un deny esistente è lasciato com’è. |
block | Forza un deny indipendentemente dal verdetto della regola. |
quarantine può trasformare un allow di una regola in una
chiamata in attesa, e una skill block nega una chiamata anche quando nessuna
regola nomina i suoi tool. La quarantine escala soltanto — non declassa mai un deny
a qualcosa di più morbido. È per questo che una skill auto-rilevata come rischiosa
resta in quarantine finché non la revisioni, per quanto permissive siano le tue
regole.
5. Cose che non seguono il primo-match
Alcuni meccanismi stanno fuori dal percorso di priorità per-regola — sappi dove atterrano così non provi a ordinarli:cap_cost — risolto, non classificato
cap_cost — risolto, non classificato
Una regola
cap_cost sotto il suo tetto è
trattata come non corrispondente, così la valutazione continua alla regola
successiva anziché farla vincere il primo-match come un grant. Sopra il tetto si
risolve in un deny. Non fa mai short-circuit di una regola a priorità più bassa
solo per essere stata raggiunta.Sequenze — reattive, non inline
Sequenze — reattive, non inline
Una regola di sequenza corrisponde a una
catena di chiamate attraverso una finestra temporale, quindi è applicata
reattivamente da un matcher asincrono anziché sulla singola chiamata che completa
la catena. Illumina il feed degli eventi ma non vince il percorso del primo-match
per una chiamata individuale.
Shadow mode — applicata dopo il verdetto
Shadow mode — applicata dopo il verdetto
La shadow mode non cambia quale regola vince
— declassa il verdetto applicativo vincente a
audit (motivazione prefissata
[shadow] would …) dopo la risoluzione del primo match, così puoi misurare
l’impatto di una policy prima che modifichi il traffico.6. Mettendo tutto insieme
Per ogni chiamata a tool la risoluzione completa è:- Risolvi la policy — quella collegata alla chiave chiamante, o il default del workspace. Vedi scope.
- Percorri le regole in
priority ASC, id ASC— vince il primo match; nessun match →default_verdict. - Applica l’applicazione della skill — la modalità di una skill governata si
sovrappone al verdetto vincente (
blockforza il deny,quarantineescala). - Applica la shadow mode — se attiva, declassa i verdetti applicativi a
audit. - Registra l’evento — verdetto, superficie, tool e regola corrispondente atterrano nel feed degli eventi.
Modificare la priorità di una regola ha effetto sulla chiamata successiva per
ogni chiave collegata alla policy — nessun redeploy, nessuna modifica al codice
dell’agent. Ri-esegui la sandbox Test dopo aver
ri-ordinato per confermare il nuovo vincitore prima che il traffico live ci faccia
affidamento.
Dove andare dopo
Verdetti
Cosa fa effettivamente ogni verdetto vincente.
Sintassi glob
Come il matching sul nome del tool decide se una regola è anche solo un candidato.
Testa le regole
Dry-run di una policy e vedi quale regola vince.
Allow-listing dei tool
Il pattern default-deny che si appoggia di più sull’ordinamento.
