Skip to Content

Audit-Protokoll-API

Auris zeichnet automatisch jede administrative Aktion, jedes Authentifizierungsereignis und jeden sicherheitsrelevanten Vorgang in einem unveränderlichen Audit-Trail auf. Die Audit-Protokoll-API bietet Lesezugriff auf diese Protokolle und die Verwaltung von Log-Streaming-Konfigurationen, die Ereignisse an externe Observability-Plattformen weiterleiten.

Audit-Protokolle werden gemäß der Aufbewahrungsrichtlinie deines Plans aufbewahrt. Alle Protokolleinträge sind unveränderlich — sie können nicht über die API bearbeitet oder gelöscht werden.

Alle Endpunkte erfordern den x-tenant-Header und ein gültiges Bearer-Token.

Protokolle abfragen

GET/api/audit-logsRequires: view:audit_logs

Audit-Protokolleinträge mit Filterung und Paginierung auflisten. Ergebnisse werden in umgekehrter chronologischer Reihenfolge zurückgegeben (neueste zuerst). Unterstützt Filterung nach Aktion, Benutzer, Ressourcentyp, Schweregrad, Datumsbereich und Freitextsuche.

Abfrageparameter

ParameterTypBeschreibung
pageintegerSeitennummer (Standard: 1)
limitintegerElemente pro Seite (Standard: 20, max: 100)
actionstringNach Aktionsname filtern (z. B. user.login, role.update, sso.connection.create)
userIdstringNach der Benutzer-ID filtern, die die Aktion ausgeführt hat
resourceTypestringNach Ressourcentyp filtern (z. B. user, role, application, organization, sso_connection)
levelinfo | warn | errorNach Protokoll-Schweregrad filtern
dateFromISO 8601Beginn des Datumsbereichs (einschließlich)
dateToISO 8601Ende des Datumsbereichs (einschließlich)
searchstringFreitextsuche über Aktion, Ressourcentyp und Details

Beispielanfrage

GET /api/audit-logs?action=user.login&level=error&dateFrom=2025-02-01T00:00:00Z&limit=50

Erfolgsantwort

