TL; DR
Istnieje wiele powodów, dla których warto używać zmiennych środowiskowych zamiast plików konfiguracyjnych, ale dwa z nich najczęściej pomijane to wartość użyteczna konfiguracji pozapasmowej i ulepszonej separacji serwerów, aplikacji lub ról organizacyjnych. Zamiast przedstawiać wyczerpującą listę wszystkich możliwych powodów, w swojej odpowiedzi poruszam tylko te dwa tematy i lekko dotykam ich wpływu na bezpieczeństwo.
Konfiguracja pozapasmowa: oddzielanie sekretów od kodu źródłowego
Jeśli przechowujesz wszystkie swoje sekrety w pliku konfiguracyjnym, musisz rozpowszechniać te sekrety na każdym serwerze. Oznacza to albo sprawdzenie tajemnic w celu kontroli wersji obok kodu, albo posiadanie całkowicie oddzielnego repozytorium lub mechanizmu dystrybucji tajnych danych.
Szyfrowanie twoich tajemnic tak naprawdę nie pomaga w rozwiązaniu tego. Wszystko, co robi, to przesunąć problem do jednego usunięcia, ponieważ teraz musisz się również martwić o zarządzanie kluczami i ich dystrybucję!
Krótko mówiąc, zmienne środowiskowe są podejściem do przenoszenia danych z serwera źródłowego lub aplikacji z kodu źródłowego, gdy chcesz oddzielić programowanie od operacji. Jest to szczególnie ważne, jeśli opublikowałeś kod źródłowy!
Zwiększ separację: serwery, aplikacje i role
Chociaż z pewnością możesz mieć plik konfiguracyjny do przechowywania swoich sekretów, jeśli przechowujesz je w kodzie źródłowym, masz problem ze specyfiką. Czy masz oddzielny oddział lub repozytorium dla każdego zestawu sekretów? Jak upewnić się, że odpowiedni zestaw sekretów trafia na właściwe serwery? Czy też zmniejszasz bezpieczeństwo, mając „tajemnice”, które są wszędzie takie same (lub czytelne wszędzie, jeśli masz je wszystkie w jednym pliku), a zatem stanowią większe ryzyko w przypadku niepowodzenia kontroli bezpieczeństwa jednego systemu?
Jeśli chcesz mieć unikalne sekrety na każdym serwerze lub dla każdej aplikacji, zmienne środowiskowe eliminują problem z zarządzaniem wieloma plikami. Jeśli dodasz nowy serwer, aplikację lub rolę, nie musisz tworzyć nowych plików ani aktualizować starych: wystarczy zaktualizować środowisko danego systemu.
Rozstanie myśli o bezpieczeństwie
Chociaż dogłębne badanie bezpieczeństwa jądra / pamięci / pliku nie wchodzi w zakres tej odpowiedzi, warto zauważyć, że odpowiednio zaimplementowane zmienne środowiskowe dla poszczególnych systemów są nie mniej bezpieczne niż „zaszyfrowane” sekrety. W obu przypadkach system docelowy nadal musi przechowywać odszyfrowany sekret w niektórych momencie, aby ją wykorzystać.
Warto również zauważyć, że gdy wartości są przechowywane w pamięci ulotnej w danym węźle, nie ma pliku na dysku, który można skopiować i zaatakować offline. Jest to ogólnie uważane za zaletę tajemnic w pamięci, ale z pewnością nie jest rozstrzygające.
Kwestia zmiennych środowiskowych w porównaniu z innymi technikami zarządzania tajemnicami dotyczy raczej kompromisów w zakresie bezpieczeństwa i użyteczności niż absolutów. Twój przebieg może się różnić.