# STEP 11 – Audit-Logging (Minimal & DSG-konform) ## Ziel Sicherheitsrelevante Ereignisse nachvollziehbar protokollieren, ohne sensible Daten (Patientendaten, Prompts, Passwoerter) zu speichern. --- ## 1. Architektur Neues Modul: aza_audit_log.py Log-Format: Pipe-separierte Textdatei (eine Zeile pro Ereignis) TIMESTAMP | EVENT | USER | STATUS | SOURCE | DETAIL Beispiel: 2026-02-22T21:13:25.419+00:00 | LOGIN_OK | Dr. Mueller | OK | desktop | Alle Timestamps sind UTC (ISO-8601). --- ## 2. Protokollierte Ereignisse Event-Typ Beschreibung Wann ------------------------------------------------------------------ APP_START Anwendung gestartet main() APP_STOP Anwendung beendet nach mainloop() LOGIN_OK Erfolgreicher Login do_login() LOGIN_FAIL Fehlgeschlagener Login do_login() 2FA_OK 2FA-Verifizierung erfolgreich do_verify() 2FA_FAIL 2FA-Verifizierung fehlgeschlagen do_verify() CONSENT_GRANT KI-Einwilligung erteilt on_accept() CONSENT_REVOKE KI-Einwilligung widerrufen toggle_consent() AI_TRANSCRIBE KI-Transkription gestartet transcribe_wav() AI_CHAT KI-Chat-Completion aufgerufen call_chat_completion() AI_BLOCKED KI-Aufruf ohne Consent blockiert transcribe/chat PASSWORD_REHASH Legacy-Hash auf bcrypt migriert do_login() EXPORT Log-Export durchgefuehrt do_export() --- ## 3. Data Minimization (DSG Art. 6) Was NICHT im Audit-Log gespeichert wird: - Patientennamen / Patientendaten - Transkripte / KG-Inhalte - KI-Prompts / KI-Antworten - Passwoerter / Passwort-Hashes - API-Keys / Secrets - E-Mail-Inhalte Detail-Feld: Maximal 200 Zeichen, nur Metadaten (z.B. "model=gpt-5.2", "2FA backup-code"). --- ## 4. Log-Rotation Parameter Standard ENV-Variable -------------------------------------------------- Max. Dateigroesse 10 MB AZA_AUDIT_ROTATE_MB Rotierte Dateien 12 AZA_AUDIT_KEEP Logdatei-Pfad aza_audit.log AZA_AUDIT_LOG Bei Ueberschreitung der Maximalgroesse: aza_audit.log -> aza_audit.1.log -> ... -> aza_audit.12.log Aelteste Datei wird ueberschrieben. --- ## 5. Export Ueber Einstellungen -> "Logs exportieren (Audit)": Exportiert sowohl Consent-Log als auch Audit-Log als JSON. Programmatisch: python -c "from aza_audit_log import export_audit_log; print(export_audit_log())" Export-Format: { "export_timestamp": "2026-02-22T...", "total_entries": 12, "source_file": ".../aza_audit.log", "entries": [ { "timestamp": "2026-02-22T...", "event": "LOGIN_OK", "user_id": "...", "status": "OK", "source": "desktop", "detail": "" } ] } --- ## 6. Integration bestehender Audit-Systeme Komponente Audit-System Speicherort ----------------------------------------------------------- Desktop-App (basis14) aza_audit_log.py aza_audit.log Backend (backend_main) _audit_write() medwork_audit.log Workforce Planner log_action() + DB workforce_planner.db Alle drei Systeme sind unabhaengig und koennen separat exportiert werden. --- ## 7. Geaenderte / Neue Dateien Datei Aktion -------------------------------------------------- aza_audit_log.py NEU – Audit-Log-Modul basis14.py GEAENDERT – Import + 10 log_event()-Aufrufe aza_settings_mixin.py GEAENDERT – Import + Widerruf-Log + Export _test_audit_log.py NEU – Testskript (23 Tests) --- ## 8. Test-Ergebnisse (22.02.2026) Test Ergebnis ------------------------------------------- Events schreiben PASS 12 Zeilen korrekt PASS 6 Felder pro Zeile PASS Timestamp UTC PASS Event-Typ korrekt PASS User korrekt PASS Status OK/FAIL korrekt PASS Source = desktop PASS Statistiken korrekt PASS Export JSON korrekt PASS Data Minimization PASS Pipe-Sanitierung PASS Gesamt: 23/23 ALLE BESTANDEN --- ## 9. Risiken Risiko Bewertung Massnahme -------------------------------------------------------- Log-Datei loeschbar NIEDRIG Backup sichert mit Kein zentrales SIEM MITTEL Export fuer manuelle Pruefung Keine Echtzeit-Alarmierung MITTEL Manueller Review empfohlen Log-Rotation verliert alte Daten NIEDRIG 12 Dateien a 10 MB = 120 MB