TL; DR
Существует несколько причин для использования переменных среды вместо файлов конфигурации, но две наиболее распространенные из них, которые следует игнорировать, - это полезность конфигурации вне диапазона и улучшенное разделение между серверами, приложениями или организационными ролями. Вместо того, чтобы представлять исчерпывающий список всех возможных причин, я затрагиваю только эти две темы в своем ответе и слегка касаюсь их последствий для безопасности.
Внешняя конфигурация: отделение секретов от исходного кода
Если вы храните все свои секреты в файле конфигурации, вы должны распространять эти секреты на каждом сервере. Это либо означает проверку секретов в контроле версий вместе с вашим кодом, либо наличие полностью отдельного хранилища или механизма распространения секретов.
Шифрование ваших секретов не поможет решить эту проблему. Все, что нужно сделать, это выдвинуть проблему к одному удалению, потому что теперь вам нужно беспокоиться и об управлении ключами и их распределении!
Короче говоря, переменные среды - это подход к переносу данных для каждого сервера или приложения из исходного кода, когда вы хотите отделить разработку от операций. Это особенно важно, если вы опубликовали исходный код!
Улучшенное разделение: серверы, приложения и роли
Хотя у вас наверняка может быть файл конфигурации для хранения ваших секретов, но если вы храните секреты в исходном коде, у вас есть проблема специфичности. У вас есть отдельная ветка или хранилище для каждого набора секретов? Как вы гарантируете, что правильный набор секретов попадет на нужные серверы? Или вы уменьшаете безопасность, имея «секреты», которые везде одинаковы (или читаются везде, если у вас есть все в одном файле), и, следовательно, представляют больший риск в случае сбоя средств контроля безопасности какой-либо из систем?
Если вы хотите иметь уникальные секреты на каждом сервере или для каждого приложения, переменные среды устраняют проблему необходимости управлять множеством файлов. Если вы добавляете новый сервер, приложение или роль, вам не нужно создавать новые файлы или обновлять старые: вы просто обновляете среду рассматриваемой системы.
Прощальные мысли о безопасности
Хотя тщательное изучение безопасности ядра / памяти / файла выходит за рамки этого ответа, стоит отметить, что правильно реализованные переменные среды для системы не менее безопасны, чем «зашифрованные» секреты. В любом случае, целевая система все еще должна держать расшифрованный секрет в памяти в какой-то момент, чтобы использовать его.
Также стоит отметить, что когда значения хранятся в энергозависимой памяти на данном узле, на диске нет файла, который можно было бы скопировать и атаковать в автономном режиме. Обычно это считается преимуществом секретов в памяти, но это, конечно, не является окончательным.
Проблема переменных среды и других методов управления секретами на самом деле больше связана с компромиссами безопасности и удобства использования, чем с абсолютами. Ваш пробег может варьироваться.