Здесь нет правильного ответа - это зависит. Что я могу поделиться, так это логики моей команды c.
1) Приложения последовательно создаются для чтения переменных env для переопределения значений по умолчанию
Все конфигурации / секреты разработаны таким образом в нашем Приложения. Основная причина в том, что нам не нравятся секреты, хранящиеся в незашифрованном виде на диске. Да, переменные env могут быть прочитаны даже в этом случае, но менее рискованно, чем диск, который может быть скопирован
2) SSM Parameter Store может передавать значения в переменные среды
Это включает в себя Lambda, ECS Containers, et c. Это позволяет нам хранить в зашифрованном виде (SSM Secure), передавать в зашифрованном виде и внедрять в приложения. Он обрабатывает расшифровку KMS для вас (при условии, что вы настроили разрешения).
3) Jenkins (наш CI) также может вводить переменные env из учетных данных Jenkins
4 ) Ничто не мешает вам создать библиотеку, которая поддерживает оба метода
Наш код считывает переменную env под названием secrets_ json, и, если она существует и проходит проверку, она устанавливает ключ / значения в них как переменные env .
Примечание: здесь также обрабатывается аспект, о котором вы упомянули, что JSON является строкой.
Заключение
Ключом здесь является то, что вы хотите получить код, который гибкий и обрабатывает несколько различных ситуаций. Используйте его по умолчанию во всех ваших проектах приложений. Мы исторически использовали отображение 1: 1, потому что изначально длина SSM была ограничена. Мы все еще можем использовать его, потому что он гибкий и поддерживает некоторые из наших специальных политик ротации, которые еще не поддерживает менеджер секретов.
Надеюсь, наш опыт позволит вам выбрать лучший путь для вас и вашей команды.