TL; DR
Es gibt eine Reihe von Gründen, Umgebungsvariablen anstelle von Konfigurationsdateien zu verwenden. Zwei der häufigsten Gründe, die übersehen werden müssen, sind der Nutzwert der Out-of-Band-Konfiguration und die verbesserte Trennung zwischen Servern, Anwendungen oder Organisationsrollen. Anstatt eine erschöpfende Liste aller möglichen Gründe vorzulegen, spreche ich in meiner Antwort nur diese beiden Themen an und gehe leicht auf deren Auswirkungen auf die Sicherheit ein.
Out-of-Band-Konfiguration: Geheimnisse vom Quellcode trennen
Wenn Sie alle Ihre Geheimnisse in einer Konfigurationsdatei speichern, müssen Sie diese Geheimnisse auf jeden Server verteilen. Dies bedeutet entweder, dass Sie die Geheimnisse zusammen mit Ihrem Code in die Revisionskontrolle einchecken oder dass Sie ein völlig separates Repository oder einen separaten Verteilungsmechanismus für die Geheimnisse haben.
Das Verschlüsseln Ihrer Geheimnisse hilft dabei nicht wirklich. Alles, was Sie tun müssen, ist, das Problem zu entfernen, denn jetzt müssen Sie sich auch um die Schlüsselverwaltung und -verteilung kümmern!
Kurz gesagt, Umgebungsvariablen sind ein Ansatz zum Verschieben von Daten pro Server oder pro Anwendung aus dem Quellcode, wenn Sie die Entwicklung von den Vorgängen trennen möchten. Dies ist besonders wichtig, wenn Sie Quellcode veröffentlicht haben!
Verbesserung der Trennung: Server, Anwendungen und Rollen
Während Sie sicherlich eine Konfigurationsdatei für Ihre Geheimnisse haben könnten, haben Sie ein Spezifitätsproblem, wenn Sie die Geheimnisse im Quellcode speichern. Haben Sie für jeden Satz von Geheimnissen eine eigene Filiale oder ein eigenes Repository? Wie stellen Sie sicher, dass die richtigen Geheimnisse zu den richtigen Servern gelangen? Oder verringern Sie die Sicherheit, indem Sie "Geheimnisse" haben, die überall gleich sind (oder überall lesbar sind, wenn Sie alle in einer Datei haben) und daher ein größeres Risiko darstellen, wenn die Sicherheitskontrollen eines Systems ausfallen?
Wenn Sie auf jedem Server oder für jede Anwendung eindeutige Geheimnisse haben möchten, müssen Sie mit Umgebungsvariablen nicht mehr eine Vielzahl von Dateien verwalten. Wenn Sie einen neuen Server, eine neue Anwendung oder eine neue Rolle hinzufügen, müssen Sie keine neuen Dateien erstellen oder alte aktualisieren. Sie aktualisieren lediglich die Umgebung des betreffenden Systems.
Abschiedsgedanken zur Sicherheit
Obwohl eine gründliche Untersuchung der Kernel-, Speicher- und Dateisicherheit für diese Antwort nicht in Frage kommt, sollte darauf hingewiesen werden, dass ordnungsgemäß implementierte Umgebungsvariablen pro System nicht weniger sicher sind als "verschlüsselte" Geheimnisse. In beiden Fällen muss das Zielsystem das entschlüsselte Geheimnis noch irgendwann im Speicher halten, um es verwenden zu können.
Es ist auch erwähnenswert, dass es keine Datei auf der Festplatte gibt, die kopiert und offline angegriffen werden kann, wenn Werte in einem flüchtigen Speicher eines bestimmten Knotens gespeichert sind. Dies wird im Allgemeinen als Vorteil für In-Memory-Geheimnisse angesehen, ist aber sicherlich nicht schlüssig.
Bei der Frage der Umgebungsvariablen im Vergleich zu anderen Geheimhaltungs-Management-Techniken geht es mehr um Kompromisse zwischen Sicherheit und Benutzerfreundlichkeit als um absolute Werte. Ihr Kilometerstand kann variieren.