docs: ADR für recipientEmail in BullMQ-Jobs (Finding 2 — Redis-PII)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
32
docs/decisions/2026-04-17-redis-pii.md
Normal file
32
docs/decisions/2026-04-17-redis-pii.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# ADR: recipientEmail in BullMQ-Jobs
|
||||
|
||||
**Datum:** 2026-04-17
|
||||
**Status:** Akzeptiert
|
||||
|
||||
## Kontext
|
||||
|
||||
BullMQ-Jobs im `email-send`-Queue enthalten `recipientEmail` im Klartext. SMTP benötigt die Klartext-E-Mail-Adresse als Empfängeradresse — ohne sie kann keine E-Mail zugestellt werden.
|
||||
|
||||
## Entscheidung
|
||||
|
||||
`recipientEmail` verbleibt im Klartext in den Job-Daten. Redis läuft ausschließlich intern (kein öffentlicher Port, Docker-internes Netzwerk, Hetzner DE).
|
||||
|
||||
Risikominimierung durch bestehende Maßnahmen:
|
||||
- `removeOnComplete: 100` — abgeschlossene Jobs werden nach 100 Einträgen bereinigt
|
||||
- `removeOnFail: { count: 500 }` — fehlgeschlagene Jobs werden begrenzt
|
||||
- `recipientHash` (SHA256) wird für alle Analytics-Events genutzt — kein Klartext in ClickHouse
|
||||
|
||||
## Abgelehnete Alternativen
|
||||
|
||||
**E-Mail-Adresse zur Laufzeit aus DB laden:** Worker enthält nur `subscriberId`, lädt E-Mail aus PostgreSQL. Nachteil: zusätzliche DB-Abfrage pro Job, komplexerer Fehlerfall bei DB-Ausfall während des Versands.
|
||||
|
||||
**Redis Encryption-at-rest:** Technisch möglich (Redis 7 + verschlüsselte RDB-Snapshots). Infra-Aufgabe, nicht im Anwendungscode lösbar.
|
||||
|
||||
## Akzeptiertes Risiko
|
||||
|
||||
Bei einem Redis-Dump-Leak wären E-Mail-Adressen sichtbar. Wahrscheinlichkeit gering (internes Netz, kein öffentlicher Zugriff).
|
||||
|
||||
## Offene Maßnahmen
|
||||
|
||||
- Infra-Ticket erstellen: Redis-Encryption-at-rest auf Hetzner konfigurieren
|
||||
- Redis-Port darf nie in `docker-compose.yml` nach außen exponiert werden
|
||||
Reference in New Issue
Block a user