Auditní logy

Max PrilutskiyCEO a spoluzakladatel4 min čtení

Auditní logy zaznamenávají každou akci, která ve vaší organizaci mění stav — přiřazení rolí, úpravy engine, vydání API klíčů nebo změny ve fakturaci — a zobrazují je v prohledávatelné a filtrovatelné časové ose. K dispozici v tarifu Enterprise spolu s funkcí Role a oprávnění.

Na úrovni databáze je log pouze pro přidávání: připojení aplikace nemůže auditní záznamy aktualizovat, mazat ani truncateovat. Co se jednou zapíše, už tam zůstane.

Co se zaznamenává#

Každá událost zachycuje aktéra, akci, cíl a HTTP kontext, přes který požadavek přišel.

PolePoznámky
AktérUživatel nebo API klíč, který akci provedl
AkceTypovaná hodnota jako engine.created nebo member.role_changed
CílEntita, které se akce týkala (např. engine, role nebo položka glosáře)
MetadataID souvisejících entit — nikdy názvy, e-maily ani úryvky obsahu
Kontext požadavkurequest_id, IP adresa, user agent — zaznamenáno při příchodu volání přes HTTP
Časové razítkoUTC plus monotónně rostoucí pořadové číslo pro detekci mezer

Záměrně jen ID

Sloupec metadat ukládá ID, ne hodnoty čitelné pro člověka. UI při čtení doplňuje aktuální názvy, takže přejmenování engine nebo uživatele historii nepřepisuje. Zároveň tím auditní záznamy nevstupují do konfliktu s právem na výmaz podle GDPR — není v nich žádný obsah, který by bylo potřeba redigovat.

Jaké akce pokrýváme#

Události jsou seskupené do kategorií, které odpovídají filtrům v dashboardu.

KategorieAktuálně zapojené akce
Organizaceorg.created, org.settings_updated, org.ownership_transferred, org.deleted
Členovémember.invited, member.removed, member.role_changed
Rolerole.created, role.updated, role.deleted
Enginesengine.created, engine.updated, engine.deleted
API klíčeapi_key.created, api_key.revoked
Obsahglossary_item.*, instruction.*, brand_voice.* (jen operace nad jednotlivými položkami)

Přístup k logu#

Položka Audit log se vždy zobrazuje v Nastavení v části Admin. Pokud tuto funkci váš tarif nezahrnuje, místo časové osy se na stránce zobrazí „Audit log není ve vašem tarifu“. Uvnitř najdete:

  • Filtrovatelný seznam — záznamy můžete zúžit podle Akce, Aktéra a Období (pomocí předvolby, například Posledních 7 dní, nebo rozsahu dat Od / Do). Budoucí data nejsou povolena.
  • Načíst starší události — nejnovější události se zobrazují jako první; kliknutím na Načíst starší události ve spodní části seznamu načtete další stránku.
  • Detail události — kliknutím na libovolný řádek ho rozbalíte přímo na místě a zobrazíte úplná metadata, ID požadavku, IP adresu a user agent.
  • Sdílitelná zobrazení — filtry i otevřená událost se promítají do URL, takže lze sdílet jakékoli zobrazení.

Kdo má přístup#

Přístup ke stránce řídí dvě podmínky:

  1. Entitlement — funkce audit-logs musí být pro organizaci aktivní (tarif Enterprise).
  2. Oprávnění — role uživatele musí zahrnovat org:view_audit_logs. Přednastavená role Full Access ho obsahuje ve výchozím nastavení; vlastníci ho mají vždy.

Členové bez tohoto oprávnění místo časové osy uvidí stránku „bez přístupu“. Členové organizace bez tohoto entitlementu uvidí paywall.

Když vám vyprší tarif Enterprise

Audit logy spadají do stejného oprávnění v rámci úrovně RBAC. Starší události zůstávají v databázi, ale na stránce se zobrazuje „Audit log není ve vašem tarifu“ a koncové body pro čtení vracejí 403, dokud není tarif znovu obnoven.

Ochrana proti manipulaci#

Auditní logy nejsou jen záznam — dodatečně je měnit je skutečně obtížné.

  • Pouze pro přidávání na úrovni databáze. Migrace, která tabulku vytvoří, spouští na API roli příkaz REVOKE UPDATE, DELETE, TRUNCATE. Jakákoli budoucí cesta v kódu — chyba, nový endpoint, dokonce i SQL injection — je Postgres odmítnuta dřív, než může změnit jediný řádek.
  • Monotónní sekvence. Každý řádek nese striktně rostoucí sloupec seq. Auditor může při kontrole sekvence odhalit smazání podle mezer.

Tohle stačí pro kontroly ve stylu SOC 2. Neochrání vás to před útočníkem s přímými přístupovými údaji do produkční databáze — silnější ochrana (samostatná role vlastníka, WORM mirror) je k dispozici na vyžádání.

Retence#

Auditní události se standardně uchovávají neomezeně dlouho. V Enterprise jsou k dispozici vlastní retenční okna — typicky 1, 3 nebo 7 let. Ozvěte se, pokud potřebujete konkrétní retenční politiku kvůli compliance nebo bezpečnostním dotazníkům.

Co zatím nepokrýváme#

Tady jsou některé záměrné hranice první verze, se kterými je dobré počítat:

  • Záznam je best-effort, ne transakční. Transakční zapisování je v krátkodobé roadmapě. Auditní událost se zapisuje až po akci, kterou popisuje — ne v rámci stejné databázové transakce. Ve vzácných chybových stavech (kdy akce uspěje a následně selže vložení auditního záznamu) tak může akce proběhnout bez odpovídající události.
  • Některé typy akcí ještě nejsou zapojené. Změny členství v engine, připojení / aktualizace / odpojení integrací, úpravy konfigurace modelu, změny fakturačního předplatného a hromadné operace s obsahem (nahrání CSV, createMany / updateMany / deleteMany) zatím události negenerují. Slovník akcí je ale rezervovaný, takže se po zapojení objeví ve stávajících kategoriích filtrů.
  • Čtení se neauditují. Zobrazení samotného auditního logu, procházení logů požadavků engine nebo stažení glosáře žádné události nevytváří. Auditují se jen akce měnící stav.
  • Exporty zatím nejsou. Auditní data jsou dostupná přes dashboard. Export do CSV, SIEM webhook a zrcadlení do S3 jsou na roadmapě — dejte nám vědět, pokud je potřebujete.
  • Bez zobrazení omezeného na konkrétní engine. Všechny auditní události organizace jsou na jedné časové ose. Pro užší výběr filtrujte podle akce nebo aktéra.
  • Bez živého sledování. Není k dispozici tlačítko Obnovit ani stream WebSocket — pokud chcete načíst novější události, obnovte stránku.

Další kroky#