Лучший способ использовать AWS хранилище параметров? 1. Хранение всех переменных в одном параметре как JSON 2. Сохранение каждой переменной в качестве отдельного параметра - PullRequest
1 голос
/ 23 апреля 2020

У меня есть веб-приложение для размещения в AWS облаке. Мы читаем всю конфигурацию приложения из AWS хранилища параметров. Однако я не уверен, должен ли я иметь все переменные как один параметр в формате json или иметь один параметр для каждой переменной в хранилище параметров.

Проблема с одним параметром как json строка, AWS хранилище параметров не возвращает объект JSON, а строку. Таким образом, мы должны привязать строку к модели, которая включает отражение (что является очень тяжелой операцией). Наличие отдельного параметра для каждой переменной означает наличие дополнительных строк кода в программе (что не дорого).

Кроме того, мое приложение является мультитенантным приложением, в котором имеется промежуточный преобразователь арендатора. Таким образом, переменные конфигурации будут присутствовать для каждого арендатора.

1 Ответ

1 голос
/ 25 апреля 2020

Здесь нет правильного ответа - это зависит. Что я могу поделиться, так это логики моей команды 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 была ограничена. Мы все еще можем использовать его, потому что он гибкий и поддерживает некоторые из наших специальных политик ротации, которые еще не поддерживает менеджер секретов.

Надеюсь, наш опыт позволит вам выбрать лучший путь для вас и вашей команды.

...