Přeskočit na obsah

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 + why

Oprá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

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.

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.

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.

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).

  • Žá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.