Condividi un file Compose per VPN? Oscura i segreti nella copia renderizzata
Una chiave privata può stare nel YAML, in un valore d’ambiente o nell’output risolto che nessuno ha guardato. Controlla la copia che alleghi davvero.
Ogni volta che condividi un file Compose esistono due artefatti: quello che hai scritto e quello che uno strumento rende dopo aver sostituito le variabili. Il secondo è spesso più sensibile del primo, ed è quello che le persone incollano in una segnalazione di problema senza leggerlo. Se esamini solo il file sorgente, esamini il documento sbagliato.
Confronta cosa può contenere ciascuna copia prima di decidere cosa rimuovere.
Il modello renderizzato è un altro documento
Compose risolve le variabili d’ambiente, unisce i file di override e produce una configurazione effettiva che il lettore non riesce più a distinguere dai valori scritti a mano. Un riferimento come il nome di una variabile nella sorgente diventa il token dell’account stesso nell’output. La struttura che rende utile il file per la diagnosi sopravvive a quella trasformazione; sopravvive anche tutto ciò che non avrebbe mai dovuto esserci.
Rendi il file tu stesso prima di allegarlo e tratta quell’output come l’artefatto che stai esaminando. Se non puoi renderizzarlo, non puoi sapere cosa stai per pubblicare.
I segreti stanno in più posti del campo della chiave
Inizia dall’ovvio: chiavi private, chiavi precondivise, token, password e URL di connessione che incorporano credenziali. Poi guarda tutto ciò a cui il file punta, perché un riferimento non è un’oscuramento. Un file d’ambiente montato nel servizio, un file di configurazione collegato dall’host, un’etichetta che porta un token e un argomento di comando che include una password viaggiano tutti con il deployment anche quando lo YAML sembra pulito. Una chiave incollata in una variabile dal nome rassicurante resta una chiave.
I percorsi dell’host e i nomi dei servizi divulgano un secondo tipo di informazione. Il nome di una directory personale, un nome host interno o un intervallo di rete possono identificare una persona o un’organizzazione senza contenere una sola credenziale, e quel contesto vale la pena rimuoverlo per lo stesso motivo.
La dichiarazione di un segreto non è il segreto
Gli oggetti segreto di Compose separano la dichiarazione dal materiale: il servizio riceve un percorso o una destinazione, e il contenuto vive altrove. Mantenere la dichiarazione sostituendo il materiale è di solito lo scambio giusto, perché il revisore deve vedere che un segreto esiste e come è montato. Ciò che non deve sopravvivere è il contenuto stesso.
Le etichette e i commenti meritano lo stesso trattamento. Un commento che dice quale percorso della cassaforte custodisce la chiave di produzione dice a un attaccante dove guardare anche se non contiene alcuna chiave.
Conserva la forma perché il file diagnostichi ancora
Un’oscuramento che rimuove la modalità di rete, la versione dell’immagine o le impostazioni delle capacità produce un file con cui nessuno può fare debug. Sostituisci i valori sensibili e conserva le relazioni: quale servizio monta cosa, a quale rete si unisce, quale dispositivo gli serve. È la parte che il lettore usa per spiegare una route mancante o un dispositivo non disponibile. È anche la versione che un collega può confrontare con il proprio deployment funzionante.
docker compose -f compose.yaml config > rendered.yaml
grep -nE 'PRIVATE_KEY|PASSWORD|TOKEN|PSK|PrivateKey|passphrase' rendered.yaml
wc -l rendered.yaml
Non distribuire la copia oscurata come se fosse l’originale funzionante. È una descrizione, e una descrizione modificata per sembrare sicura fallirà in modi che sembrano errori di configurazione.
Se il materiale è stato esposto, sostituiscilo
Rimuovere l’allegato non rimuove le copie che altri hanno già fatto, e i mirror e le cache tengono le loro. Usa il processo di revoca e sostituzione dell’emittente per tutto ciò che è trapelato, poi aggiorna il deployment. L’ordine conta, perché sostituire prima e revocare dopo lascia una finestra con due credenziali valide.
Nei thread di supporto, inizia con l’errore esatto, la versione dell’immagine, la modalità di rete e l’unica impostazione non segreta che conta. Quella combinazione spiega un dispositivo mancante o una route rotta molto più spesso della chiave.