Zum Inhalt

Docker-Secrets

Anleitung zur Verwendung von Docker-Secrets für sichere Konfigurationsverwaltung in Bifolk.

Zielgruppe: Systemadministratoren, DevOps-Ingenieure


Übersicht

Docker-Secrets bieten eine sichere Möglichkeit zur Verwaltung sensibler Konfigurationswerte. Anstatt Passwörter und Schlüssel in Umgebungsvariablen zu speichern (die in Prozesslisten sichtbar sind), werden Secrets in Dateien gespeichert, die zur Laufzeit in den Container eingebunden werden.


Secret-Dateien

Bifolk verwendet die folgenden Secret-Dateien:

Datei Zweck Erforderlich
secrets/secret_key.txt Django SECRET_KEY für kryptografische Signierung Ja (Produktion)
secrets/db_password.txt PostgreSQL-Datenbankpasswort Nur mit PostgreSQL
secrets/email_password.txt SMTP-E-Mail-Passwort Nur mit E-Mail
secrets/oidc_client_secret.txt OIDC-Client-Secret Nur mit SSO

Secrets einrichten

1. Secret-Dateien erstellen

# Starken Secret-Key generieren
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())" > secrets/secret_key.txt

# Datenbankpasswort setzen
echo "ihr-sicheres-db-passwort" > secrets/db_password.txt

# E-Mail-Passwort setzen
echo "ihr-smtp-passwort" > secrets/email_password.txt

# OIDC-Secret setzen (wenn SSO verwendet wird)
echo "ihr-oidc-client-secret" > secrets/oidc_client_secret.txt

2. Berechtigungen setzen

bash scripts/bifolk_set_permissions.sh

Dies setzt restriktive Dateiberechtigungen (nur lesen, nur Eigentümer) für die Secret-Dateien.

3. Docker Compose konfigurieren

In docker-compose.yml werden Secrets deklariert, eingebunden und über _FILE-Umgebungsvariablen referenziert:

secrets:
  bifolk_secret_key:
    file: ../../secrets/secret_key.txt
  bifolk_email_password:
    file: ../../secrets/email_password.txt
  bifolk_oidc_client_secret:
    file: ../../secrets/oidc_client_secret.txt

services:
  bifolk-app:
    secrets:
      - bifolk_secret_key
      - bifolk_email_password
      - bifolk_oidc_client_secret
    environment:
      - DJANGO_SECRET_KEY_FILE=/run/secrets/bifolk_secret_key
      - EMAIL_PASSWORD_FILE=/run/secrets/bifolk_email_password
      - OIDC_CLIENT_SECRET_FILE=/run/secrets/bifolk_oidc_client_secret

Die Produktions-Compose-Dateien setzen keine Klartextumgebungsvariablen für sensible Werte. Secrets werden ausschließlich über die obigen _FILE-Variablen geladen.


Wie Secrets gelesen werden

Der Konfigurationsgenerator (generate_config.py) liest sensible Werte in dieser Reihenfolge:

  1. *_FILE-Umgebungsvariable, die auf eine Secret-Datei zeigt
  2. Docker-Secret unter /run/secrets/*
  3. Standardwert

Beispiel: Für den Django SECRET_KEY prüft das System:

  1. DJANGO_SECRET_KEY_FILE → liest die Datei an diesem Pfad
  2. /run/secrets/bifolk_secret_key → liest Docker-Secret direkt
  3. Generiert automatisch einen zufälligen Schlüssel (nur Entwicklung)

Sicherheits-Best-Practices

  • Committen Sie niemals Secret-Dateien in die Versionskontrolle (sie sind in .gitignore)
  • Verwenden Sie starke, zufällig generierte Werte
  • Rotieren Sie Secrets regelmäßig
  • Beschränken Sie Dateiberechtigungen für Secret-Dateien
  • Verwenden Sie Docker-Secrets anstelle von Umgebungsvariablen in der Produktion
  • Protokollieren Sie keine Secret-Werte

Sichere Werte generieren

# Django SECRET_KEY
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"

# Starkes zufälliges Passwort
openssl rand -base64 32

Verwandte Dokumentation