Język dopasowania stojący za polityką firewalla. Dopasuj wywołania narzędzi po nazwie, skillu, argumentach i celu — a potem allow, audit, deny, sanitize, wstrzymaj do zatwierdzenia lub ogranicz koszt. Deterministyczny, fail-closed i bezpieczny na gorącej ścieżce.
Polityka firewalla to uporządkowana lista
reguł. Ta strona to kompletna referencja tego, co reguła może wyrazić
— języka dopasowania, werdyktów oraz tego, jak silnik je ewaluuje.Reguły są autorowane w edytorze reguł w konsoli, który zapisuje
ustrukturyzowane obiekty dopasowania JSON. Wszystko poniżej opisuje to
słownictwo, abyś mógł czytać, rozumować i precyzyjnie weryfikować regułę —
niezależnie od tego, czy budujesz ją w UI, czy postujesz przez
API.
Konfiguracja redakcji, używana, gdy verdict = sanitize. Zobacz §5.
egress
object
Lista allow/deny hostów/CIDR, używana, gdy stage = egress. Zobacz §6.
cap_cost_cents
int
Pułap kosztu uruchomienia, używany, gdy verdict = cap_cost.
sequence
object
Uporządkowane wielokrokowe dopasowanie, egzekwowane reaktywnie. Zobacz §8.
notes
string
Uzasadnienie autora; ignorowane przez silnik.
Reguła pasuje do wywołania narzędzia, gdy wszystkie jej zadeklarowane
warunki są spełnione: etap pasuje (lub jest pusty), glob narzędzia pasuje,
glob skilla pasuje (lub jest pusty), klauzule argumentów pasują (lub są
nieobecne), a zakres egress pasuje (tylko reguły egress). Silnik
przechodzi reguły w kolejności priorytetów i wygrywa pierwsze
dopasowanie.
Celowo mała, rozróżniająca wielkość liter gramatyka — bez niespodzianek
regex, liniowy czas, bezpieczna na gorącej ścieżce relay:
Wzorzec
Dopasowuje
"" lub *
Każde narzędzie.
foo.*
Przedrostek — foo.bar, foo.exec (nie samo foo).
*.exec
Przyrostek — shell.exec, db.exec (nie samo exec).
*.shell.*
Wrostek — local.shell.exec (potrzebuje ≥1 znaku po każdej stronie).
cokolwiek innego
Dokładne dopasowanie łańcucha (włącznie z foo.*.bar).
Narzędzia są umownie w przestrzeni nazw server.tool lub
category.action, więc shell.* łapie całą rodzinę, a *.delete łapie
czasownik w różnych serwerach.
Ta sama gramatyka globa, dopasowywana wobec skilla będącego
właścicielem wywołania narzędzia (np. community.*, builtin.send).
Jest AND-owana z tool_name_glob, więc:
dopasowuje http.fetchtylko wtedy, gdy jest własnością skilla
community.* — ufaj temu samemu narzędziu z wbudowanego skilla, bramkuj
je z społecznościowego. Pusty glob skilla pasuje do dowolnego właściciela.
Jak wywołanie narzędzia jest przypisywane do skilla, opisano w
Skille.
Dopasowanie nazwy narzędzia odpowiada na pytanie które narzędzie;
klauzule argumentów odpowiadają z jakimi argumentami — różnica między
„zablokuj shell.exec” a „zablokuj shell.exec tylko wtedy, gdy
polecenie to rm -rf”.args_match to zestaw klauzul, wszystkie AND-owane razem:
Mały podzbiór JSONPath nad obiektem argumentów narzędzia:
$.foo, $.foo.bar — dostęp do pola
$.foo[0], $.arr[1].k — indeksowanie tablicy
$ — cały obiekt argumentów
Bez symboli wieloznacznych, filtrów, wycinków ani zejścia rekurencyjnego.
Klauzule argumentów fail closed — reguła, nie żądanie. Jeśli ścieżka
się nie rozwiązuje, argumenty są zniekształcone albo regex/CIDR jest
nieprawidłowy, klauzula ewaluuje się do fałszu i reguła po prostu nie
odpala — wywołanie spada do następnej reguły lub domyślnego werdyktu.
Zepsuta klauzula nigdy nie auto-odrzuca i nigdy nie wysypuje relay.
Napisz swoją regułę „złap wszystko niebezpieczne” jako jawne deny z
własnym globem, zamiast polegać na tym, że klauzula zawiedzie w określony
sposób.
Konsola waliduje klauzule ściśle przy zapisie (nieznane operatory, złe
ścieżki, niebędące tablicą wartości in, niekompilowalne regexy oraz
nieprawidłowe CIDR są wszystkie odrzucane), więc zniekształcona klauzula w
ogóle nie może zostać utrwalona.
Werdykt sanitize redaguje dopasowane podłańcuchy z argumentów
narzędzia i przesyła oczyszczone wywołanie — przydatne do usuwania
sekretów lub PII, które agent wstawił do argumentu narzędzia, bez
blokowania całej akcji.
Dopasowania presetów są zastępowane przez [redacted:<preset>];
dopasowania niestandardowego regexa przez [redacted:custom]. Wbudowana
biblioteka presetów:aws_access_key, aws_secret_key, openai_key, anthropic_key,
bearer_token, email, ssn_us, credit_card (z kontrolą Luhna).Reguła sanitize musi zadeklarować co najmniej jeden preset lub
niestandardowy wzorzec — pusty sanityzator jest odrzucany przy zapisie. Na
powierzchni inbound nie ma argumentów czasu wywołania do zredagowania,
więc werdykt sanitize tam eskaluje do bloku.
Wpisy pasują jako CIDR, literał IP lub niezależna od wielkości liter nazwa
hosta; nazwy hostów są rozwiązywane na zasadzie best-effort i ponownie
sprawdzane wobec wpisów IP/CIDR. Polaryzacja podąża za werdyktem: przy
werdykcie allow lista allow definiuje, co jest w zakresie, a deny
wycina z niej wyjątki; przy werdykcie egzekwującym (deny) lista deny
definiuje, co jest zablokowane, a allow wycina wyjątki.169.254.169.254 (endpoint metadanych chmury) oraz zakresy RFC-1918 to
kanoniczne rzeczy do zablokowania — preset block_ssrf_egress oraz poziom
autonomii tight
dostarczają dokładnie to.
Niektóre ryzyka są widoczne tylko na przestrzeni kilku wywołań —
przeczytaj 50 rekordów CRM, potem eksportuj, potem uderz w zewnętrzny
host. Reguła sequence dopasowuje uporządkowany łańcuch, a nie pojedyncze
wywołanie:
Każdy krok to glob narzędzia z opcjonalnym min_count (domyślnie 1) oraz
opcjonalnym egress: true (krok musi być wywołaniem egress). Kroki muszą
występować w kolejności — przeplatanie z innymi wywołaniami jest w
porządku — a cały łańcuch musi zakończyć się w obrębie window_seconds
(0 = brak ograniczenia).
Sekwencje są egzekwowane reaktywnie przez asynchroniczny matcher, nie
inline na każdym wywołaniu — sekwencja z krokiem * w przeciwnym razie
dopasowywałaby każde pojedyncze wywołanie narzędzia. Zapalają strumień
events i mogą wyzwolić działanie następcze, ale nie blokują pojedynczego
wywołania, które domyka łańcuch w czasie rzeczywistym.
Wygrywa pierwsze dopasowanie. Reguły biegną w kolejności
priority ASC, id ASC; pierwsza reguła, której wszystkie warunki są
spełnione, decyduje o werdykcie. Żadna reguła nie pasuje →
default_verdict polityki.
Deterministyczne i wolne od zależności. Dopasowanie globów i klauzul
to czyste operacje na łańcuchach/JSON bez wywołania sieciowego,
bezpieczne do uruchamiania na każdym wywołaniu narzędzia. Regexy są RE2
— liniowy czas, bez katastroficznego backtrackingu.
Klauzule fail-closed. Klauzula, której nie da się ewaluować,
sprawia, że jej reguła nie odpala, zamiast auto-odrzucać
(§4).
Ścisła walidacja przy zapisie. Parowania werdykt/etap,
niepustość sanityzatora, obecność cap_cost_cents, kształt klauzuli oraz
rozwiązywanie referencji są wszystkie sprawdzane przy zapisie —
nieprawidłowe reguły nie mogą zostać utrwalone.
Audytowane. Każde utworzenie/aktualizacja/usunięcie reguły zapisuje
wiersz audytu po zatwierdzeniu zmiany; bloby reguł i sekrety nigdy nie są
zapisywane do logu audytu.