update
This commit is contained in:
151
AzA march 2026/security/handovers/STEP_11_AUDIT_LOGGING.md
Normal file
151
AzA march 2026/security/handovers/STEP_11_AUDIT_LOGGING.md
Normal file
@@ -0,0 +1,151 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user