Использование Vault в качестве источника конфигурационных свойств
Введение
HashiCorp Vault — это инструмент для централизованного и безопасного управления секретами.
RooX UIDM поддерживает использование Vault в качестве одного из источников конфигурационных свойств. Это позволяет хранить чувствительные данные (например, пароли для подключения к СУБД) не в локальных файлах, а во внешнем надёжном хранилище.
Данный документ предназначен для администраторов RooX UIDM и описывает порядок интеграции UIDM с Vault.
Настройка включает в себя следующие шаги, подробно описанные в дальнейших разделах: - подготовка Vault (создание хранилища, политики и AppRole); - настройка UIDM для использования Vault как источника конфигурации.
Настройка Vault
Подготовка хранилища секретов
-
В Vault создаётся хранилище секретов (KV v2):
Path: "uidm_secrets/" <-- пример имени
Type: "kv"
Version: 2
-
В созданном хранилище добавляется путь, например:
"uidm-test". -
В
"uidm-test"создаются пары ключ/значение для всех параметров, которые требуется перенести из файлов с настройками RooX UIDM (env.properties). Например:
key: com.rooxteam.webapi.database.password value: password
-
Создаётся политика
uidm-policy, предоставляющая доступ к хранилищу и указанному пути:
path "uidm_secrets/data/uidm-test" {
capabilities = [ "read", "list" ]
}
|
Примечание
|
Сегмент |
Настройка аутентификации через AppRole
-
Создаётся AppRole с привязанной политикой
uidm-policy. -
В результате будут сгенерированы
role_idиsecret_id. Эти значения необходимо указать в конфигурации UIDM. UIDM будет использовать метод аутентификацииAppRoleдля доступа к Vault.
Настройка UIDM
Настройка UIDM включает в себя следующие шаги, подробно описанные далее:
-
В файл
config.xmlдобавляются параметры подключения к Vault. -
В конфигурационных файлах (
env.properties,custom.propertiesи др.) значения секретов заменяются на ссылки вида${vault.<key>}. -
Выполняется перезапуск всех компонентов RooX UIDM.
Настройка config.xml
В config.xml необходимо добавить два новых элемента:
-
<providers>— включает поддержку Vault. Размещается внутри блока<header>. -
<roox-vault>— задаёт параметры подключения к Vault. Размещается сразу после блока<header>и содержит атрибуты:-
base-url— URL подключения к Vault -
role-idиrole-secret-id— идентификатор и секрет AppRole, сгенерированные при настройке Vault -
path— путь до ключей в хранилище Vault (сегментdataуказывать не требуется)
-
|
Важно
|
Порядок элементов в |
Пример настроек config.xml, добавленные теги выделены комментариями:
<configuration>
<header>
<result forceReloadCheck="true">
</result>
<!-- включаем поддержку Vault -->
<providers>
<provider config-tag="roox-vault"
config-class="com.rooxteam.config.vault.VaultConfigurationProvider"/>
</providers>
<!-- endof: включаем поддержку Vault -->
</header>
<!-- добавляем Vault как источник конфигурационных свойств -->
<roox-vault base-url="http://vault:8200"
role-id="ad5d0a6e-4acd-4f53-ba5f-245b115138c6"
role-secret-id="0b441273-7f01-4325-aa61-09bf35148878"
path="uidm_secrets/uidm-test"/>
<!-- endof: добавляем Vault как источник конфигурационных свойств -->
<properties fileName="custom.properties" encoding="UTF-8">
<reloadingStrategy refreshDelay="60000"
config-class="org.apache.commons.configuration.reloading.FileChangedReloadingStrategy"/>
</properties>
</configuration>
Настройка конфигурационных свойств
В файлах конфигурации (env.properties, custom.properties и др.) значения параметров заменяются на конструкции вида ${vault.<key>}, где:
-
vault— служебная часть, указывающая на использование Vault; -
<key>— имя ключа в Vault, заданное при его конфигурации.
Пример:
com.rooxteam.webapi.database.password=${vault.com.rooxteam.webapi.database.password}