Использование AWS Parameter Store для безопасного хранения credentials для ECS-tasks

Использование AWS Parameter Store для хранения credentials, ключей и другой sensitive данных, которые нежелательно хранить в открытом виде в репозитарии или в образе.

В ECS-кластере на основе EC2-инстанса запускаем Task CouchDB-prometheus-exporter, в котором происходит подключение к CouchDB-серверу для снятия статистики и предоставления метрик для мониторинг сервера(Prometheus)
В Task definition будем использовать переменные, значения которых будут динамически получаться из AWS Parameter Store(часть AWS Systems Manager), где они хранятся в зашифрованном виде и будут подставлены в контейнер в качестве переменных окружения с помощью утилиты aws-env

Порядок действий:

 

1.Создание пользоватаельского KMS-ключа
Можно использовать дефолтный системный KMS-ключ, но я создам пользовательский ключ

Узнаем KeyID

Узнаем полную информацию о ключе с помощью идентификатора ключа

 

2.Добавление необходимых параметров в AWS Parameter Store
Добавим в Parameter Store следующие параметры с их соответствующими значениями

Предположим, что создаем параметры для окружения production и для приложения couchdb-exporter-myprojectname в регионе us-east-1 шифруя нашим KMS-ключем

Для создания параметра, значение которого содержит http:// необходимо использовать следующий формат:

Просмотр всех установленных параметров в указанном регионе по пути /production/couchdb-exporter-myprojectname

Если у пользователя нет прав для создания необходимых параметров, то при попытки создать такие параметры, будет выдана ошибка типа:

Для предоставления необходимых прав необходимо создать/добавить для пользователя следующие политики

https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-access.html

Также parameter store могут быть созданы/изменены/просмотрены и через AWS Console(UI)

 

3. Создание IAM Policy
Создание IAM Policy с именем Parameter-Store-myprojectname-prod для доступа ECS Task-ов к AWS Systems manager и KMS-ключу(который был создан в первом пункте)

 

4.Создание IAM Role
Создание IAM роли(например, с именем Parameter-Store-myprojectname-prod-role), которая будет использоваться созданным позднее Task definition

 

5.Создание ECS-кластера, Task definition и Service в ECS-кластере

 

Создание ECS-кластера с именем couchdb-exporter-myprojectname

 

Создание Task definition с именем couchdb-exporter,  который будет использоваться в ECS Service для запуска контейнера

Все остальные параметры оставляем по умолчанию

JSON-формат такого Task-а имеет вид( вместо <account_id> подставьте свой идентификатор AWS-аккаунта

Собираем Docker образ, используемый в Task definition
На основе базового образа gesellix/couchdb-prometheus-exporter собираем свой образ,в котором обновляем кеш пакетов, устанавливаем curl, скачиваем утилиту aws-env, которая устанавливает в контейнере в качестве переменных окружения параметры из AWS parameter Store,
копируем бинарник couchdb-prometheus-exporter, а также копируем скрипт run.sh
В Entrypoint запускаем aws-env с обязательным указанием пути, по которому нужно искать параметры и именем региона,в котором эти параметры хранятся, а также запускаем скрипт run.sh

Docker-файл для сборки образа couchdb-exporter имеет вид

Важно обязательно передать значения переменных
AWS_ENV_PATH и AWS_REGION
https://github.com/Droplr/aws-env/

В файле run.sh выполняется непосредственный запуск бинарника couchdb-prometheus-exporter с необходимыми параметрами для подключения к CouchDB-базе данных в виде переменных, значения которых будут динамически подставятся из предоставленных утилитой aws-env переменных как переменных окружения в контейнере
Файл run.sh имеет вид

Сборка образа

Загрузка образа на Docker-рпеозитарий

Этот образ будет использоваться в ECS Task definition

Создаем Service в ECS-кластере на основе Task Definition

 

После создания Service проверяем состояние ECS-кластера

 

6.Проверка корректно запущенного контейнера и наличие корректных значений переменных, полученных из AWS parameter Store

Проверем запущенный сервис на EC2-инстансе в ECS-кластере

Проверяе наличие корректных значений параметров COUCHDB_URI,COUCHDB_USERNAME, COUCHDB_PASSWORD внутри контейнера

Провреяем наличие статистики на EC2-инстансе, на котором запущен Task

 

Источник:
https://www.whaletech.co/2017/08/01/Secure-Credentials-for-ECS-Tasks.html
https://aws.amazon.com/ru/blogs/compute/managing-secrets-for-amazon-ecs-applications-using-parameter-store-and-iam-roles-for-tasks
https://docs.aws.amazon.com/en_us/AmazonECS/latest/developerguide/task-iam-roles.html
https://github.com/Droplr/aws-env

Комментирование и размещение ссылок запрещено.

Комментарии закрыты.

Яндекс.Метрика