Autorizace — kdo smí co dělat a jak to doložíš
Control Center odpovídá na dvě autorizační otázky a každá je jiná. „Smí tahle osoba zavolat tuhle operaci?“ se týká lidí, rolí a repozitářů. „Smí tenhle agent způsobit tenhle účinek?“ se týká akcí, argumentů a rozsahu dopadu. Ta druhá je Guardraily.
Na téhle stránce je první otázka a záznam, který po obou zbude.
Jedno rozhodovací místo
Sekce “Jedno rozhodovací místo”Každé autorizační rozhodnutí na straně člověka vyřeší jedna funkce:
can(principal, permission, resource) → allow | deny + whyOprávnění má tvar <domain>:<tier>, třeba tickets:write,
members:administer, repos:read. Katalog je odvozený, nikdo ho
nepíše ručně. Počítá se z plochy operací: předpona názvu dá doménu,
minimální role, kterou operace už vynucuje, dá úroveň. Každá z ~550
operací tak nese oprávnění, aniž by ho někdo musel zapsat.
Ten odvozený katalog stojí za ochranu. NOVÁ operace je ve výchozím stavu za branou. U modelu, kde se oprávnění dopisují ručně, selhání vypadá tak, že někdo zapomene, a zapomene právě bránu. Západkový test ukotvuje výslednou sadu domén, takže operace pod novou předponou vznikne rozhodnutím člověka o názvu.
Čtyři úrovně sedí přesně na vestavěné role:
| Úroveň | Minimální role | Příklad |
|---|---|---|
read |
Host | tickets:read |
write |
Člen | tickets:write |
administer |
Admin | members:administer |
own |
Vlastník | workspace:own |
Role
Sekce “Role”Pět vestavěných rolí, Vlastník, Admin, Člen, Prohlížeč, Host, jsou předvolby nad tím katalogem. Vlastník je v každém pracovním prostoru jeden a předává se výslovně akcí Přenést vlastnictví (vlastník, který odejde, se jinak odebrat nedá: deprovisioning přes SCIM odmítne každého vlastníka pracovního prostoru, vlastnictví předej předem).
Vlastní role jen ubírají. Vlastní role jmenuje základní předvolbu
(admin, member, viewer nebo guest, nikdy owner) a sadu
oprávnění z ní odebraných: „Admin, ale nesmí spravovat členy“. Víc
než svůj základ nikdy nedá. Proto se dají pustit do hotové instalace:
každá stávající kontrola zůstává platnou horní mezí. Členové je mají
jako custom:<id> a klient, který tu hodnotu ještě nezná, spadne na
roli Host.
Pod rolemi jsou přidělení na repozitář (none / read / review /
write). Členství v pracovním prostoru zůstává v mezích hostitele kódu.
Kontroluje je každá plocha, která kód ukazuje, i ta, která se ke kódu
dostane z boku, třeba terminál nebo relace editoru otevřená na worktree
prostoru.
Autorita serveru
Sekce “Autorita serveru”Některé operace se pracovního prostoru vůbec netýkají: nastavení celé instalace, konfigurace SSO, přihlašovací údaje poskytovatelů, správa modelů, zálohy celé instalace. Ty deklarují autoritu serveru. Pustí je jen operátor instalace (zaznamenaný vlastník serveru). Identita operátora je schválně jedna a definice taky.
Auditní stopa
Sekce “Auditní stopa”Každé autorizační rozhodnutí, povolení i zamítnutí, se připíše do auditní stopy pracovního prostoru, řetězené hashi.
Záznam, který má jen zamítnutí, odpoví na „co jsme zablokovali?“. Na „co ten agent opravdu udělal a kdo to povolil?“ už ne. Rozbor incidentu začíná tou druhou otázkou. Každý záznam proto nese celý řetězec atribuce: jednajícího principála, člověka, za kterého jednal, delegaci, přes kterou přišel, akci a její argumenty (jako otisk), rozhodnutí a pravidlo, které rozhodlo.
Záznamy jsou zřetězené: hash každého kryje hash předchozího, takže úprava, smazání nebo přehození kteréhokoli řádku rozbije každý následující hash. Ověřit řetěz celý řetěz znovu odvodí a pojmenuje první článek, který nedrží. Auditní záznam, který neověříš, je záznam. Ten, který znovu odvodíš, je důkaz.
Dva důsledky, které stojí za to znát:
- Auditní tabulka nepodléhá prořezávání podle stáří. Řetěz hashů se z prostředka zkrátit nedá. Uchování znamená nejdřív export, potom oříznutí, a oříznutí nechá kontrolní bod s koncovým hashem odebraného úseku. Co zbude, ověří se zpátky k začátku.
- Leží vedle časové osy aktivity. Osa ukazuje, co lidé udělali. Auditní stopa ukazuje, co se povolilo a co se odmítlo. Společné korelační id spojí jedno volání v obou.
Exportuje se jako JSON oddělený novými řádky a umí se streamovat do SIEM (Splunk, Elastic, Sentinel, HTTP endpoint s bearer tokenem). Streamování je schválně best effort: výpadek SIEM nesmí nikdy zastavit volání nástroje agenta. Ať SIEM běží, nebo ne, trvalá ověřitelná kopie je na disku.
Relace
Sekce “Relace”Instalace umí nastavit maximální stáří relace a časový limit nečinnosti. Obojí se vynucuje při kontrole přihlašovacích údajů zařízení, kterou prochází každá autentizovaná cesta. Limit relace, který klient umí ignorovat, stačí na dotazník. Útočníka nezastaví. Instalace taky umí vyžadovat SSO, a tím vypne ruční párování nových zařízení (pojistka proti uzamčení to odmítne, dokud neběží funkční spojení SSO).
Co to není
Sekce “Co to není”- Žádná ACL po objektech. Oprávnění na jeden ticket nebo jednu zprávu tu schválně není. Oddělení na úrovni repozitáře týmy opravdu chtějí a tady je. Sdílení po objektech je kombinatorická plocha a poptávka po ní se tu neukázala.
- Není to engine politik nastavovaný v DSL. Slovník je schválně uzavřený, takže se celá politika dá vykreslit, vysvětlit a vyjmenovat.
- Vynucuje se jen na serveru. Kontroly na klientovi jsou tu proto, aby se nenabídl ovládací prvek, který server odmítne. Rozhoduje vždycky server.