Конфигурация HashiCorp
Обзор
В этом разделе объясняется, как настроить Zabbix для получения секретов из HashiCorp Vault KV Secrets Engine - Version 2.
Vault должен быть развернут и настроен в соответствии с официальной документацией HashiCorp.
Чтобы узнать о настройке TLS в Zabbix, см. Хранение секретов.
Получение учетных данных базы данных
Чтобы успешно получить секрет с учетными данными базы данных, необходимо настроить оба компонента:
- Zabbix сервер/прокси
- Zabbix веб-интерфейс
Сервер/прокси
Чтобы настроить Zabbix сервер или прокси, укажите следующие параметры конфигурации в файле конфигурации:
Vault- какой поставщик хранилища следует использовать;VaultToken- токен аутентификации в хранилище (подробности см. в файле конфигурации Zabbix сервер/прокси);VaultURL- HTTP[S]-URL сервера хранилища;VaultDBPath- путь к секрету в хранилище, содержащему учетные данные базы данных (этот параметр можно использовать только если не указаны DBUser и DBPassword); Zabbix сервер или прокси получит учетные данные по ключам "password" и "username";VaultPrefix- пользовательский префикс для пути или запроса к хранилищу, в зависимости от хранилища; если не указан, будет использовано наиболее подходящее значение по умолчанию.
Параметры конфигурации Vault, VaultToken, VaultURL и VaultPrefix также используются для аутентификации в хранилище при обработке макросов секретов хранилища Zabbix сервером (и Zabbix прокси, если настроен). Zabbix сервер и прокси не будут открывать макросы секретов хранилища, которые содержат учетные данные базы данных из VaultDBPath.
Настоятельно рекомендуется использовать разные токены для разных прокси.
Zabbix сервер и Zabbix прокси считывают связанные с хранилищем параметры конфигурации из zabbix_server.conf и zabbix_proxy.conf при запуске.
Кроме того, Zabbix сервер и Zabbix прокси один раз при запуске считывают переменную окружения VAULT_TOKEN и затем удаляют ее, чтобы она не была доступна через порожденные скрипты; это ошибка, если параметры VaultToken и VAULT_TOKEN содержат значение одновременно.
Пример
- В
zabbix_server.confукажите следующие параметры:
Vault=HashiCorp
VaultToken=hvs.CAESIIG_PILmULFYOsEyWHxkZ2mF2a8VPKNLE8eHqd4autYGGh4KHGh2cy5aeTY0NFNSaUp3ZnpWbDF1RUNjUkNTZEg
VaultURL=https://127.0.0.1:8200
VaultDBPath=database
VaultPrefix=/v1/secret/data/zabbix/
- Выполните следующие команды CLI, чтобы создать необходимый секрет в vault:
# Включите точку монтирования "secret/", если она еще не включена; обратите внимание, что необходимо использовать "kv-v2".
vault secrets enable -path=secret/ kv-v2
# Добавьте новые секреты с ключами username и password в точку монтирования "secret/" и путь "zabbix/database".
vault kv put -mount=secret zabbix/database username=zabbix password=<password>
# Проверьте, что секрет успешно добавлен.
vault kv get secret/zabbix/database
# Наконец, проверьте с помощью Curl; обратите внимание, что "data" нужно вручную добавить после точки монтирования и "/v1" перед точкой монтирования, также см. параметр --capath.
curl --header "X-Vault-Token: <VaultToken>" https://127.0.0.1:8200/v1/secret/data/zabbix/database
- В результате сервер Zabbix будет получать следующие учетные данные для аутентификации в базе данных:
- Имя пользователя: zabbix
- Пароль: <password>
Веб-интерфейс
Веб-интерфейс Zabbix можно настроить так, чтобы он получал учетные данные базы данных из vault либо во время установки веб-интерфейса, либо путем обновления файла конфигурации веб-интерфейса (zabbix.conf.php).
Если учетные данные vault были изменены после предыдущей установки веб-интерфейса, повторно запустите установку веб-интерфейса или обновите zabbix.conf.php. См. также: Обновление существующей конфигурации.
Во время установки веб-интерфейса параметры конфигурации необходимо указать на шаге Configure DB Connection:

