Una dintre cele mai periculoase greșeli de securitate în containerizare este stocarea parolelor de baze de date, a cheilor API sau a certificatelor private în variabile de mediu simple (ENV sau fișiere .env comise în Git). Variabilele de mediu pot fi citite de orice proces din container, apar în jurnalele de depanare (docker inspect) și sunt vizibile în dump-urile de memorie la incidente. Docker Secrets oferă un mecanism securizat prin care informațiile confidențiale sunt montate exclusiv în memorie ca fișiere în /run/secrets/.
Definirea și consumarea secretelor în compose.yaml
services:
database:
image: postgres:16-alpine
environment:
POSTGRES_USER: app_admin
# Spunem lui PostgreSQL să citească parola direct din fișierul secret montat:
POSTGRES_PASSWORD_FILE: /run/secrets/db_root_password
secrets:
- db_root_password
api:
image: my-node-api:latest
environment:
DB_PASSWORD_FILE: /run/secrets/db_root_password
secrets:
- db_root_password
# Definirea sursei secretelor (locale sau externe):
secrets:
db_root_password:
file: ./secrets/db_password.txt
Cum citește aplicația un secret în cod (exemplu Node.js / Python):
// Exemplu Node.js:
const fs = require('fs');
function getSecret(secretName) {
try {
return fs.readFileSync(`/run/secrets/${secretName}`, 'utf8').trim();
} catch (err) {
return process.env[secretName]; // Soluție de rezervă pentru medii dev locale
}
}
const dbPassword = getSecret('db_root_password');
De ce este mai sigur: Fișierele din
/run/secrets/ sunt montate ca un sistem de fișiere tmpfs în memoria RAM. Ele nu sunt scrise niciodată pe disc în straturile containerului și dispar automat la oprirea serviciului.