{ "ok": true, "data": { "data": [ { "id": "log_abc123", "action": "user.login", "userId": "usr_def456", "resourceType": "session", "resourceId": "sess_ghi789", "details": { "method": "password", "success": false, "reason": "invalid_credentials" }, "level": "error", "ipAddress": "203.0.113.42", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", "createdAt": "2025-02-18T14:30:00Z" }, { "id": "log_jkl012", "action": "role.update", "userId": "usr_admin001", "resourceType": "role", "resourceId": "role_mno345", "details": { "before": { "name": "editor", "permissionsChanged": 3 }, "after": { "name": "editor", "permissionsChanged": 3, "permissions": ["view:invoices", "create:invoices", "edit:invoices"] } }, "level": "info", "ipAddress": "10.0.1.50", "userAgent": "AurisConsole/1.0", "createdAt": "2025-02-18T13:15:00Z" } ], "pagination": { "page": 1, "limit": 50, "total": 1284, "totalPages": 26 } } }

Struktur eines Protokolleintrags

Jeder Audit-Protokolleintrag hat folgende Struktur:

FeldTypBeschreibung
idstringEindeutiger Bezeichner des Protokolleintrags
actionstringDie ausgeführte Aktion (Punkt-Notation, z. B. user.create, role.permission.update)
userIdstring | nullDer Benutzer, der die Aktion ausgeführt hat. Null für systemgenerierte Ereignisse (Cron-Jobs, Webhooks).
resourceTypestringDer Typ der betroffenen Ressource (z. B. user, role, application, organization, session, sso_connection, log_stream)
resourceIdstring | nullDie ID der spezifischen betroffenen Ressource
detailsobjectAktionsspezifische Daten. Bei Mutationen typischerweise before- und after-Snapshots.
levelinfo | warn | errorSchweregrad des Ereignisses
ipAddressstring | nullIP-Adresse des Clients, der die Aktion ausgelöst hat
userAgentstring | nullUser-Agent-Header aus der Anfrage
createdAtISO 8601Zeitstempel, wann das Ereignis aufgetreten ist

Häufige Aktionstypen

AktionSchweregradBeschreibung
user.logininfo/errorBenutzeranmeldeversuch (Erfolg oder Misserfolg)
user.login.2fainfoZwei-Faktor-Authentifizierung abgeschlossen
user.signupinfoNeue Benutzerregistrierung
user.createinfoAdmin hat einen Benutzer erstellt
user.updateinfoBenutzerprofil aktualisiert
user.deletewarnBenutzerkonto gelöscht
user.disablewarnBenutzerkonto deaktiviert
user.password.changeinfoPasswort geändert
user.password.resetinfoPasswort-Zurücksetzen initiiert
role.createinfoRolle erstellt
role.updateinfoRollenmetadaten aktualisiert
role.deletewarnRolle gelöscht
role.permission.updateinfoRollenberechtigungen geändert
role.assigninfoRolle einem Benutzer zugewiesen
role.unassigninfoRolle von einem Benutzer entfernt
application.createinfoAnwendung erstellt
application.updateinfoAnwendungseinstellungen aktualisiert
application.secret.rotatewarnAnwendungs-Client-Secret rotiert
organization.createinfoOrganisation erstellt
organization.member.addinfoMitglied zur Organisation hinzugefügt
organization.member.removewarnMitglied aus der Organisation entfernt
sso.connection.createinfoSSO-Verbindung konfiguriert
sso.connection.activateinfoSSO-Verbindung aktiviert
sso.connection.deactivatewarnSSO-Verbindung deaktiviert
session.revokewarnAdmin hat eine Benutzersitzung widerrufen
token.exchangewarnToken-Austausch (Impersonation oder Delegation)
log_stream.createinfoLog-Stream konfiguriert
security.brute_force.lockouterrorKonto wegen Brute-Force gesperrt
security.suspicious_loginwarnVerdächtige Anmeldung erkannt

Das Feld details für Mutations-Ereignisse (erstellen, aktualisieren, löschen) enthält typischerweise before- und after-Snapshots, wo anwendbar. Für sensible Felder wie Passwörter und Secrets wird nur die Tatsache aufgezeichnet, dass das Feld geändert wurde — nicht die tatsächlichen Werte.

Log-Streaming

Log-Streaming leitet Audit-Ereignisse in Echtzeit an externe Observability- und SIEM-Plattformen weiter. Wenn ein Log-Stream konfiguriert und aktiv ist, wird jedes Audit-Ereignis zusätzlich zur Speicherung in der Auris-Datenbank an das konfigurierte Ziel gesendet.

GET/api/log-streamsRequires: manage:log_streams

Alle konfigurierten Log-Streams für den Tenant auflisten. Gibt Stream-Metadaten, Typ, Status und letzten Lieferungszeitpunkt zurück.

Erfolgsantwort

{ "ok": true, "data": [ { "id": "ls_abc123", "name": "Produktion Datadog", "type": "DATADOG", "status": "active", "config": { "region": "us1", "apiKey": "dd_api_***...***" }, "lastDeliveryAt": "2025-02-18T14:29:55Z", "createdAt": "2025-01-10T09:00:00Z" }, { "id": "ls_def456", "name": "SIEM Webhook", "type": "WEBHOOK", "status": "active", "config": { "url": "https://siem.internal.acme.com/auris-logs", "headers": { "X-Custom-Header": "value" } }, "lastDeliveryAt": "2025-02-18T14:29:58Z", "createdAt": "2025-02-01T11:30:00Z" } ] }
POST/api/log-streamsRequires: manage:log_streams

Einen neuen Log-Stream erstellen. Jeder Stream-Typ erfordert eine andere Konfigurationsstruktur. Auris validiert die Konfiguration und führt optional eine Test-Lieferung durch, bevor gespeichert wird.

Stream-Typ: WEBHOOK

Sendet jedes Audit-Ereignis als HTTP POST an die angegebene URL. Unterstützt benutzerdefinierte Header zur Authentifizierung.

Anforderungs-Body

{ "name": "SIEM Webhook", "type": "WEBHOOK", "config": { "url": "https://siem.internal.acme.com/auris-logs", "headers": { "Authorization": "Bearer ihr-siem-token", "X-Source": "auris" } } }
KonfigurationsfeldErforderlichBeschreibung
urlJaHTTPS-Endpunkt zum Empfangen von Protokollereignissen
headersNeinBenutzerdefinierte HTTP-Header, die mit jeder Lieferung gesendet werden

Der Webhook-Payload ist der JSON-Audit-Protokolleintrag, gesendet mit Content-Type: application/json.

Stream-Typ: S3

Stapelt Audit-Ereignisse und lädt sie als JSON-Dateien in einen S3-kompatiblen Bucket hoch.

Anforderungs-Body

{ "name": "S3-Archiv", "type": "S3", "config": { "bucket": "auris-audit-logs", "region": "us-east-1", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "prefix": "auris/tenant-name/" } }
KonfigurationsfeldErforderlichBeschreibung
bucketJaS3-Bucket-Name
regionJaAWS-Region (z. B. us-east-1)
accessKeyIdJaAWS-Zugriffsschlüssel-ID mit s3:PutObject-Berechtigung
secretAccessKeyJaAWS-Geheimzugriffsschlüssel
prefixNeinSchlüsselpräfix für hochgeladene Dateien (Standard: auris-logs/)

Dateien werden mit Schlüsseln im Format hochgeladen: {prefix}YYYY/MM/DD/HH-mm-ss-{uuid}.json.

Stream-Typ: DATADOG

Sendet Audit-Ereignisse an die Datadog Log Management API.

Anforderungs-Body

{ "name": "Datadog Logs", "type": "DATADOG", "config": { "apiKey": "dd_api_key_hier", "region": "us1", "service": "auris-iam", "source": "auris" } }
KonfigurationsfeldErforderlichBeschreibung
apiKeyJaDatadog API-Schlüssel
regionJaDatadog-Region: us1, us3, us5, eu1, ap1
serviceNeinDienst-Name-Tag (Standard: auris)
sourceNeinQuell-Tag (Standard: auris)

Stream-Typ: SPLUNK

Sendet Audit-Ereignisse an Splunk über den HTTP Event Collector (HEC).

Anforderungs-Body

{ "name": "Splunk HEC", "type": "SPLUNK", "config": { "hecUrl": "https://splunk.internal.acme.com:8088/services/collector/event", "hecToken": "ihr-hec-token", "index": "auris_audit", "source": "auris-iam", "sourcetype": "_json" } }
KonfigurationsfeldErforderlichBeschreibung
hecUrlJaSplunk HEC-Endpunkt-URL
hecTokenJaHEC-Authentifizierungstoken
indexNeinSplunk-Index (Standard: main)
sourceNeinQuellwert (Standard: auris)
sourcetypeNeinSourcetype-Wert (Standard: _json)

Erfolgsantwort (alle Typen)

{ "ok": true, "data": { "id": "ls_ghi789", "name": "Datadog Logs", "type": "DATADOG", "status": "active", "config": { "region": "us1", "apiKey": "dd_api_***...***", "service": "auris-iam", "source": "auris" }, "createdAt": "2025-02-18T10:00:00Z" } }

Sensible Felder in der Konfiguration (API-Schlüssel, Secrets, Token) werden in GET-Antworten maskiert. Die vollständigen Werte werden nur intern für die Lieferung verwendet und werden nach der Erstellung niemals über die API offengelegt.

Fehlercodes

CodeHTTPBeschreibung
VALIDATION_ERROR400Fehlende Pflicht-Konfigurationsfelder oder ungültiger Stream-Typ
STREAM_NAME_TAKEN409Ein Log-Stream mit diesem Namen existiert bereits
TEST_DELIVERY_FAILED400Test-Lieferung an den konfigurierten Endpunkt fehlgeschlagen (zurückgegeben, wenn der Endpunkt nicht erreichbar ist oder das Test-Ereignis ablehnt)
GET/api/log-streams/[id]Requires: manage:log_streams

Vollständige Details für einen bestimmten Log-Stream abrufen, einschließlich Konfiguration (mit maskierten Secrets), Status und Lieferungsstatistiken.

Erfolgsantwort

{ "ok": true, "data": { "id": "ls_abc123", "name": "Produktion Datadog", "type": "DATADOG", "status": "active", "config": { "region": "us1", "apiKey": "dd_api_***...***", "service": "auris-iam", "source": "auris" }, "lastDeliveryAt": "2025-02-18T14:29:55Z", "deliveryCount": 15420, "errorCount": 3, "lastError": null, "createdAt": "2025-01-10T09:00:00Z", "updatedAt": "2025-02-15T08:00:00Z" } }
PATCH/api/log-streams/[id]Requires: manage:log_streams

Name, Konfiguration oder Status eines Log-Streams aktualisieren. Verwende dies, um API-Schlüssel zu rotieren, Endpunkte zu ändern oder das Streaming anzuhalten/fortzusetzen.

Anforderungs-Body — Konfiguration aktualisieren

{ "name": "Produktion Datadog (v2)", "config": { "apiKey": "neuer_dd_api_key_hier" } }

Anforderungs-Body — Streaming pausieren

{ "status": "paused" }

Erfolgsantwort

{ "ok": true, "data": { "id": "ls_abc123", "name": "Produktion Datadog (v2)", "status": "active", "updatedAt": "2025-02-18T11:00:00Z" } }

Stream-Status:

StatusBeschreibung
activeEreignisse werden an das Ziel gestreamt
pausedStream ist pausiert — Ereignisse werden nicht geliefert, aber weiterhin in Auris aufgezeichnet
errorLieferung ist wiederholt fehlgeschlagen — Stream wird automatisch pausiert, bis die Konfiguration korrigiert wird
DELETE/api/log-streams/[id]Requires: manage:log_streams

Einen Log-Stream löschen. Die Lieferung stoppt sofort. Historische Audit-Protokolle sind nicht betroffen — sie verbleiben unabhängig von der Streaming-Konfiguration in der Auris-Datenbank.

Erfolgsantwort

{ "ok": true, "data": { "deleted": true } }

Berechtigungsreferenz

BerechtigungBeschreibung
view:audit_logsAudit-Protokolleinträge abfragen und lesen
manage:log_streamsLog-Streaming-Ziele erstellen, aktualisieren, löschen und konfigurieren

Audit-Protokolle sind nur anhängbar und unveränderlich. Es gibt keinen API-Endpunkt zum Löschen oder Ändern von Protokolleinträgen. Dies gewährleistet die Integrität des Audit-Trails für Compliance-Zwecke (SOC 2, ISO 27001, DSGVO Artikel 30).

Webhook-Lieferungsformat

Für Log-Streams vom Typ WEBHOOK wird jedes Ereignis als HTTP POST mit folgender Struktur geliefert:

{ "event": "audit_log", "timestamp": "2025-02-18T14:30:00Z", "tenant": "acme-corp", "data": { "id": "log_abc123", "action": "user.login", "userId": "usr_def456", "resourceType": "session", "resourceId": "sess_ghi789", "details": { "method": "password", "success": true }, "level": "info", "ipAddress": "203.0.113.42", "userAgent": "Mozilla/5.0...", "createdAt": "2025-02-18T14:30:00Z" } }

Der Webhook enthält die im Log-Stream konfigurierten Header sowie Content-Type: application/json und User-Agent: Auris-LogStream/1.0. Lieferungen werden bei Nicht-2xx-Antworten bis zu 3 Mal mit exponentieller Wartezeit wiederholt (5s, 30s, 120s).


Verwandte Themen