Skip to content
BotServBotServ
DockerSecretsSicherheitEnvCompose

Docker Secrets richtig nutzen

Secrets in Docker und Compose sicher verwalten. Env-Dateien, Docker Secrets, Vault und Best Practices.

S

schutzgeist

3 min read
Docker Secrets richtig nutzen

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 ENV setzen.
  • Passwörter direkt in compose.yaml schreiben.
  • .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- oder echo-Befehle ausgeben.
  • Logging-Level auf INFO oder 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

  • .env im Git: Jeder mit Zugriff sieht Secrets.
  • Secrets im Build-Cache: Build-Secrets falsch konfiguriert.
  • Logs entblössen: Passwörter in Fehlermeldungen.
  • Falsche Berechtigungen: .env ist für alle lesbar.
  • Static Secrets: Nie rotierte Passwörter.
  • Container-Dumps: Memory-Dumps enthalten Secrets.

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

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.

Zurück zum KI Blog
Share:

Ähnliche Beiträge