Получение секретных данных из HashiCorp Vault
Для централизованного хранения секретов система Accelera может быть интегрирована с системой HashiCorp Vault. Данное решение позволяет независимо от сервиса хранить и обновлять секреты.
Процесс получения секретов
Accelera использует REST-api для запроса секретных данных, пошаговый процесс:
- При запуске система проверяет, использовать ли интеграцию с HC Vault.
- В случае необходимости - отправляет запрос на
https://<vault_host>/v1/auth/approle/loginс парой RoleID и SecretID. В ответ получает временный токен. - С полученным токеном система отправляет запрос на получение пакета секретов, например на
https://vault_host/v1/secret/accelera/env - Используя полученную информацию подключается к компонентам.
Переменные, которые запрашиваются из HC Vault
| Сервис | REDIS_CONNECTION | BROKER_CONNECTION | CLICK_LOGIN | CLICK_PASS | BIND_CREDITENTIALS_USER | BIND_CREDITENTIALS_PASS | DB_USER | DB_PASSWORD |
|---|---|---|---|---|---|---|---|---|
| flows_backoffice | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ||
| flows_engine | ✅ | ✅ | ||||||
| flows_actions | ✅ | ✅ | ||||||
| flows_frontend | ||||||||
| flows_cache | ✅ | ✅ | ✅ | |||||
| flows_bulk | ✅ | ✅ | ✅ | ✅ | ||||
| flows_timers | ✅ | ✅ | ||||||
| flows_segments | ✅ | ✅ | ✅ | ✅ |
Совместимость с Docker Secret
Система Accelera не дает возможность настроить одновременно получение секретов из Docker Secret и HC Vault, они должны располагаться в 1 месте. Однако для подключения к HC Vault необходимо использовать RoleID и SecretID, которые должны быть записаны в Docker Secret. То есть:
- Нельзя хранить один секрет в Docker Secret, а другой - в HC Vault.
- При настройке подключения к HC Vault переменная USE_DOCKER_SECRET должна быть в значении false.
- Переменные RoleID и SecretID должны быть записаны в секрете по умолчанию, т.к. хранение в открытом виде на диске данной пары недопустимо.
Таким образом для передачи в Accelera параметров RoleID и SecretID система должна быть запущена в режиме docker swarm. Алгоритм настройки этих параметров такой же, как и в статье Хранение секретных данных в Docker Secret.
ℹ️
Единственное отличие - мы передаем только переменные RoleID и SecretID, настройка переменных подключения REDIS_CONNECTION и тд описана ниже.
Настройка
При подключении к HC Vault в приложении нужно указать 4 переменные среды:
USE_HASHI_CORP_VAULT | Активация/деактивация подключения, true/false |
VAULT_ROLE_ID | Идентификатор роли в Vault |
VAULT_SECRET_ID | Идентификатор секрета в Vault |
VAULT_URL | Адрес подключения для получения данных, пример - https://vault_host/v1/secret/accelera/env |
Эти переменные должны быть указаны для каждого компонента, можно указать их в общем .env файле (рядом с REDIS_CONNECTION и тд).
В VAULT_ROLE_ID и VAULT_SECRET_ID необходимо указать названия секретов, которые созданы в Docker Secrets.
Затем укажите в перечисленных выше переменных названия соответствующих секретов из HC Vault. Пример:
...
CLICK_LOGIN=click_login
CLICK_PASS=click_pass
BROKER_CONNECTION=broker_connection
REDIS_CONNECTION=redis_connection
...При такой настройке система запросит пакет секретов по указанному адресу и для каждой переменной возьмет соответствующее значение. Для CLICK_LOGIN будет использован секрет с именем click_login из HC_Vault.
Если такого секрета не существует, при запуске сервис выдаст соответствующую ошибку.