1. Kolejność: priorytet rosnąco, wygrywa pierwsze dopasowanie
Wewnątrz polityki reguły są ewaluowane w kolejnościpriority ASC, id ASC:
- Niższy
prioritydziała pierwszy. Reguła zpriority: 0jest sprawdzana przed tą zpriority: 10. Myśl o tym jak o pozycji w kolejce, a nie wyniku siły — mniejsza liczba ma pierwsze słowo. - Remisy rozstrzyga id reguły. Dwie reguły o tym samym
prioritydziałają w kolejności utworzenia (rosnące id reguły), więc starsza reguła wygrywa remis. Używaj odrębnych priorytetów, gdy kolejność faktycznie ma znaczenie, zamiast polegać na rozstrzyganiu remisu po id. - Wygrywa pierwsze dopasowanie. Silnik zatrzymuje się na pierwszej regule, której warunki wszystkie zachodzą, i stosuje jej werdykt. Reguły dalej na liście nigdy nie są konsultowane dla tego wywołania.
- Brak dopasowania → werdykt domyślny. Jeśli nic nie pasuje, stosuje się
default_verdictpolityki —audit, chyba że go zmieniłeś.
Reguła dopasowuje tylko, gdy każdy zadeklarowany warunek zachodzi naraz:
powierzchnia,
glob nazwy narzędzia, opcjonalny glob
skilla, opcjonalne klauzule argumentów
oraz zakres egress (tylko reguły egress). Częściowe dopasowanie to brak
dopasowania, a ewaluacja przechodzi do następnej reguły.
2. Jeden konkretny przykład: konkretne przed szerokim
Kanoniczne zadanie porządkowania to pozwolenie wąskiemu allow przetrwać szerokie deny. Umieść konkretną regułę przy niższym priorytecie, by była osiągnięta pierwsza:shell.echo trafia najpierw w Regułę A (priorytet 10),
dopasowuje i jest dozwolone — silnik nigdy nie dochodzi do Reguły B. Wywołanie
shell.exec spada przez A (glob nie dopasowuje), trafia w Regułę B i jest
odmawiane.
Odwróć priorytety, a szerokie deny shell.* przy priorytecie 10
wychwyciłoby najpierw shell.echo, a twoje allow przy priorytecie 20 byłoby
martwym kodem. Reguła kciuka: najbardziej konkretne pierwsze, najszersze
ostatnie.
3. Zweryfikuj kolejność, zanim na niej polegniesz
Rozumowanie o priorytecie na papierze jest podatne na błędy, gdy polityka ma więcej niż garstkę reguł. Piaskownica Test uruchamia prawdziwy silnik wobec przykładowego wywołania narzędzia i mówi ci nie tylko werdykt, ale która reguła wygrała — więc możesz potwierdzić, że reguła, której oczekiwałeś, faktycznie odpaliła:Prześlij przykładowe wywołanie
Wprowadź nazwę narzędzia (i argumenty, jeśli twoje reguły je
inspekcjonują) i uruchom. Nic nie jest dyspozytowane i nic persystowane —
to dry run.
4. Egzekwowanie skilla jedzie na wierzchu
Priorytet reguł decyduje o werdykcie wygrywającej reguły — ale to nie zawsze ostateczna odpowiedź. Jeśli wywołanie narzędzia jest własnością zarządzanego skilla, tryb egzekwowania skilla jest stosowany na wierzchu wygrywającego werdyktu, po rozwiązaniu pierwszego-dopasowania:| Tryb skilla | Efekt na wygrywający werdykt |
|---|---|
allow | Bez zmiany — werdykt reguły obowiązuje. |
quarantine | Eskaluje wszystko poniżej deny do pending_approval; istniejące deny jest zostawione bez zmian. |
block | Wymusza deny niezależnie od werdyktu reguły. |
quarantine może zamienić allow reguły we wstrzymane wywołanie,
a skill block odmawia wywołania, nawet gdy żadna reguła nie nazywa jego
narzędzi. Quarantine tylko eskaluje — nigdy nie degraduje deny do czegoś
łagodniejszego. To dlatego skill auto-wykryty jako ryzykowny pozostaje w
kwarantannie, dopóki go nie przejrzysz, niezależnie od tego, jak permisywne są
twoje reguły.
5. Rzeczy, które nie jadą na pierwszym dopasowaniu
Kilka mechanizmów siedzi poza przejściem priorytetów per reguła — wiedz, gdzie lądują, byś nie próbował ich porządkować:cap_cost — rozwiązywany, nie rangowany
cap_cost — rozwiązywany, nie rangowany
Reguła
cap_cost poniżej swojego limitu
jest traktowana jako niedopasowanie, więc ewaluacja kontynuuje do
następnej reguły, zamiast pozwolić jej wygrać pierwsze dopasowanie jako
przyznanie. Powyżej limitu rozwiązuje się do deny. Nigdy nie zwiera
obwodu reguły o niższym priorytecie tylko przez bycie osiągniętą.Sekwencje — reaktywne, nie inline
Sekwencje — reaktywne, nie inline
Reguła sekwencji dopasowuje
łańcuch wywołań w oknie czasowym, więc jest egzekwowana reaktywnie przez
asynchroniczny dopasowywacz, a nie na pojedynczym wywołaniu, które kończy
łańcuch. Rozświetla strumień zdarzeń, ale nie wygrywa przejścia
pierwszego-dopasowania dla pojedynczego wywołania.
Tryb cienia — stosowany po werdykcie
Tryb cienia — stosowany po werdykcie
Tryb cienia nie zmienia, która reguła
wygrywa — degraduje wygrywający egzekwujący werdykt do
audit (powód
poprzedzony przedrostkiem [shadow] would …) po rozwiązaniu
pierwszego-dopasowania, więc możesz zmierzyć wpływ polityki, zanim zmieni
ruch.6. Składając to razem
Dla dowolnego wywołania narzędzia pełne rozwiązywanie to:- Rozwiąż politykę — tę przypiętą do wywołującego klucza lub domyślną przestrzeni roboczej. Zobacz zakres.
- Przejdź reguły w
priority ASC, id ASC— wygrywa pierwsze dopasowanie; brak dopasowania →default_verdict. - Zastosuj egzekwowanie skilla — tryb zarządzanego skilla jedzie na
wierzchu wygrywającego werdyktu (
blockwymusza deny,quarantineeskaluje). - Zastosuj tryb cienia — jeśli włączony, degraduj egzekwujące werdykty
do
audit. - Zarejestruj zdarzenie — werdykt, powierzchnia, narzędzie i dopasowana reguła lądują w strumieniu zdarzeń.
Edycja priorytetu reguły wchodzi w życie przy następnym wywołaniu dla
każdego klucza przypiętego do polityki — bez ponownego wdrożenia, bez zmiany w
kodzie agenta. Uruchom ponownie piaskownicę Test
po ponownym uporządkowaniu, by potwierdzić nowego zwycięzcę, zanim ruch na
żywo na nim polegnie.
Dokąd dalej
Werdykty
Co każdy wygrywający werdykt faktycznie robi.
Składnia globów
Jak dopasowanie nazwy narzędzia decyduje, czy reguła jest w ogóle
kandydatem.
Testuj reguły
Zrób dry-run polityki i zobacz, która reguła wygrywa.
Lista dozwolonych narzędzi
Wzorzec default-deny, który najmocniej opiera się na porządkowaniu.
