152 lines
4.8 KiB
Markdown
152 lines
4.8 KiB
Markdown
# 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
|