TL; DR
Esistono diversi motivi per utilizzare le variabili di ambiente anziché i file di configurazione, ma due dei più comuni da trascurare sono il valore di utilità della configurazione fuori banda e la separazione avanzata tra server, applicazioni o ruoli organizzativi. Piuttosto che presentare un elenco esaustivo di tutte le possibili ragioni, affronterò solo questi due argomenti nella mia risposta e toccerò leggermente le loro implicazioni sulla sicurezza.
Configurazione fuori banda: separazione dei segreti dal codice sorgente
Se memorizzi tutti i tuoi segreti in un file di configurazione, devi distribuirli su ciascun server. Ciò significa che è necessario controllare i segreti nel controllo di revisione insieme al codice o disporre di un repository o di un meccanismo di distribuzione completamente separati per i segreti.
Crittografare i tuoi segreti non aiuta davvero a risolverlo. Tutto ciò che fa è spingere il problema ad una rimozione, perché ora devi preoccuparti anche della gestione e della distribuzione delle chiavi!
In breve, le variabili di ambiente sono un approccio per spostare i dati per server o per applicazione fuori dal codice sorgente quando si desidera separare lo sviluppo dalle operazioni. Ciò è particolarmente importante se hai pubblicato il codice sorgente!
Migliora la separazione: server, applicazioni e ruoli
Mentre potresti sicuramente avere un file di configurazione per contenere i tuoi segreti, se li memorizzi nel codice sorgente hai un problema di specificità. Hai un ramo o un repository separato per ogni set di segreti? Come assicurate che il giusto set di segreti arrivi ai server giusti? O riduci la sicurezza avendo "segreti" che sono gli stessi ovunque (o leggibili ovunque, se li hai tutti in un unico file), e quindi costituiscono un rischio maggiore se i controlli di sicurezza di un sistema falliscono?
Se si desidera avere segreti univoci su ciascun server o per ogni applicazione, le variabili di ambiente eliminano il problema di dover gestire una moltitudine di file. Se aggiungi un nuovo server, applicazione o ruolo, non devi creare nuovi file o aggiornare quelli vecchi: aggiorni semplicemente l'ambiente del sistema in questione.
Pensieri di separazione sulla sicurezza
Mentre una completa esplorazione della sicurezza di kernel / memoria / file non rientra nell'ambito di questa risposta, vale la pena sottolineare che le variabili di ambiente per sistema correttamente implementate non sono meno sicure dei segreti "crittografati". In entrambi i casi, il sistema di destinazione deve ancora conservare il segreto decifrato in memoria ad un certo punto per poterlo utilizzare.
Vale anche la pena sottolineare che quando i valori sono memorizzati nella memoria volatile su un determinato nodo, non esiste alcun file su disco che può essere copiato e attaccato offline. Questo è generalmente considerato un vantaggio per i segreti in memoria, ma certamente non è conclusivo.
La questione delle variabili d'ambiente rispetto ad altre tecniche di gestione dei segreti è in realtà più sui compromessi di sicurezza e usabilità che non sugli assoluti. Il tuo chilometraggio può variare.