Современные приложения часто используют внешние системы для управления значениями конфигурации и секреты. Один из этих внешних систем — AWS Параметр Магазин , что является частью AWS Systems Manager оказание услуг.
Там отличный блог о вершине 10 лучших секретных программ управления для обеспечения безопасности приложений который охватывает эту тему значительным образом.
Этот пост блога продемонстрирует практический способ управлять секретами/параметрами в магазине параметров AWS SSM с террафом. Удивительно, что такое Parzival? Продолжайте читать, чтобы узнать.
участок
Управляющие значения приложений довольно просто для небольших приложений, где только один (1) до трех (3) значений извлекается из внешней системы. Допустим, мое приложение мало и требует 3 значений на в реальном времени ( Разработка
, Постановка
и Производство
) Давайте рассмотрим их и их типы:
Google_client_id. | Безопасная строка |
Google_client_secret. | Безопасная строка |
Log_level. | Нить |
Задача № 1: выравнивание в живых средах
Я вошел в консоль AWS и создал три (3) параметры в магазине параметров AWS на окружающую среду (всего 9). Теперь мне нужно добавить еще один параметр, Slack_webhook_url
Строка
тип. Понимаете ли вы, что каждый параметр, который необходимо добавить, требует выполнения этого на живую среду? Это 3x Время, и он становится безумнее, поскольку приложение растет.
Также есть вероятность того, что я добавил параметр в Развитие
И не добавил его в Постановка
После этого я развернул развертывание моего приложения к Постановка
и бум 💥 — Постановка
Мертвый ребенок, Постановка
мертвый.
К счастью, это только Постановка
и Производство
Не страдал никаких простоя, но он все еще потребляет драгоценное инженерное время расследование, почему приложение разбилось в Постановка
Отказ Кроме того, если инженеры QA работают тесты на Постановка
, теперь они застряли, пока я не выясню, что пошло не так. Конечно, что относится ко всем облачным ресурсам, таким как AWS EC2, S3 ведро и т. Д.
Многие печальные истории говорят инженерам, которые сохраняют свои облачные ресурсы для нескольких живых средов с консолью AWS (GUI), давайте не будем те, кто рассказывает эти истории.
Выравнивание в живых средах — решение
Использование Инфраструктура как код Смягчает риск прозверенной живой среды. И как упомянуто в названии, я реализую IAC для управления параметрами SSM с Террафом Отказ
Challenge # 2: безопасно хранить секреты
Для Очевидные причины Я не хочу совершать конфиденциальные данные в мой исходный код (Git). Но, с другой стороны, я хочу контролировать версию для параметров ценности Отказ
Эта часть сложная; Как создать параметр SSM с террафом, не совершая его значение на исходный код? Файлы Terraform являются частью исходного кода, так что это своего рода парадокс.
Спасование секретов безопасно — решение
Во-первых, я создаю параметры SSM с террафом; Начальное значение для каждого параметра должно быть фиктивное значение, такое как "Пустой"
Отказ Позже команда Dev может подтвердить значения параметра, проверяя, если это все еще "Пустой"
, что означает, что люди не установили это. Это облегчает отслеживание и мониторинг, какие параметры не были установлены людьми.
Во-вторых, я буду управлять параметром ценности с консолью AWS (GUI). Еще один парадокс в том, что я собираюсь использовать консоль AWS, но в предыдущем разделе я писал:
«… Многие печальные истории говорят инженерам, которые поддерживают их Облачные ресурсы … с консолью AWS (GUI) … »
Смелый текст — это ответ; Я собираюсь управлять моим ценности в графическом интерфейсе не облачные ресурсы Отказ
Наконец, для решения требований «… версия для параметров значений … «Я буду использовать функцию управления версиями параметров SSM, см. Работа с параметрами SSM версификация Отказ Я не буду покрывать параметры SSM-параметров в этом сообщении в блоге.
Хорошо, звучит великолепно, но я не вижу настоящего решения здесь; Это звучит как хорошая теория, но как мне это сделать на практике?
Для этого есть модуль террафора
Существует множество модулей террафора, которые помогают с управляющими параметрами SSM, вот несколько примеров:
- CloudPosse/Terraform-AWS-SSM-Parameter-Store
- Умотиф — Public/Terraform-AWS-SSM-параметры
- TMKNOM/TERRAFORM-AWS-SSM-PARAMETER
- FXinnovation — Public/Terraform-Module-AWS-SSM-параметры
Мне нужно что-то «проще»; Способ предоставить список параметров и их типов, префикс для добавления каждого параметра и … Вот и это ¯_ (ツ) _/¯
Встретить Under19/TerraForm-AWS-SSM-параметры , модуль террафора, который я создал. Вот что это делает:
«Создание параметров параметров AWS SSM с модулем террафора. Создание/удаление (схема) управляется с террафом, а значения должны поддерживаться через консоль AWS. «
Возвращаясь к нашему примеру, вот как вы создаете параметры SSM с моим модулем. Чтобы удержать это просто, я ухожу из ранее упомянутого параметра Slack_webhook_url.
.
module "app_params" { source = "unfor19/ssm-parameters/aws" version = "0.0.2" prefix = "/myapp/dev/" string_parameters = [ "LOG_LEVEL", ] securestring_parameters = [ "GOOGLE_CLIENT_ID", "GOOGLE_CLIENT_SECRET" ] }
Хорошо? Разве это не невероятно? Модуль Terraform создаст все предоставленные параметры и добавить префикс
к их именам. Для меня имея параметры схемы (имя + тип +) в одном месте, облегчают реализовать, какие параметры доступны на живую среду.
Напоминая вам, что начальное значение для каждого параметра есть "Пустой"
, который можно изменить, устанавливая некоторые из входов; Проверьте Страница входов реестра Terraform Чтобы увидеть, какие входы доступны.
Наконец, я могу войти в консоль AWS и управлять своим параметром SSM ценности не беспокоясь о том, что следующий Террафом применяется
изменит свои ценности. Если вам интересно, как я это сделал, я использовал Террафом жизненного цикла мета-аргумент ; Чтобы увидеть практический пример того, как использовать жизненный цикл
С значениями параметров SSM проверьте мой модуль main.tf Отказ
Также важно отметить, что модуль протестирован на различных версиях террафора.
- 0.12.31
- 0.13.6
- 0.14.8
- 0,15,0-бета2
- 1.0.6 (Последнее)
Для получения более подробной информации о тестовом номере, см. CI/CD logs и Террафом модуль местное развитие Отказ
Реконструировать
Я создал три (3) параметры SSM с террафором, управляя их значениями через консоль AWS. Значения отделены от области террафора, поэтому используя Террафом применяется
Будет ли не Переопределите изменения, которые я сделал для значений через AWS Console.
Задача № 3: Управление значениями параметров SSM программно
Установка значений для трех (3) параметров через консоль AWS на живую среду — это в порядке. Однако, поскольку приложение растет, количество параметров может расти.
Нести со мной на этом; Приложение стало более заметным и требуется тридцать (30) параметров SSM. Так что я создал те тридцать (30) параметров в Развитие
и установите их значения с помощью консоли AWS (GUI). Давайте предположим, что двадцать пять (25) из тридцати (30) идентичны в разработка
и Постановка
, оставляя пять (5) уникальных ценностей на окружающую среду.
Хотел бы я быть способ скопировать двадцать пять (25) значений параметров из Развитие
к Постановка
Отказ Я надеюсь, что вы понимаете, как больно может сделать это вручную и идти вперед и назад для копирования значений параметров вставки.
Обычно это не боль в Развитие
Поскольку значения параметров устанавливаются по одному и не сразу. Однако, Сценарий, который я имею в виду, что происходит при создании новой живой среды, как Постановка
, где все начальные значения являются "Пустой"
Отказ
Другим возможным сценарием для необходимости «насыпной копии параметров SSM» — это когда мне нужно создать динамическую среду и устанавливать начальные значения динамической среды, чтобы быть такими же, как и в Развитие
окружающая обстановка.
И снова это звучит приятно, но как бы вы скопировали значения параметров SSM оптом? Есть такой путь?
Управляющие значения параметров SSM программно — решение
Встретить under19/parzival Отказ Причина для имени нелепые 😁 — я думал о названии этого параван который стоит пункт метр- валь ЕЭС, и это звучало как Parzival Что такое круче, особенно если вы смотрели Готовый игрок один .
ИСПЫТАНИЕ : Я призываю вас проверить, есть ли существующая CLI, которая может получить/set Более 10 параметров SSM по пути в одной команде. Официальный AWS CLI поддерживает пагинацию, но это означает, что мне нужно написать код, который оборачивает AWS SSM Get-parament-by-path ...
. Единственный подобный проект, который я нашел, называется Binxio/AWS-SSM-копия , у которых нет возможностей, которые мне нужны.
Двигаясь сюжетом, Parzival выгоден для следующих сценариев:
- Скопируйте значения из одной среды в другую — например, из
Развитие
кПостановка
илиРазвитие
кMy-Dynamic-Env-1
, и так далее. Копирование значений на счетах также возможна, потому чтополучать
иУстановить
Команды разделены. - Устранение неисправностей значения параметров SSM — например, получить все параметры по пути и найдите те, которые человек не инициализируется (содержит значение
«пустой»
).
Заключить, Parzival — это простая обертка для Получить параметры по-пути и Put-Parameter Отказ
Давайте увидимся в действии!
Получить параметры по пути
parzival get --region "us-east-1" \ --output-file-path ".dev_parameters.json" \ --parameters-path "/myapp/dev/"
Установить значения параметров по пути
parzival set --region "us-east-1" \ --input-file-path ".dev_parameters.json" \ --prefix-to-replace "/myapp/dev/" \ --parameters-path "/myapp/stg/"
Для просмотра выхода вышеуказанных команд проверьте CI/CD Logs и искать Тест работа.
Окончательные слова
Чего же ты ждешь? Продолжай и играйте с модулем террафора Under19/TerraForm-AWS-SSM-параметры , а затем управлять значениями параметров SSM с under19/parzival Отказ
Оба проекта используют преимущества LocalStack , который обеспечивает полностью функциональную местную облачную среду, как «местные AWS». Использование LocalStack в рамках процесса разработки помогло бы мне быстро, чтобы проверить мое приложение; По этой причине вам даже не нужна учетная запись AWS, чтобы проверить модуль Terraform и Parzival. Так что следуйте инструкциям в Readme.md
файлы и делайте свою магию.
Счастливое ССМИНГ!
Источники изображений
- Обложка изображения Hackerboy смайлик
- Zed мертвый ребенок
- Стартивные лестницы парадокс
- Психо ужас
- Готовый игрок один
Оригинал: «https://dev.to/unfor19/managing-aws-ssm-parameters-with-terraform-and-parzival-1chg»