GNL
Dokümanlar menüsü
Enterprise@gnldev/auth-ee

Denetim kaydı (audit)

Her yetki kararını ve yönetim eylemini kaydeder; console veya journal-destekli kalıcı sink (createJournalAuditSink) ile — aktör doğrulanmış kimlikten yazılır, spoof edilemez.

Ne işe yarar / ne zaman kullanılır#

Uyumluluk (SOC2/ISO benzeri) veya sadece "kim ne zaman ne yaptı" sorusuna güvenilir cevap gerektiğinde iki ayrı denetim katmanı devreye girer. Birincisi @gnldev/auth-ee'nin AuditSink'i: her authorize çağrısının allow/deny kararını (kim, hangi path/method, hangi organizasyon) yazar — createEnterpriseAuth içine gömülüdür, elle çağırmanız gerekmez. İkincisi Studio'nun kendi yönetim-eylemi günlüğüdür: organizasyon/kullanıcı oluşturma-silme, policy güncelleme, run purge, agent promote gibi YAZMA eylemlerini GET /audit ile geriye okunabilir tutar.

Kritik garanti: aktör alanı istemcinin iddia ettiği bir şey değil, doğrulanmış kimlikten (Principal.id) türetilir — paylaşımlı bir token arkasında birden çok kişi çalışıyorsa x-gnl-actor header'ı ile kişi bazlı iz bırakılabilir, ama hiçbir istemci başka birinin kimliğini taklit edip kayda "ben yaptım değil" diyemez.

Kurulum / import#

paket
import { createEnterpriseAuth, createJournalAuditSink, consoleAuditSink } from '@gnldev/auth-ee';
import type { AuditSink, AuditEvent } from '@gnldev/auth-ee';
import { toJournal } from '@gnldev/durable';

@gnldev/auth-ee paralı/lisanslı bir pakettir — geçerli bir lisans anahtarı olmadan createEnterpriseAuth fallback'e düşer ve verilen audit sink'i devreye girmez. Journal-destekli kalıcı sink için storage'ın run journal'ı toJournal (@gnldev/durable) ile sarılır.

Adım adım kullanım#

1. Kalıcı audit istiyorsanız createJournalAuditSink ile bir sink oluşturup createEnterpriseAuth'a audit seçeneği olarak verin — verilmezse varsayılan uçucu consoleAuditSink kullanılır (yalnız konsola yazar, kalıcı değildir):

src/index.ts
const auth = createEnterpriseAuth({
  licenseKey,
  userStore,
  audit: createJournalAuditSink(toJournal(storage.runs)), // durable: decisions are written to the journal
  fallback,
});

Her authorize(principal, ctx) çağrısı artık otomatik olarak recordDecision üzerinden sink'e bir AuditEvent yazar — ayrıca kod yazmanız gerekmez.

2. Yazılan kararları geriye okumak için readJournalAudit kullanılır (en yeni önce döner):

okuma
import { readJournalAudit } from '@gnldev/auth-ee';

const events = await readJournalAudit(toJournal(storage.runs));
// [{ ts, principalId, orgId, path, method, action, allowed, reason }, ...]

3. Bu, Studio'nun kendi yönetim-eylemi günlüğünden AYRIDIR. Studio, her başarılı YAZMA eylemini (ör. org.create, policy.update, run.purge, agent.promote) kendi __audit__ log'una düşürür ve organizasyon kapsamlı, filtrelenebilir bir uçtan sunar:

okuma — Studio
GET /audit?limit=200&action=policy.update&q=acme
// -> { items: [{ id, at, actor, action, target, org?, detail? }, ...] } (newest first)

Kimliğe bağlı (org'lu) bir principal yalnız kendi organizasyonunun kayıtlarını görür (?org= yok sayılır); bağsız (operatör) kimlik ?org= ile isteğe bağlı süzebilir.

API referansı#

fncreateJournalAuditSink

(journal: JournalLike) => AuditSink. Her kararı __eeaudit__:<ts>-<rnd> anahtarıyla journal'a yazan kalıcı sink.

fnconsoleAuditSink

() => AuditSink. Konsola yazan uçucu varsayılan sink (audit verilmezse kullanılır).

fnreadJournalAudit

(journal: JournalLike) => Promise<AuditEvent[]>. createJournalAuditSink ile yazılmış tüm olayları en yeni önce döner (listKeys gerektirir).

fnrecordDecision

(sink, principal, ctx, decision) => sink.write(...) çağıran iç yardımcı; createEnterpriseAuth.authorize içinde otomatik çağrılır.

typeAuditSink

write(event: AuditEvent): void | Promise<void> sözleşmesi — özel sink (DB/SIEM) yazmak için implemente edilir.

typeAuditEvent

{ ts, principalId?, orgId?, path, method, action: "read"|"write", allowed, reason? }.

constAUDIT_PRE

journal anahtar öneki: '__eeaudit__:' — createJournalAuditSink/readJournalAudit bunu paylaşır.

Dikkat
Bu özellik @gnldev/auth-ee içindedir ve geçerli bir lisans (licenseKey) gerektirir — lisans geçersizse createEnterpriseAuth fallback'e düşer ve verilen audit sink'i devreye hiç girmez.
Not
consoleAuditSink uçucudur (yalnız stdout) — kalıcı/geriye-okunabilir kayıt için mutlaka createJournalAuditSink kullanın. readJournalAudit, journal listKeys desteklemiyorsa (ör. bazı özel adaptörler) boş dizi döner.
İlişkili
Yetki kararlarını üreten rol/izin katmanı için rbac, lisans doğrulama için signed-license, sürüm/promote olaylarının kendi audit izi için agent-versioning ve veri-güdümlü kural değişikliklerinin audit izi için guard-policy sayfalarına bakın.