← EP21 Internal Docs EP21 Backup Engine
ADR · ADR-0011 · v0.2.0

Docker Discovery Privilege Isolation — Explicit Whitelist

draft Authors: david.sorf Created: 2026-04-09 Updated: 2026-04-10
security docker privilege-isolation hardening whitelist
Backup agent nepotřebuje Docker socket pro discovery. EP21 je kontrolované prostředí kde jsou DB kontejnery předem známy — connection stringy jsou explicitně definovány v backup.env. Docker socket se nepoužívá pro discovery; dynamické discovery zůstává volitelná nadstavba pro budoucí rozšíření.
Related docs:

Kontext

ADR-0008 popisuje, že backup kontejner mountuje /var/run/docker.sock pro detekci DB kontejnerů. Toto dává celému backup kontejneru ekvivalent root přístupu k Docker daemonu — pokud by byl kontejner kompromitován, útočník má plný přístup ke všem kontejnerům na hostu.

Principal of least privilege říká: pouze ta část systému která potřebuje privilegia by je měla mít.

Zvažované alternativy

A) Status quo (ADR-0008) — docker.sock mount v hlavním kontejneru. Jednoduché, ale plná privilegia.

B) Privilegovaný sidecar — samostatný minimální kontejner s docker.sock přístupem. Provede discovery a předá výsledky hlavnímu kontejneru. Omezuje blast radius ale přidává operační komplexitu.

C) Rootless Docker — spuštění Docker daemonu v rootless módu na hostu. Omezuje blast radius bez architektonické změny backup enginu, ale vyžaduje host-level konfiguraci a není triviální na EP21 VM prostředí.

D) Explicitní whitelist — místo dynamického discovery explicitní konfigurace connection stringů v backup.env. Eliminuje potřebu Docker socketu pro discovery zcela.

Rozhodnutí

✓ Chosen: D — Explicitní whitelist connection stringů v backup.env; Docker socket se pro discovery nepoužívá

EP21 je kontrolované produkční prostředí s předem známou sadou DB kontejnerů. Dynamické discovery přes Docker socket je vhodné pro obecná nebo multi-tenant prostředí, ale pro EP21 přidává privilegia bez odpovídající hodnoty.

Volba D:

  • Eliminuje Docker socket jako útočný vektor zcela — backup kontejner nemá žádný důvod pro přístup k Docker daemonu za runtime
  • Connection stringy jsou explicitně verzovány v backup.env — přehledné, auditovatelné, předvídatelné
  • Zjednodušuje bezpečnostní model: backup kontejner přistupuje pouze k PostgreSQL a restic remote
  • Pokud by v budoucnu byl potřeba dynamický discovery (např. více projektů, auto-scaling), lze přidat jako opt-in přes separátní ADR bez narušení stávající architektury

Volba B (sidecar) by byla vhodná pokud by EP21 vyžadovalo dynamický discovery jako primární mód. Prozatím to není případ.

Důsledky

Pozitivní:

Negativní:

Dopad na ADR-0008

ADR-0008 popisuje Docker socket mount jako součást architektury. V EP21 produkčním prostředí se tento mount NEVYUŽÍVÁ pro discovery — backup.env je autoritativní zdroj. Docker socket může být úplně odstraněn z Docker Compose konfigurace v budoucí verzi ADR-0008.

Changelog

VersionDateAuthorNote
0.2.02026-04-10david.sorf + claude-sonnet-4-6

Draft rozšířen o analýzu alternativ A/B/C/D a doporučení volby D (explicit whitelist). Čeká na design review a přijetí.

0.1.02026-04-09david.sorf + claude-sonnet-4-6

Initial draft. Vytvořeno jako tracked follow-up z ADR-0008 § Follow-up. Popisuje problém a alternativy, rozhodnutí zatím nebylo přijato.