Docker Secrets richtig nutzen
Was dieser Artikel über Docker-Secrets behandelt
- Warum Secrets in Docker geschützt werden müssen.
- Welche Möglichkeiten es gibt.
- Wie Docker Secrets in Swarm funktionieren.
- Wie man
.env-Dateien sicher nutzt. - Alternativen wie Vault, Infisical oder dotenvx.
Einleitung: Docker Secrets richtig nutzen
Container brauchen oft Passwörter, API-Keys, Tokens oder Zertifikate. Diese Secrets dürfen nicht im Image, im Build-Context oder in der Versionskontrolle landen. Docker bietet verschiedene Möglichkeiten, solche Daten zu schützen. Wer die Unterschiede kennt, vermeidet, dass geheime Daten bei Images, Logs oder Backups preisgegeben werden.
Dieser Artikel zeigt, wie man in Docker und Compose sicher mit Secrets umgeht.
Wichtige Begriffe
- Secret: Geheime Information wie Passwort oder API-Key.
- Docker Secret: In Swarm verwaltetes Secret.
- Env-Datei: Datei mit Umgebungsvariablen.
- Build Secret: Secret, das während des Builds verfügbar ist.
- Mount: Einhängen eines Secrets in einen Container.
- Vault: Spezialisierte Secrets-Lösung.
- Rotation: Regelmässiges Erneuern von Secrets.
- Secret Injection: Zur Laufzeit bereitstellen.
Was nicht tun
Folgendes sollte vermieden werden:
- Secrets im Dockerfile per
ENVsetzen. - Passwörter direkt in
compose.yamlschreiben. .env-Dateien im Repository ablegen.- Secrets in Logs ausgeben.
- Images mit eingebetteten Secrets pushen.
Jeder dieser Fehler kann zu einem Sicherheitsvorfall führen.
Env-Dateien
Eine .env-Datei ist der einfachste Weg, Umgebungsvariablen bereitzustellen:
services:
app:
image: mein-image
env_file:
- .env
.env im .gitignore eintragen und regelmässig sichern oder verschlüsseln.
Compose-Beispiel mit Env
services:
db:
image: postgres:16
environment:
- POSTGRES_PASSWORD_FILE=/run/secrets/db_password
secrets:
- db_password
secrets:
db_password:
file: ./db_password.txt
In db_password.txt steht das Passwort im Klartext. Die Datei gehört nicht ins Repository.
Docker Secrets in Swarm
Im Swarm-Modus können Secrets zentral verwaltet werden:
echo "meinpasswort" | docker secret create db_password -
In Compose:
services:
db:
image: postgres:16
secrets:
- db_password
environment:
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
secrets:
db_password:
external: true
Secrets werden dann als Datei in /run/secrets/ bereitgestellt.
Build-Secrets
Build-Secrets werden während des Builds verwendet und bleiben nicht im finalen Image:
# syntax=docker/dockerfile:1.7
FROM python:3.11-slim
RUN --mount=type=secret,id=pipconf \
PIP_CONFIG_FILE=/run/secrets/pipconf \
pip install -r requirements.txt
Build:
docker build --secret id=pipconf,src=./pip.conf .
Secrets in Container-Logs vermeiden
- Nie Secrets in
print- oderecho-Befehle ausgeben. - Logging-Level auf
INFOoder höher setzen. - Logs auf sensible Muster durchsuchen.
Alternativen
HashiCorp Vault
Zentrale Verwaltung, dynamische Secrets, Rotation.
Infisical
Open-Source-Alternative mit guter Docker-Integration.
dotenvx
Verschlüsselte .env-Dateien mit geteiltem Schlüssel.
Mozilla SOPS
Verschlüsselung von Secrets-Dateien in Git.
Rotations-Strategie
- Secrets regelmässig erneuern.
- Automatisierte Rotation wo möglich.
- Alte Keys deaktivieren, bevor neue ausgerollt werden.
- Notfallverfahren bei Verdacht auf Leck.
Tipps
.env-Dateien auf dem Host schützen.- Minimalprinzip: Nur benötigte Secrets im Container.
- Rechte einschränken:
chmod 600 .env. - Keine Secrets in Backups unverschlüsselt ablegen.
- Audit-Trail führen.
- Zentrales Vault für grössere Setups.
Typische Stolpersteine
.envim Git: Jeder mit Zugriff sieht Secrets.- Secrets im Build-Cache: Build-Secrets falsch konfiguriert.
- Logs entblössen: Passwörter in Fehlermeldungen.
- Falsche Berechtigungen:
.envist für alle lesbar. - Static Secrets: Nie rotierte Passwörter.
- Container-Dumps: Memory-Dumps enthalten Secrets.
Weiterführende Links und Infos
- BotServ.de Docker Sicherheit
- BotServ.de Docker Swarm
- BotServ.de Secret-Management
- BotServ.de Mozilla SOPS
- BotServ.de dotenvx
FAQ: Docker Secrets
Was sind Docker Secrets? Speziell verwaltete geheime Werte, besonders in Swarm.
Sind .env-Dateien sicher?
Nur, wenn sie lokal bleiben, geschützt sind und nicht im Git landen.
Kann ich Secrets in Compose ohne Swarm nutzen?
Ja, über Dateien in /run/secrets und Bind Mounts.
Was ist ein Build Secret? Ein Secret, das nur während des Builds verfügbar ist und nicht im Image landet.
Sollte ich Vault nutzen?
Für grössere oder professionelle Setups ja, für kleine Homelabs reichen .env oder SOPS.
Quellen und weiterführende Literatur
- Docker Secrets: https://docs.docker.com/engine/swarm/secrets/
- Docker BuildKit Secrets: https://docs.docker.com/build/building/secrets/
- HashiCorp Vault: https://www.vaultproject.io/
- Infisical: https://infisical.com/
Zusammenfassung: Docker Secrets richtig nutzen
Docker-Secrets gehören niemals in Images, Repositories oder Logs. Für einfache Setups reichen geschützte .env-Dateien und Swarm-Secrets, für höhere Ansprüche Vault, Infisical oder SOPS. Wichtig sind saubere Rechte, regelmässige Rotation und minimale Verbreitung im Container. Wer Secrets konsequent aus dem Build- und Run-Context heraushält, vermindert das Leckagerisiko erheblich und macht Container-Umgebungen deutlich robuster.


