Рубрики
Uncategorized

Использование магазина параметров AWS для хранения секретов и конфигурации

Магазин параметров AWS — очень хороший кандидат для хранения секретов и конфигурации. Он поддерживает Encr … Теги от AWS, DEVOPS.

AWS Paraments Store это очень хороший кандидат для хранения секретов и конфигурации. Он поддерживает шифрование параметров в покое.

AWS также имеет Менеджер секретов который является более развитым продуктом, и я думаю, что он превратился из самого магазина параметров. Единственная выгода, которую он имеет по сравнению с параметрами, — это автоматическое вращение клавиш с другими продуктами, такими как RDS. Кроме того, это не бесплатно. Он стоит 0,40 долл. США за секрет и 0,05 доллара за 10 000 вызовов API.

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

Хранение секретов в магазине параметров

AWS Console.

Использование параметров Store Via AWS Console очень прост. Он расположен под Системный менеджер панель.

Параметры Store поддерживает создание Строка , StringList и SecureString Типы. При создании SecureString Параметр, мы можем выбрать клавишу KMS, которая требуется для шифрования параметров.

Использование AWS CLI.

Для создания параметра:

aws ssm put-parameter --name "" --value "" --type SecureString --key-id ""

Если SecureString не требуется, - Я-ID Параметр может быть опущен. Если вы хотите перезаписать существующие параметры, пройдите флаг - Переписать к команде.

Чтобы проверить, был ли создан параметр:

aws ssm get-parameter --name "" --with-decryption

Если это не тип SecureString , - С дешифрованием не требуется. Обратите внимание, что дешифрование происходит на стороне сервера, секрет передается в открытии (конечно, через HTTPS).

Иерархическое хранение

Для меня это руки — по одной из лучших функций магазина параметров. Он поддерживает организацию секретов в иерархическом формате, что позволяет вам выдавать запросы Fetch для клавиши верхнего уровня и извлекать все параметры под ним.

Там Это полная статья о AWS об этом. Я покрою немного здесь.

В магазине параметров вы можете определить ключи в иерархии, разделенную / , Например:

/Dev/Database/Username
/Dev/Database/Password
/Dev/Database/Host

Они называются «Путью» в номенклатуре AWS. Затем вы можете выдать один запрос, чтобы получить все параметры под путь:

aws ssm get-parameters-by-path --path "/Dev/Database" --with-decryption

Это выдадут все 3 свойства. Ответ использует Pagination, а максимальный предел записей составляет 10.

Можно использовать иерархическое хранилище для групповых свойств разработки и производства отдельных свойств или в случае микросервисов, групповых свойств по службе.

Например, после различных приложений вот как вы можете определить различные свойства для различных сред:

/Dev/App1/Param1
/Dev/App1/Param2

/Dev/App2/Param1
/Dev/App2/Param2

/Prod/App1/Param1
/Prod/App1/Param2

/Prod/App2/Param1
/Prod/App2/Param2

Затем вы можете выдать запрос на /Dev/app1 или /Prod/app1 Чтобы получить все свойства конкретного приложения/услуги.

Интеграция в приложениях

Самый простой и очевидный способ — интегрировать AWS SDK в вашу приложение и извлекать параметры при необходимости. Есть преимущества и недостатки этого подхода.

Единственное преимущество, которое я вижу, это интуитивно понятно и прямое. Использование AWS SDK в вашем приложении говорит, что это приложение нуждается в некоторой функциональности AWS для запуска. И AWS SDK доступен в большом количестве языков.

Но, если у вас есть много приложений, вы в конечном итоге помещаете SDK во всех них (или, возможно, в общей библиотеке), которые заканчиваются раздумыми всеми приложениями. Если вы хотите когда-либо изменить путь конфигурации и секреты вводится в ваши приложения, изменение кода требуется во всех приложениях.

12-фактор Говорит, что конфигурация должна быть введена в программу снаружи. Наиболее предпочтительным способом является использование переменных среды. ( Примечание : При запуске приложений в контейнерах наиболее интуитивно понятным способом было бы пропустить переменные среды к контейнеру с использованием -e . Но любой может видеть переменные среды, переданные в контейнер, используя Docker осматривает Так что я не верю, что это безопасно.)

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

Преимущество подхода заключается в том, что приложение просто диктует, что это требует конфигурации в конкретном формате, и способ представленного приложения в конфигурации является заботой какой-то другой программы. Это хорошо работает с коммутационными поставщиками или использование другого источника для хранения секретов.

Приложения с открытым исходным кодом

Существует очень мало приложений с открытым исходным кодом, которые работают с параметром магазина и переменными экспорта в нужный формат. Прежде чем я начал работать над этой проблемой, я только что нашел одно приложение с открытым исходным кодом — камера (Это имя вдохновлена из 2-го книги Гарри Поттера, Палата секретов ).

Это действительно хорошо поддерживается, и он охватывает много случаев использования. Я оценил использование палаты для использования в моей нынешней организации, но она не соответствовала требованиям, поскольку он не работает с иерархической конфигурацией в магазине параметров. Он поддерживает только один уровень иерархии, где первый уровень — это сервис, а остальные все секреты хранятся под ним.

Как обсуждалось выше, нам нужно было организовать наши параметры в несколько вложенных иерархий, по окружающей среде, приложению и т. Д. Итак, мы написали с открытым исходным кодом CLI для этого — конфигуратор . Это позволяет экспортировать иерархические параметры в хранилище в вложенный формат, такой как JSON, который является то, что мы требоваем, чтобы минимизировать изменения, поскольку наши приложения принимали конфигурацию в файлах JSON Config.

Он также имеет поддержку печати Экспорт На stdout, если когда-нибудь мы выходим из файлов JSON в переменные среды. Но на данный момент он хорошо обслуживал наше цели и позволил нам перейти к магазину параметров без большого количества усилий или изменения кода в приложениях.

Взносы и отзывы на Конфигуратор приветствуются.

Оригинал: «https://dev.to/dhwaneetbhatt/using-aws-parameters-store-for-storing-secrets-and-configuration-15b»