2. Настройка HashiCorp
Обзор
В этом разделе объясняется, как настроить Zabbix для извлечения секретов из HashiCorp Vault KV Secrets Engine - Version 2.
Хранилище должно быть развёрнуто и настроено, как описано в официальной документации HashiCorp [en].
Чтобы узнать о настройке TLS в Zabbix, смотрите Хранение секретов.
Получение учетных данных базы данных
Чтобы успешно получить секрет с учетными данными базы данных, необходимо настроить оба компонента:
- Zabbix server/proxy
- Zabbix веб-интерфейс
Server/proxy
Чтобы настроить Zabbix server или proxy, укажите следующие параметры конфигурации в файле конфигурации:
Vault- какой поставщик хранилища следует использовать;VaultToken- токен аутентификации в хранилище (подробности см. в файле конфигурации Zabbix server/proxy);VaultURL- HTTP[S]-URL сервера хранилища;VaultDBPath- путь к секрету в хранилище, содержащему учетные данные базы данных (этот параметр можно использовать только если не указаны DBUser и DBPassword); Zabbix server или proxy получит учетные данные по ключам "password" и "username";VaultPrefix- пользовательский префикс для пути или запроса к хранилищу, в зависимости от хранилища; если не указан, будет использовано наиболее подходящее значение по умолчанию.
Параметры конфигурации Vault, VaultToken, VaultURL и VaultPrefix также используются для аутентификации в хранилище при обработке макросов секретов хранилища Zabbix server (и Zabbix proxy, если настроен). Zabbix server и прокси не будут открывать макросы секретов хранилища, содержащие учетные данные базы данных из VaultDBPath.
Настоятельно рекомендуется использовать разные токены для разных прокси.
Zabbix server и Zabbix proxy считывают связанные с хранилищем параметры конфигурации из zabbix_server.conf и zabbix_proxy.conf при запуске.
Кроме того, Zabbix server и Zabbix proxy один раз при запуске считывают переменную окружения 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, чтобы создать требуемый секрет в хранилище:
# Включите точку монтирования «secret/», если она еще не включена; обратите внимание, что нужно использовать «kv-v2».
vault secrets enable -path=secret/ kv-v2
# Поместите новые секреты с ключами username и password под точкой монтирования «secret/» и путём «secret/zabbix/database».
vault kv put -mount=secret zabbix/database username=zabbix 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
- Пароль: <пароль>
Веб-интерфейс
Веб-интерфейс Zabbix можно настроить для получения учётных данных базы данных из хранилища
либо во время установки веб-интерфейса, либо путём обновления
файла конфигурации веб-интерфейса (zabbix.conf.php).
Если учётные данные хранилища были изменены с момента предыдущей установки веб-интерфейса, перезапустите установку веб-интерфейса
или обновите zabbix.conf.php. Смотрите также: Обновление существующей конфигурации.
Во время установки веб-интерфейса параметры конфигурации должны быть указаны на шаге Настройка соединения с базой данных (Configure DB Connection):

- Установите параметр Хранить учетные данные в (Store credentials in) в значение «HashiCorp Vault».
- Укажите параметры подключения:
| Параметр | Обязательный | Значение по умолчанию | Описание |
|---|---|---|---|
| API endpoint Хранилища (Vault API endpoint) |
да | https://localhost:8200 | Укажите URL для подключения к хранилищу в формате схема://хост:порт |
| Префикс Хранилища (Vault prefix) |
нет | /v1/secret/data/ | Укажите пользовательский префикс для пути или запроса хранилища. Если не указано, используется значение по умолчанию. Пример: /v1/secret/data/zabbix/ |
| Путь к секрету Хранилища (Vault secret path) |
нет | Путь к секрету, из которого будут извлечены учётные данные для базы данных по ключам «password» и «username». Пример: database |
|
| Токен аутентификации Хранилища (Vault authentication token) |
нет | Предоставьте токен аутентификации для доступа только для чтения к секретному пути. Смотрите документацию HashiCorp [en] для получения информации о создании токенов и политик хранилища. |
Получение значений пользовательских макросов
Чтобы использовать 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»). В случае макросов Хранилища двоеточие может использоваться только для отделения пути/запроса от ключа.
Можно использовать URL-кодирование символов косой черты и двоеточия, если необходимо создать точку монтирования с именем, разделённым косой чертой (например, foo/bar/zabbix, где точка монтирования — «foo/bar», а путь — «zabbix», можно закодировать как «foo%2Fbar/zabbix»), и если имя или путь точки монтирования должны содержать двоеточие.
Пример
- В Zabbix добавьте пользовательский макрос {$PASSWORD} с типом «Секрет Хранилища» и со значением
macros:password

- Выполните следующие команды CLI, чтобы создать требуемый секрет в хранилище:
# Включите точку монтирования «secret/», если она еще не включена; обратите внимание, что нужно использовать «kv-v2».
vault secrets enable -path=secret/ kv-v2
# Поместите новый секрет с ключом password под точкой монтирования «secret/» и путём «secret/zabbix».
vault kv put -mount=secret zabbix/macros 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} в значение: <пароль>
Обновление существующей конфигурации
Чтобы обновить существующую конфигурацию для извлечения секретов из хранилища HashiCorp:
-
Обновите параметры файла конфигурации сервера Zabbix или прокси, как описано в разделе Учётные данные базы данных.
-
Обновите параметры подключения к БД, перенастроив веб-интерфейс Zabbix и указав требуемые параметры, как описано в разделе Веб-интерфейс. Чтобы перенастроить веб-интерфейс Zabbix, откройте URL-адрес настройки веб-интерфейса в браузере:
- для Apache: http://<ip_или_имя_сервера>/zabbix/setup.php
- для Nginx: http://<ip_или_имя_сервера>/setup.php
Кроме того, эти параметры можно задать в файле конфигурации веб-интерфейса (zabbix.conf.php):
$DB['VAULT'] = 'HashiCorp';
$DB['VAULT_URL'] = 'https://localhost:8200';
$DB['VAULT_DB_PATH'] = 'database';
$DB['VAULT_TOKEN'] = '<мой_токен>';
$DB['VAULT_CERT_FILE'] = '';
$DB['VAULT_KEY_FILE'] = '';
$DB['VAULT_PREFIX'] = '/v1/secret/data/zabbix/';
- Настройте пользовательские макросы, как описано в разделе Значения пользовательских макросов, если необходимо.
Чтобы обновить существующую конфигурацию для извлечения секретов из хранилища CyberArk, смотрите Настройка CyberArk.