Warum Docker-Hardening kein Nice-to-have ist
Docker ist schnell, flexibel und produktiv – aber out-of-the-box nicht automatisch "sicher genug" für kritische Workloads. Viele Incidents entstehen nicht durch Zero-Days, sondern durch fehlende Basis-Hygiene: zu offene Netzwerkpfade, überprivilegierte Container oder unkontrollierte Images.
Die gute Nachricht: Mit wenigen Standards kannst du das Risiko stark reduzieren, ohne die Entwicklergeschwindigkeit zu verlieren.
15 konkrete Hardening-Maßnahmen
- Rootless Docker wo möglich aktivieren.
- Container nicht als root laufen lassen (
USERim Dockerfile). - Read-only Filesystem für stateless Services.
- Capabilities minimieren (z. B.
--cap-drop=ALL). - No-new-privileges setzen.
- Seccomp-Profile nutzen (Default oder gehärtet).
- AppArmor/SELinux aktiv einsetzen.
- Trusted Base Images mit kleiner Angriffsfläche (distroless/alpine wo sinnvoll).
- Image-Scanning in CI integrieren (Trivy/Grype).
- Image-Signing und Verifikation (Cosign/Sigstore).
- Secrets niemals im Image, nur via Secret Store injizieren.
- Netzwerksegmentierung mit getrennten Docker Networks.
- Keine unnötigen Ports veröffentlichen.
- Resource Limits setzen (CPU/RAM/PIDs).
- Logging & Auditing zentralisieren und Alerts definieren.
Beispiel: Gehardete Compose-Definition
services:
app:
image: ghcr.io/example/app:1.2.3
user: "10001:10001"
read_only: true
cap_drop: ["ALL"]
security_opt:
- no-new-privileges:true
tmpfs:
- /tmp:size=64m,noexec,nosuid
deploy:
resources:
limits:
cpus: '1.0'
memory: 512MBrauchst du Unterstützung bei der Umsetzung?
30-Min Call — kostenlos, unverbindlich, konkret.
Hardening in die CI/CD-Pipeline bringen
Security wird stabil, wenn sie automatisiert ist. Baue Scans und Policy-Checks als Gate in deine Pipeline – nicht als manuellen Nachtrag kurz vor Go-Live.
trivy image --severity HIGH,CRITICAL --exit-code 1 ghcr.io/example/app:1.2.3
cosign verify ghcr.io/example/app:1.2.3Praxis-Checkliste für den Rollout in 7 Tagen
Damit Hardening nicht in Tickets stecken bleibt, hier ein kompakter Rollout-Plan:
- Tag 1: Inventory aller produktiven Container + Owner festlegen.
- Tag 2: Non-root +
cap_drop+no-new-privilegesals Standard. - Tag 3: Image-Scanning als CI-Gate aktivieren (HIGH/CRITICAL blockieren).
- Tag 4: Secrets aus Images entfernen, nur noch Secret Store/Runtime-Injection.
- Tag 5: Netzwerksegmentierung und Port-Exposure minimieren.
- Tag 6: Read-only RootFS + tmpfs für schreibbare Pfade.
- Tag 7: Alerting auf Security-Ereignisse + kurzer Restore-/Incident-Drill.
Typische Fehler in der Praxis
- "Privileged" als Quick-Fix: kurzfristig bequem, langfristig hohes Risiko.
- Zu breite Exceptions: eine Ausnahme wird schnell zum neuen Standard.
- Security nur im Audit-Monat: ohne Pipeline-Automation fällt man sofort zurück.
Hardening-Roadmap für kleine Teams
Wenn ihr mit wenig Kapazität arbeitet, priorisiert in dieser Reihenfolge: erst Runtime-Rechte (non-root, no-new-privileges), dann Supply-Chain (Scanning + Signing), danach Netzwerk und Monitoring. Diese Reihenfolge reduziert das Risiko am schnellsten.
Wichtig: Definiert einen "Security Owner" pro Service. Ohne klare Ownership werden Hardening-Maßnahmen meist nur halb umgesetzt und später wieder aufgeweicht.
Fazit
Docker-Sicherheit ist kein einzelnes Tool, sondern ein Set aus Standards. Fang mit den Top-5 an (non-root, cap-drop, read-only, scanning, secrets) und erweitere iterativ. So bekommst du schnell messbare Sicherheitsgewinne ohne Delivery zu bremsen.