- Установите параметр Store credentials in в значение "HashiCorp Vault".
- Укажите параметры подключения:
| Parameter | Mandatory | Default value | Description |
|---|---|---|---|
| Vault API endpoint | yes | https://localhost:8200 | Укажите URL для подключения к vault в формате scheme://host:port |
| Vault prefix | no | /v1/secret/data/ | Укажите пользовательский префикс для пути или запроса vault. Если не указан, используется значение по умолчанию. Пример: /v1/secret/data/zabbix/ |
| Vault secret path | no | Путь к секрету, из которого учетные данные для базы данных будут получены по ключам "password" и "username". Пример: database |
|
| Vault authentication token | no | Укажите токен аутентификации для доступа только на чтение к пути секрета. См. документацию HashiCorp для получения информации о создании токенов и политик vault. |
Получение значений пользовательских макросов
Чтобы использовать HashiCorp Vault для хранения значений пользовательских макросов Vault secret, убедитесь, что:
- Zabbix сервер/прокси настроен для работы с HashiCorp Vault.
- Параметр Vault provider в Administration > General > Other установлен в значение "HashiCorp Vault" (по умолчанию).

Zabbix сервер (и Zabbix прокси, если настроен) требует доступа к значениям макросов Vault secret из хранилища. Веб-интерфейс Zabbix не нуждается в таком доступе.
Значение макроса должно содержать ссылочный путь (в формате path:key, например, macros:password).
Токен аутентификации, указанный при настройке Zabbix сервер/прокси (с помощью параметра VaultToken), должен предоставлять доступ только для чтения к этому пути.
Подробную информацию о обработке значений макросов Zabbix см. в разделе Vault secret macros.
Синтаксис пути
Символы прямой слэш ("/") и двоеточие (":") зарезервированы.
Прямой слэш можно использовать только для разделения точки монтирования и пути (например, secret/zabbix, где точка монтирования — "secret", а путь — "zabbix"). В случае макросов Vault двоеточие можно использовать только для разделения пути/запроса и ключа.
При необходимости создать точку монтирования с именем, содержащим прямой слэш (например, foo/bar/zabbix, где точка монтирования — "foo/bar", а путь — "zabbix", можно закодировать как "foo%2Fbar/zabbix"), а также если имя точки монтирования или путь должны содержать двоеточие, можно использовать URL-кодирование символов прямой слэш и двоеточие.
Пример
- В Zabbix добавьте пользовательский макрос {$PASSWORD} типа "Vault secret" со значением
macros:password

- Выполните следующие команды CLI, чтобы создать необходимый секрет в vault:
# Включите точку монтирования "secret/", если она еще не включена; обратите внимание, что необходимо использовать "kv-v2".
vault secrets enable -path=secret/ kv-v2
# Поместите новый секрет с ключом "password" в точку монтирования "secret/" и путь "zabbix/macros".
vault kv put -mount=secret zabbix/macros password=<password>
# Проверьте, что секрет успешно добавлен.
vault kv get secret/zabbix/macros
# Наконец, проверьте с помощью Curl; обратите внимание, что "data" нужно вручную добавить после точки монтирования и "/v1" перед точкой монтирования, также см. параметр --capath.
curl --header "X-Vault-Token: <VaultToken>" https://127.0.0.1:8200/v1/secret/data/zabbix/macros
- В результате Zabbix разрешит макрос {$PASSWORD} в значение: <password>
Обновление существующей конфигурации
Чтобы обновить существующую конфигурацию для получения секретов из HashiCorp Vault:
-
Обновите параметры файла конфигурации сервера или прокси Zabbix, как описано в разделе Database credentials.
-
Обновите настройки подключения к БД, перенастроив веб-интерфейс Zabbix и указав необходимые параметры, как описано в разделе Frontend. Чтобы перенастроить веб-интерфейс Zabbix, откройте в браузере URL настройки веб-интерфейса:
- для Apache: http://<server_ip_or_name>/zabbix/setup.php
- для Nginx: http://<server_ip_or_name>/setup.php
Кроме того, эти параметры можно задать в файле конфигурации веб-интерфейса (zabbix.conf.php):
$DB['VAULT'] = 'HashiCorp';
$DB['VAULT_URL'] = 'https://localhost:8200';
$DB['VAULT_DB_PATH'] = 'database';
$DB['VAULT_TOKEN'] = '<mytoken>';
$DB['VAULT_CERT_FILE'] = '';
$DB['VAULT_KEY_FILE'] = '';
$DB['VAULT_PREFIX'] = '/v1/secret/data/zabbix/';
- При необходимости настройте пользовательские макросы, как описано в разделе User macro values.
Чтобы обновить существующую конфигурацию для получения секретов из CyberArk Vault, см. CyberArk configuration.