Secret Handling
Secrets werden nicht direkt im Image, nicht im Workspace und nicht als normale Umgebungsvariable in der compose.yml hinterlegt, sondern gezielt über Docker Compose Secrets bereitgestellt.
Damit wird erreicht, dass sensible Werte nur den Containern zur Verfügung stehen, die sie tatsächlich benötigen.
Grundprinzip
Abschnitt betitelt „Grundprinzip“Secrets werden pro Service (Container) explizit freigegeben.
compose.yml
secrets: - github_auth_tokenEin Container erhält ein Secret also nur dann, wenn es in seiner Service-Definition ausdrücklich eingetragen ist.
Die zentrale Definition erfolgt im unteren Bereich der compose.yml:
compose.yml
secrets: github_auth_token: file: ./secrets/github_auth_token app_env: file: ./secrets/.env.appBeispiel: Token für NPM-Registry
Abschnitt betitelt „Beispiel: Token für NPM-Registry“Der deps-Container kann einen Personal Access Token benötigen, um im Falle einer privaten NPM-Registry Zugriff auf NPM-Pakete zu erhalten.
compose.yml
deps: ... secrets: - github_auth_tokenIm Container wird das Secret nicht als Umgebungsvariable gepflegt, sondern bewusst aus /run/secrets/... gelesen:
compose.yml
GITHUB_AUTH_TOKEN="$(cat /run/secrets/github_auth_token)" exec npm ci --ignore-scriptsBeispiel: Runtime-Konfiguration der Anwendung
Abschnitt betitelt „Beispiel: Runtime-Konfiguration der Anwendung“Der app-Container erhält mit app_env ein eigenes Secret für Laufzeitkonfiguration.
compose.yml
app: ... secrets: - app_envDieses Muster eignet sich für Anwendungs-Konfigurationen, die nicht in das Repository gehören1, z.B.:
- API-Keys
- Datenbank-Zugangsdaten
- interne Runtime-Flags
- Umgebungsabhängige Konfiguration
Abgrenzung zu normalen Umgebungsvariablen
Abschnitt betitelt „Abgrenzung zu normalen Umgebungsvariablen“Nicht jede environment-Variable ist ein Secret. Werte wie Cache-Pfade oder allgemeine Laufzeitoptionen sind technische Konfiguration:
compose.yml
environment: HOME: /tmp NPM_CONFIG_CACHE: /tmp/npm-cacheSolche Werte sind unkritisch und dürfen direkt in der Compose-Datei stehen.
Footnotes
Abschnitt betitelt „Footnotes“-
Diese Dateien sollten in der
.gitignoregelistet sein. ↩