Files

152 lines
4.8 KiB
Markdown
Raw Permalink Normal View History

2026-03-25 13:42:48 +01:00
# 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