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¶
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:
*_FILE-Umgebungsvariable, die auf eine Secret-Datei zeigt- Docker-Secret unter
/run/secrets/* - Standardwert
Beispiel: Für den Django SECRET_KEY prüft das System:
DJANGO_SECRET_KEY_FILE→ liest die Datei an diesem Pfad/run/secrets/bifolk_secret_key→ liest Docker-Secret direkt- 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¶
- Konfiguration - Vollständige Umgebungsvariablen-Referenz
- Installation - Installationsanleitung