525 lines
20 KiB
Markdown
525 lines
20 KiB
Markdown
# LeoCRM — Enterprise-Readiness Plan
|
|
|
|
**Ziel:** KI und Business-Plattform für kleine bis mittlere Firmen (max. 500 Mitarbeiter)
|
|
**Erstellt:** 2026-08-20
|
|
|
|
---
|
|
|
|
## 1. RLS (Row Level Security)
|
|
|
|
### 20 Tabellen ohne RLS in Produktion — Klassifizierung
|
|
|
|
**Absichtlich kein RLS (10 Tabellen — Auth/System-Tabellen):**
|
|
Diese Tabellen brauchen kein RLS weil sie vor der Tenant-Auflösung gebraucht werden oder global sind:
|
|
| Tabelle | Grund |
|
|
|---------|-------|
|
|
| `alembic_version` | Migration-Tracking, global |
|
|
| `notification_types` | Globale Type-Definitionen |
|
|
| `password_reset_tokens` | Auth vor Tenant-Context |
|
|
| `plugin_allowlist` | Globale Plugin-Konfiguration |
|
|
| `plugin_migrations` | Globale Plugin-Migration-Tracking |
|
|
| `plugins` | Globale Plugin-Registry |
|
|
| `sessions` | Auth vor Tenant-Context |
|
|
| `tenants` | Die Tenant-Tabelle selbst |
|
|
| `user_tenants` | Mapping Users ↔ Tenants |
|
|
| `users` | Auth vor Tenant-Context |
|
|
|
|
**Brauchen RLS (10 Tabellen):**
|
|
| Tabelle | Warum RLS nötig | Migration |
|
|
|---------|-----------------|----------|
|
|
| `ai_decision_records` | Tenant-spezifische AI-Entscheidungen | 0129 |
|
|
| `approval_requests` | Tenant-spezifische Approvals | 0129 |
|
|
| `automation_agent_run_steps` | Tenant-spezifische Agent-Run-Steps | 0129 |
|
|
| `outbox_deliveries` | Tenant-spezifische Event-Zustellungen | 0129 |
|
|
| `roles` | Tenant-spezifische Rollen | 0129 |
|
|
| `sequences` | Tenant-spezifische Sequenzen | 0129 |
|
|
| `wiki_articles` | Tenant-spezifische Wiki-Artikel | 0129 |
|
|
| `wiki_article_versions` | Tenant-spezifische Wiki-Versionen | 0129 |
|
|
| `wiki_categories` | Tenant-spezifische Wiki-Kategorien | 0129 |
|
|
| `marketplace_listings` | Prüfen: Global oder per-Tenant? | 0129 |
|
|
|
|
### Ablaufplan RLS:
|
|
1. Migration 0129 erstellen: `ALTER TABLE ... ENABLE ROW LEVEL SECURITY` + `CREATE POLICY tenant_isolation ON ...`
|
|
2. In Test-DB ausführen und verifizieren
|
|
3. In Produktion deployen
|
|
4. RLS-Tests schreiben: Cross-Tenant-Zugriff muss blockiert werden
|
|
5. Verifizieren: `SELECT count(*) FILTER (WHERE rowsecurity=true) FROM pg_tables WHERE schemaname='public'` → muss 123 sein (133 - 10 system)
|
|
|
|
---
|
|
|
|
## 2. Security Audit & Penetration Test
|
|
|
|
### Security Audit (Code-Level)
|
|
1. **SQL Injection** — Alle Routes auf Raw-SQL prüfen (`grep -rn 'text(\|execute(\|raw' app/routes/`)
|
|
2. **XSS** — Frontend auf `dangerouslySetInnerHTML` prüfen
|
|
3. **CSRF** — CSRF Middleware prüfen (vorhanden in `app/core/middleware.py`)
|
|
4. **Auth Bypass** — Routes ohne `require_permission` oder `get_current_user` identifizieren
|
|
5. **Secret Exposure** — `.env`, API-Keys, Tokens im Code prüfen
|
|
6. **Dependency Audit** — `pip-audit` (Python) + `npm audit` (Frontend)
|
|
7. **Rate Limiting** — Prüfen ob Rate-Limiting auf kritischen Routes aktiv ist
|
|
|
|
### Penetration Test (Extern)
|
|
1. **OWASP Top 10** Checkliste abarbeiten
|
|
2. **Burp Suite / OWASP ZAP** Scan gegen https://crm.media-on.de
|
|
3. **Auth Tests** — Session-Hijacking, Cookie-Flags, Login-Brute-Force
|
|
4. **API Tests** — Unautorisierte Zugriffe, IDOR (Insecure Direct Object Reference)
|
|
5. **Multi-Tenant Tests** — Cross-Tenant Datenzugriff versuchen
|
|
|
|
### Ablaufplan Security:
|
|
1. Code-Level Security Audit (automatisiert, 1 Tag)
|
|
2. Dependency Audit (pip-audit + npm audit, 0.5 Tage)
|
|
3. Externer Pen-Test (manuell, 2 Tage)
|
|
4. Findings dokumentieren und beheben
|
|
5. Re-Test nach Fixes
|
|
|
|
---
|
|
|
|
## 3. Testing — 100% Abdeckung planen
|
|
|
|
### Test-Strategie
|
|
|
|
**Schicht 1: Unit-Tests (vorhanden, erweitern)**
|
|
- Pure Funktionen, Utilities, Helper
|
|
- Keine DB, keine externen Services
|
|
- Ziel: 200+ Tests
|
|
|
|
**Schicht 2: Integration-Tests (ausbauen)**
|
|
- Echte DB (leocrm_test mit Alembic-Migrationen, nicht create_all)
|
|
- Echte Redis-Verbindung
|
|
- API-Tests über httpx AsyncClient
|
|
- LLM gemockt (llm_complete/llm_embed)
|
|
- Ziel: 300+ Tests
|
|
|
|
**Schicht 3: Cross-Module Tests (neu)**
|
|
- Plugin A → Contract → Plugin B
|
|
- Agent → Tool → DB → Audit
|
|
- Workflow → Step → External Service (gemockt)
|
|
- Event Bus → Outbox → Consumer
|
|
- Ziel: 50+ Tests
|
|
|
|
**Schicht 4: E2E Tests (Playwright, erweitern)**
|
|
- Login → Contact erstellen → Search → Edit → Delete
|
|
- Mail: Account → Folder → Message → Attachment
|
|
- Agent: Create → Run → Result → Approval
|
|
- Workflow: Create → Run → Step → Complete
|
|
- Ziel: 30+ Tests
|
|
|
|
**Schicht 5: Performance Tests (neu)**
|
|
- locust/k6: Login, Contact-List, Search unter Last
|
|
- 10, 50, 100 gleichzeitige User
|
|
- Response-Time < 500ms, Error-Rate < 1%
|
|
- Ziel: 10+ Test-Szenarien
|
|
|
|
### Test-DB Fix (wichtig!)
|
|
1. conftest.py umstellen: Alembic-Migrationen statt `Base.metadata.create_all()`
|
|
2. RLS-Policies in Test-DB aktivieren
|
|
3. Test-Isolation: Jeder Test bekommt clean Schema (TRUNCATE zwischen Tests)
|
|
4. Test-Daten-Fixtures: Realistische Test-Daten (Contacts, Companies, Mail, etc.)
|
|
|
|
### Ablaufplan Testing:
|
|
1. Test-DB auf Alembic umstellen (1 Tag)
|
|
2. Bestehende Mock-Tests zu Integration-Tests migrieren (3 Tage)
|
|
3. Neue Cross-Module Tests schreiben (2 Tage)
|
|
4. E2E Tests erweitern (2 Tage)
|
|
5. Performance Tests einrichten (1 Tag)
|
|
6. CI-Pipeline: Alle Tests müssen grün sein vor Deploy (0.5 Tage)
|
|
|
|
---
|
|
|
|
## 4. Monitoring — System Dashboard für Admins
|
|
|
|
### Backend
|
|
1. **Neue Route:** `app/routes/system_dashboard.py`
|
|
- `GET /api/v1/system-dashboard` — Admin-only (`require_permission("system:read")`)
|
|
- Sammelt: Health, DB-Stats, Redis-Stats, Worker-Queue, Active Users, Error-Rate, Response-Times
|
|
- Bei Problemen: `post_system_message()` an internes Nachrichten-System
|
|
|
|
2. **Monitoring Daten sammeln:**
|
|
- DB: Connection-Pool-Stats, Query-Count, Slow-Queries
|
|
- Redis: Memory, Connections, PubSub Channels
|
|
- Worker: Queue-Length, Failed-Jobs, Running-Jobs
|
|
- App: Active Sessions, Request-Count, Error-Rate
|
|
- Plugins: Active-Status, Health pro Plugin
|
|
- LLM: Cost pro Tag/Agent/Workflow
|
|
|
|
3. **Alerting:**
|
|
- Wenn Health-Check failed → System-Message an Communication-System
|
|
- Wenn Error-Rate > 5% → System-Message
|
|
- Wenn Worker-Queue > 100 → System-Message
|
|
- Wenn DB-Disk > 80% → System-Message
|
|
- Wenn Redis-Memory > 80% → System-Message
|
|
|
|
### Frontend
|
|
1. **Neue Page:** `frontend/src/pages/SystemDashboard.tsx`
|
|
- Nur für Admins sichtbar (`PermissionRoute permission="system:read"`)
|
|
- Link im linken Menü (Sidebar) — nur für Admins
|
|
- Real-Time Updates (WebSocket oder 30s Polling)
|
|
- Cards: System Health, DB, Redis, Worker, Active Users, Errors, LLM Costs
|
|
- Charts: Response-Time-Trend, Error-Rate-Trend, Queue-Length
|
|
- Alert-Feed: System-Messages aus Communication-System
|
|
|
|
2. **Sidebar Eintrag:**
|
|
- `{ to: '/system-dashboard', labelKey: 'nav.systemDashboard', icon: <Activity />, order: 95 }`
|
|
- Nur sichtbar wenn `is_system_admin === true`
|
|
|
|
### Ablaufplan Monitoring:
|
|
1. Backend: `system_dashboard.py` Route mit echten DB/Redis/Worker-Stats (1 Tag)
|
|
2. Backend: Alerting → System-Message bei Problemen (0.5 Tage)
|
|
3. Frontend: `SystemDashboard.tsx` mit Cards und Charts (2 Tage)
|
|
4. Frontend: Sidebar-Eintrag + Permission-Check (0.5 Tage)
|
|
5. Tests: Integration-Test für Dashboard-Route (0.5 Tage)
|
|
|
|
---
|
|
|
|
## 5. Backup — Automatisiert über ARQ Scheduler
|
|
|
|
### Vorhandene Infrastruktur
|
|
- `scripts/backup.py` — Backup-Script (pg_dump + files)
|
|
- `scripts/restore.py` — Restore-Script
|
|
- ARQ Worker mit cron-Scheduler (vorhanden)
|
|
- `scheduler_tick` Job registriert
|
|
|
|
### Plan
|
|
1. **Backup ARQ Job registrieren:**
|
|
- `register_job("auto_backup", auto_backup_job)`
|
|
- Cron-Schedule: Täglich um 03:00 Uhr (einstellbar)
|
|
- Ruft `scripts/backup.py` auf
|
|
- Speichert Backup in `/backups/` (oder S3/Nextcloud)
|
|
|
|
2. **Settings-Erweiterung:**
|
|
- `backup_enabled: bool = True`
|
|
- `backup_schedule: str = "0 3 * * *"` (cron)
|
|
- `backup_destination: str = "local"` (local/s3/nextcloud)
|
|
- `backup_retention_days: int = 7`
|
|
- In Settings-Page im Frontend einstellbar
|
|
|
|
3. **Backup-Verifizierung:**
|
|
- Nach jedem Backup: Manifest prüfen (Datei-Anzahl, Größe)
|
|
- Wöchentlich: Test-Restore in Test-DB + Row-Count-Validierung
|
|
- Bei Fehler: System-Message an Communication-System
|
|
|
|
4. **Restore-Test:**
|
|
- `scripts/restore_test.sh` existiert bereits
|
|
- Als ARQ-Cron-Job: Wöchentlich Restore in Test-DB, Schema validieren
|
|
|
|
### Ablaufplan Backup:
|
|
1. `auto_backup_job` in `app/core/jobs.py` registrieren (0.5 Tage)
|
|
2. Settings-Schema erweitern + Frontend-UI (1 Tag)
|
|
3. Backup-Verifizierung + Alerting (0.5 Tage)
|
|
4. Restore-Test als Cron-Job (0.5 Tage)
|
|
5. Tests: Backup erstellen → Restore → Validieren (1 Tag)
|
|
|
|
---
|
|
|
|
## 6. Multi-Tenant — RLS Lücken prüfen
|
|
|
|
### Aktuell
|
|
- 113/133 Tabellen haben RLS in Produktion
|
|
- 10 Tabellen absichtlich ohne RLS (Auth/System)
|
|
- 10 Tabellen brauchen RLS (siehe Punkt 1)
|
|
|
|
### Weitere Prüfung
|
|
1. **ORM Auto-Filter** — Prüfen ob SQLAlchemy automatisch `tenant_id` filtert
|
|
2. **Routes ohne Tenant-Check** — Gibt es Routes die `tenant_id` nicht prüfen?
|
|
3. **Cross-Tenant Queries** — Gibt es Queries die `tenant_id` nicht filtern?
|
|
4. **Plugin-Tables** — Haben alle Plugin-Tables `tenant_id`?
|
|
5. **Admin-Bypass** — Können Admins andere Tenants sehen? (Sollten sie nicht)
|
|
|
|
### Ablaufplan Multi-Tenant:
|
|
1. RLS für 10 fehlende Tabellen hinzufügen (Punkt 1) (0.5 Tage)
|
|
2. ORM Auto-Filter verifizieren (0.5 Tage)
|
|
3. Routes ohne Tenant-Check identifizieren und fixen (1 Tag)
|
|
4. Cross-Tenant Integration-Tests schreiben (1 Tag)
|
|
|
|
---
|
|
|
|
## 7. Compliance — Geplant in Phase K
|
|
|
|
Phase K (EU Compliance) ist in der Roadmap geplant mit 6 Tasks:
|
|
- AI Use-Case Registry
|
|
- Processing Activities Register
|
|
- DSR Automation (Access/Erasure/Correction)
|
|
- DPIA (Data Protection Impact Assessment)
|
|
- AI Act Compliance
|
|
- Compliance Reports
|
|
|
|
Das ist geplant und muss implementiert werden wenn Phase I+J abgeschlossen sind.
|
|
|
|
---
|
|
|
|
## 8. Performance Tests
|
|
|
|
### Plan
|
|
1. **locust/k6 Setup** — Load-Testing-Tool installieren
|
|
2. **Test-Szenarien:**
|
|
- Login (100 gleichzeitige User)
|
|
- Contact-List (50 User, paginated)
|
|
- Search (50 User, verschiedene Queries)
|
|
- Mail-List (30 User, IMAP-Sync)
|
|
- Agent-Run (10 User, gleichzeitige Agent-Runs)
|
|
3. **Metriken:**
|
|
- Response-Time (P50, P95, P99)
|
|
- Error-Rate
|
|
- Throughput (Requests/sec)
|
|
- DB-Query-Count pro Request
|
|
- Redis-Hit-Rate
|
|
4. **Baseline messen** — Aktuelle Performance aufzeichnen
|
|
5. **Optimierung** — Bottlenecks identifizieren und beheben
|
|
|
|
### Ablaufplan Performance:
|
|
1. locust/k6 installieren + Test-Szenarien schreiben (1 Tag)
|
|
2. Baseline messen (0.5 Tage)
|
|
3. Bottlenecks identifizieren (0.5 Tage)
|
|
4. Optimierung (N+1 Queries, Caching, Indexes) (2 Tage)
|
|
5. Re-Test nach Optimierung (0.5 Tage)
|
|
|
|
---
|
|
|
|
## 9. Documentation — Anpassen an aktuellen und geplanten Stand
|
|
|
|
### Was aktualisiert werden muss
|
|
1. **README.md** — Aktualisiert ✅ (KI und Business-Plattform)
|
|
2. **docs/api-documentation.md** — Alle 468 Routes dokumentieren (aktualisieren)
|
|
3. **docs/plugin-development-guide.md** — 23 Plugins dokumentieren (aktualisieren)
|
|
4. **docs/infrastructure.md** — Docker, PostgreSQL, Redis, ARQ (aktualisieren)
|
|
5. **docs/monitoring.md** — System Dashboard, Alerting (neu schreiben)
|
|
6. **docs/security_kernel.md** — RLS, ABAC, Audit, Pen-Test (aktualisieren)
|
|
7. **docs/admin-guide.md** — Backup, Restore, Monitoring, Settings (aktualisieren)
|
|
8. **docs/deploy-guide.md** — Deploy-Process, Coolify (aktualisieren)
|
|
9. **docs/test-strategy.md** — Test-Schichten, Test-DB, CI (aktualisieren)
|
|
10. **docs/ui-design-guidelines.md** — System Dashboard, neue Komponenten (aktualisieren)
|
|
11. **AGENTS.md** — Build/Test-Commands, Konventionen (aktualisieren)
|
|
12. **PROGRESS.md** — Aktueller Stand (aktualisiert ✅)
|
|
13. **PLATFORM_ROADMAP.md** — Phasen-Status (aktualisiert ✅)
|
|
|
|
### Ablaufplan Documentation:
|
|
1. Alle Doku-Dateien durchgehen und veraltete Inhalte aktualisieren (2 Tage)
|
|
2. Neue Doku für System Dashboard, Backup-Automation, Performance (1 Tag)
|
|
3. API-Doku für neue Routes ergänzen (1 Tag)
|
|
|
|
---
|
|
|
|
## 10. HA/Scaling — Architektur-Prüfung
|
|
|
|
### Aktuelle Architektur
|
|
- Single-Instance: 1x crm_app, 1x crm_worker, 1x postgres, 1x redis
|
|
- Docker-Compose auf einem Hetzner VPS
|
|
|
|
### Kann die Architektur skalieren?
|
|
**Ja, bedingt.** Die Architektur unterstützt Horizontal-Scaling:
|
|
|
|
1. **crm_app** — Kann horizontal skalieren (stateless, Session in Redis)
|
|
- Mehrere Instanzen hinter Load Balancer (Coolify unterstützt das)
|
|
- WebSocket: Redis PubSub für Multi-Instance (bereits implementiert)
|
|
- Cron-Locks: Bereits implementiert (`_acquire_cron_lock`)
|
|
|
|
2. **crm_worker** — Kann horizontal skalieren
|
|
- ARQ Worker sind stateless
|
|
- Redis als Queue (bereits implementiert)
|
|
- Cron-Locks verhindern doppelte Ausführung (bereits implementiert)
|
|
|
|
3. **postgres** — Vertikales Scaling (größerer Server)
|
|
- Für HA: Managed PostgreSQL (z.B. Hetzner Cloud DB, RDS)
|
|
- Read-Replicas für Search-Queries möglich
|
|
|
|
4. **redis** — Vertikales Scaling
|
|
- Für HA: Redis Sentinel oder Managed Redis
|
|
|
|
### Was für HA noch fehlt
|
|
- Load Balancer (Coolify/Traefik kann das)
|
|
- Health-Checks für Auto-Restart (vorhanden)
|
|
- Graceful Shutdown (vorhanden)
|
|
- Session-Sharing über Redis (vorhanden)
|
|
|
|
### Fazit: Die Architektur unterstützt HA/Scaling. Bei Bedarf können einfach mehr crm_app und crm_worker Instanzen hinzugefügt werden. PostgreSQL und Redis brauchen dann Managed Services.
|
|
|
|
### Ablaufplan HA (bei Bedarf):
|
|
1. 2-3 crm_app Instanzen hinter Traefik Load Balancer (Coolify)
|
|
2. 2 crm_worker Instanzen
|
|
3. Managed PostgreSQL (Hetzner Cloud DB oder extern)
|
|
4. Managed Redis (oder Redis Sentinel)
|
|
5. Keine Code-Änderungen nötig — nur Docker-Compose Anpassung
|
|
|
|
---
|
|
|
|
## 11. API Versioning
|
|
|
|
### Aktuell
|
|
- Alle Routes unter `/api/v1/`
|
|
- Kein automatisches Versioning
|
|
|
|
### Plan
|
|
- Bei Breaking Changes: Neue Routes unter `/api/v2/`
|
|
- Alte Routes bleiben verfügbar (Deprecation)
|
|
- Versionierung über URL-Präfix (nicht Header)
|
|
- Das ist ausreichend für KMU bis 500 Mitarbeiter
|
|
|
|
### Fazit: v1 ist ausreichend. Bei v2 einfach neuen Prefix hinzufügen. Keine zusätzliche Infrastruktur nötig.
|
|
|
|
---
|
|
|
|
## 12. Rate Limiting — Erklärung
|
|
|
|
**Was ist Rate Limiting?**
|
|
Rate Limiting begrenzt wie viele API-Anfragen ein User in einer bestimmten Zeit machen kann.
|
|
|
|
**Beispiel:** Ein User kann maximal 100 API-Anfragen pro Minute machen. Wenn er mehr macht, bekommt er einen 429 (Too Many Requests) Fehler.
|
|
|
|
**Warum wichtig?**
|
|
- Schutz vor Missbrauch (Brute-Force, DDoS)
|
|
- Faire Ressourcen-Verteilung (ein User kann nicht alle Ressourcen verbrauchen)
|
|
- Schutz vor Endlos-Schleifen (z.B. Agent der zu viele LLM-Calls macht)
|
|
|
|
**Aktuell:**
|
|
- Globales Rate-Limiting vorhanden (`GeneralRateLimitMiddleware` in `app/core/rate_limit.py`)
|
|
- LLM Cost-Protection vorhanden (Budget-Limits pro Tenant)
|
|
|
|
**Was fehlt:**
|
|
- Per-User Rate-Limiting (nicht nur global)
|
|
- Per-Tenant Rate-Limiting
|
|
- Spezifische Limits für kritische Endpoints (Login, Password-Reset, Agent-Run)
|
|
|
|
### Ablaufplan Rate Limiting:
|
|
1. Per-User und Per-Tenant Limits in `rate_limit.py` implementieren (1 Tag)
|
|
2. Spezifische Limits für Login, Password-Reset, Agent-Run (0.5 Tage)
|
|
3. Tests: Rate-Limit wird durchgesetzt (0.5 Tage)
|
|
|
|
---
|
|
|
|
## 13. Audit Log — Erklärung
|
|
|
|
**Was ist Audit Log?**
|
|
Audit Log protokolliert jede Änderung am System: Wer hat was wann geändert.
|
|
|
|
**Beispiel:** "User admin@media-on.de hat Kontakt 'Max Mustermann' um 14:30 Uhr aktualisiert — Feld 'email' geändert von 'alt@example.com' zu 'neu@example.com'"
|
|
|
|
**Warum wichtig?**
|
|
- Nachvollziehbarkeit bei Fehlern
|
|
- Compliance (DSGVO fordert Protokollierung)
|
|
- Security (wer hat auf welche Daten zugegriffen?)
|
|
|
|
**Aktuell:**
|
|
- `app/models/audit.py` — AuditLog Model vorhanden
|
|
- `app/routes/audit.py` — Audit-Log API vorhanden
|
|
- `do_action()` feuert bei jeder Änderung
|
|
- 81 do_action-Aufrufe im Code
|
|
|
|
**Was fehlt:**
|
|
- **Retention Policy** — Wie lange werden Audit-Logs aufbewahrt? (z.B. 90 Tage, 1 Jahr, 7 Jahre je nach Gesetz)
|
|
- **Audit-Log-Export** — Export für Compliance-Prüfung
|
|
- **Tamper-Proof** — Audit-Logs sollten nicht löschbar sein (außer durch Admin mit GDPR-Flag)
|
|
|
|
### Ablaufplan Audit Log:
|
|
1. Retention Policy in Settings konfigurierbar (0.5 Tage)
|
|
2. ARQ-Cron-Job: Audit-Logs älter als Retention-Period archivieren (0.5 Tage)
|
|
3. Audit-Log-Export als CSV/JSON (0.5 Tage)
|
|
4. Tamper-Proof: DELETE auf AuditLog nur mit `?gdpr=true` und Admin-Permission (0.5 Tage)
|
|
|
|
---
|
|
|
|
## 14. Data Retention — Erklärung
|
|
|
|
**Was ist Data Retention?**
|
|
Data Retention definiert wie lange Daten aufbewahrt werden und wann sie gelöscht werden.
|
|
|
|
**Beispiel:** "E-Mails werden 7 Jahre aufbewahrt (gesetzliche Pflicht), danach automatisch gelöscht. Gelöschte Kontakte werden 90 Tage im Trash behalten, danach endgültig gelöscht."
|
|
|
|
**Warum wichtig?**
|
|
- Gesetzliche Aufbewahrungspflichten (Handelsrecht, Steuerrecht, DSGVO)
|
|
- Speicherplatz-Management
|
|
- DSGVO: „Recht auf Vergessenwerden" — Daten müssen löschbar sein
|
|
|
|
**Aktuell:**
|
|
- Soft-Delete mit `deleted_at` vorhanden (alle Entitäten)
|
|
- Hard-Delete nur mit `?gdpr=true` (vorhanden)
|
|
- Entity History mit Restore vorhanden (Phase D)
|
|
- Keine automatische Retention/Löschung nach Zeit
|
|
|
|
**Was fehlt:**
|
|
- Konfigurierbare Retention-Policies pro Datentyp (z.B. Mail=7 Jahre, Contacts=90 Tage Trash)
|
|
- ARQ-Cron-Job der abgelaufene Daten archiviert/löscht
|
|
- DSGVO-Lösch-Workflow (Betroffenenrechts-Anfragen)
|
|
|
|
### Ablaufplan Data Retention:
|
|
1. Retention-Settings in `config.py` + Settings-Page (0.5 Tage)
|
|
2. ARQ-Cron-Job: `cleanup_expired_data` (1 Tag)
|
|
3. DSGVO-Lösch-Workflow (in Phase K geplant)
|
|
4. Tests: Daten werden nach Retention-Period gelöscht (0.5 Tage)
|
|
|
|
---
|
|
|
|
## 15. Incident Response — Erklärung
|
|
|
|
**Was ist Incident Response?**
|
|
Incident Response ist der Plan was passiert wenn etwas schiefgeht (Server-Ausfall, Datenverlust, Security-Breach).
|
|
|
|
**Beispiel:** „Server ist down → 1. Admin bekommt Alert über System-Dashboard → 2. Backup wird restored → 3. User werden informiert → 4. Post-Mortem wird geschrieben"
|
|
|
|
**Warum wichtig?**
|
|
- Schnelle Reaktion bei Problemen
|
|
- Minimierung von Ausfallzeiten
|
|
- Dokumentation für Verbesserung
|
|
|
|
**Aktuell:**
|
|
- Health-Check vorhanden (`/api/v1/health`)
|
|
- Graceful Shutdown vorhanden
|
|
- Error-Logging vorhanden (structlog + trace_id)
|
|
- Kein automatisches Alerting
|
|
- Kein Runbook
|
|
|
|
**Was fehlt:**
|
|
- **Runbook** — Dokument mit Schritten bei verschiedenen Incident-Typen
|
|
- **Alerting** — Automatische Benachrichtigung bei Problemen (über System Dashboard → Communication-System)
|
|
- **Post-Mortem Template** — Vorlage für Incident-Dokumentation
|
|
|
|
### Ablaufplan Incident Response:
|
|
1. Runbook schreiben (Server-Ausfall, DB-Crash, Redis-Crash, Security-Breach) (1 Tag)
|
|
2. Alerting im System Dashboard implementiert (siehe Punkt 4) (bereits geplant)
|
|
3. Post-Mortem Template in `docs/incident-response.md` (0.5 Tage)
|
|
4. Recovery-Test: Backup restore + App-Neustart (0.5 Tage)
|
|
|
|
---
|
|
|
|
## Zusammenfassung — Alle Ablaufpläne
|
|
|
|
| # | Bereich | Aufwand | Priorität | Abhängigkeit |
|
|
|---|---------|--------|-----------|-------------|
|
|
| 1 | RLS für 10 Tabellen | 0.5 Tage | 🔴 Hoch | Keine |
|
|
| 2 | Security Audit + Pen-Test | 3.5 Tage | 🔴 Hoch | Nach RLS |
|
|
| 3 | Testing 100% | 9.5 Tage | 🔴 Hoch | Nach Test-DB Fix |
|
|
| 4 | Monitoring System Dashboard | 4.5 Tage | 🟡 Mittel | Keine |
|
|
| 5 | Backup Automation | 3.5 Tage | 🟡 Mittel | ARQ Scheduler |
|
|
| 6 | Multi-Tenant Prüfung | 3 Tage | 🔴 Hoch | Nach RLS |
|
|
| 7 | Compliance (Phase K) | Geplant | 🟡 Mittel | Nach Phase I+J |
|
|
| 8 | Performance Tests | 4.5 Tage | 🟡 Mittel | Nach Testing |
|
|
| 9 | Documentation | 4 Tage | 🟡 Mittel | Nach allen Änderungen |
|
|
| 10 | HA/Scaling | Bei Bedarf | 🟢 Low | Architektur unterstützt es |
|
|
| 11 | API Versioning | v1 ausreichend | 🟢 Low | Keine |
|
|
| 12 | Rate Limiting | 2 Tage | 🟡 Mittel | Keine |
|
|
| 13 | Audit Log | 2 Tage | 🟡 Mittel | Keine |
|
|
| 14 | Data Retention | 2.5 Tage | 🟡 Mittel | ARQ Scheduler |
|
|
| 15 | Incident Response | 2.5 Tage | 🟡 Mittel | Nach Monitoring |
|
|
|
|
**Gesamtaufwand:** ~45 Tage (ohne Compliance, HA, API Versioning)
|
|
|
|
**Reihenfolge (empfohlen):**
|
|
1. RLS (Punkt 1) — 0.5 Tage
|
|
2. Test-DB Fix (Teil von Punkt 3) — 1 Tag
|
|
3. Multi-Tenant Prüfung (Punkt 6) — 3 Tage
|
|
4. Security Audit (Punkt 2) — 3.5 Tage
|
|
5. Monitoring (Punkt 4) — 4.5 Tage
|
|
6. Testing (Punkt 3) — 9.5 Tage
|
|
7. Backup (Punkt 5) — 3.5 Tage
|
|
8. Rate Limiting (Punkt 12) — 2 Tage
|
|
9. Audit Log (Punkt 13) — 2 Tage
|
|
10. Data Retention (Punkt 14) — 2.5 Tage
|
|
11. Performance (Punkt 8) — 4.5 Tage
|
|
12. Incident Response (Punkt 15) — 2.5 Tage
|
|
13. Documentation (Punkt 9) — 4 Tage
|
|
14. Compliance (Phase K) — Geplant
|
|
15. HA/Scaling (Punkt 10) — Bei Bedarf
|
|
|
|
---
|
|
|
|
*Ende des Enterprise-Readiness Plans*
|