Files
coding-starter/docs/decisions/2026-04-17-redis-pii.md

1.5 KiB

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