Конфигурация HashiCorp

Обзор

В этом разделе объясняется, как настроить Zabbix для получения секретов из HashiCorp Vault KV Secrets Engine - Version 2.

Vault должен быть развернут и настроен в соответствии с официальной документацией HashiCorp.

Чтобы узнать о настройке TLS в Zabbix, см. Хранение секретов.

Получение учетных данных базы данных

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

  • Zabbix server/proxy
  • Zabbix веб-интерфейс
Сервер/proxy

Чтобы настроить Zabbix сервер или прокси, укажите следующие параметры конфигурации в файле конфигурации:

  • Vault - какой поставщик vault следует использовать;
  • VaultToken - токен аутентификации vault (подробности см. в файле конфигурации Zabbix server/proxy); не может использоваться вместе с VaultAppRoleID;
  • VaultAppRoleID и VaultAppSecretID - ID роли аутентификации vault и secret ID (подробности см. в файле конфигурации Zabbix server/proxy); не могут использоваться вместе с VaultToken;
  • VaultURL - HTTP[S] URL сервера vault;
  • VaultDBPath - путь к секрету vault, содержащему учетные данные базы данных (этот параметр можно использовать только если не указаны DBUser и DBPassword); Zabbix server или proxy получит учетные данные по ключам "password" и "username";
  • VaultPrefix - пользовательский префикс для пути или запроса vault, в зависимости от vault; если не указан, будет использовано наиболее подходящее значение по умолчанию.

Параметры конфигурации Vault, VaultToken (или VaultAppRoleID/VaultAppSecretID), VaultURL и VaultPrefix также используются для аутентификации в vault при обработке макросов секретов vault сервером Zabbix (и Zabbix proxy, если настроен). Zabbix server и прокси не будут открывать макросы секретов vault, которые содержат учетные данные базы данных из VaultDBPath.

Настоятельно рекомендуется использовать разные токены для разных прокси.

Zabbix server и Zabbix proxy считывают связанные с vault параметры конфигурации из zabbix_server.conf и zabbix_proxy.conf при запуске. Кроме того, Zabbix server и Zabbix proxy один раз при запуске считывают переменную окружения VAULT_TOKEN и затем удаляют ее, чтобы она не была доступна через порожденные скрипты; это ошибка, если и VaultToken, и VAULT_TOKEN содержат значение.

Пример

  1. В zabbix_server.conf укажите следующие параметры.

Используя VaultToken:

Vault=HashiCorp
VaultToken=hvs.CAESIIG_PILmULFYOsEyWHxkZ2mF2a8VPKNLE8eHqd4autYGGh4KHGh2cy5aeTY0NFNSaUp3ZnpWbDF1RUNjUkNTZEg
VaultURL=https://127.0.0.1:8200
VaultDBPath=database
VaultPrefix=/v1/secret/data/zabbix/

Или, используя VaultAppRoleID:

Vault=HashiCorp
VaultAppRoleID=6f1567f1-538d-7d70-e8e4-5d3e59471b2e
VaultAppSecretID=89dac8b1-f7d6-96a7-2ecf-f94d2de3d6f1
VaultURL=https://127.0.0.1:8200
VaultDBPath=database
VaultPrefix=/v1/secret/data/zabbix/
  1. Выполните следующие команды 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
  1. В результате сервер Zabbix получит следующие учетные данные для аутентификации в базе данных:
  • Имя пользователя: zabbix
  • Пароль: <password>
Веб-интерфейс

Веб-интерфейс Zabbix можно настроить для получения учетных данных базы данных из vault либо во время установки веб-интерфейса, либо путем обновления файла конфигурации веб-интерфейса (zabbix.conf.php).

Если учетные данные vault были изменены после предыдущей установки веб-интерфейса, повторно запустите установку веб-интерфейса или обновите zabbix.conf.php. См. также: Обновление существующей конфигурации.

Во время установки веб-интерфейса параметры подключения необходимо указать на шаге Configure DB Connection.

Пример настройки с использованием аутентификации по токену:

Пример настройки с использованием аутентификации AppRole:

Parameter Mandatory Default value Description
Store credentials in no Выберите HashiCorp Vault.
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 yes Путь к секрету, из которого учетные данные для базы данных должны быть получены по ключам "password" и "username".
Пример: database
Vault authentication type no Выберите тип аутентификации vault:
Token - использовать аутентификацию по токену;
AppRole - использовать метод аутентификации AppRole.
Vault authentication token yes Укажите токен аутентификации для доступа только на чтение к пути секрета.
См. документацию HashiCorp для получения информации о создании токенов и политик vault.
Это поле доступно только если в качестве типа аутентификации vault выбран Token.
Vault authentication role ID yes Укажите ID роли AppRole.
См. документацию HashiCorp для получения информации об AppRole.
Это поле доступно только если в качестве типа аутентификации vault выбран AppRole.
Vault authentication secret ID yes Укажите secret ID, выданный для AppRole.
См. документацию HashiCorp для получения информации об AppRole.
Это поле доступно только если в качестве типа аутентификации vault выбран AppRole.

Получение значений пользовательских макросов

Чтобы использовать 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-кодирование символов прямой слэш и двоеточие.

Пример

  1. В Zabbix добавьте пользовательский макрос {$PASSWORD} типа "Vault secret" со значением macros:password

  1. Выполните следующие команды 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
  1. В результате Zabbix разрешит макрос {$PASSWORD} в значение: <password>

Обновление существующей конфигурации

Чтобы обновить существующую конфигурацию для получения секретов из HashiCorp Vault:

  1. Обновите параметры файла конфигурации сервера или прокси Zabbix, как описано в разделе Database credentials.

  2. Обновите настройки подключения к БД, перенастроив веб-интерфейс Zabbix и указав требуемые параметры, как описано в разделе Frontend. Чтобы перенастроить веб-интерфейс Zabbix, откройте в браузере URL настройки веб-интерфейса:

  • для Apache: http://<server_ip_or_name>/zabbix/setup.php
  • для Nginx: http://<server_ip_or_name>/setup.php

Кроме того, эти параметры можно задать в файле конфигурации веб-интерфейса (zabbix.conf.php).

Использование токена Vault:

$DB['VAULT']                    = 'HashiCorp';
$DB['VAULT_URL']                = 'https://localhost:8200';
$DB['VAULT_DB_PATH']            = 'database';
$DB['VAULT_TOKEN']              = 'hvs.CAESIIG_PILmULFYOsEyWHxkZ2mF2a8VPKNLE8eHqd4autYGGh4KHGh2cy5aeTY0NFNSaUp3ZnpWbDF1RUNjUkNTZEg';
$DB['VAULT_PREFIX']             = '/v1/secret/data/zabbix/';

Или с использованием метода Vault AppRole:

$DB['VAULT']                    = 'HashiCorp';
$DB['VAULT_URL']                = 'https://localhost:8200';
$DB['VAULT_DB_PATH']            = 'database';
$DB['VAULT_APP_ROLE_ID']        = '6f1567f1-538d-7d70-e8e4-5d3e59471b2e';
$DB['VAULT_APP_SECRET_ID']      = '89dac8b1-f7d6-96a7-2ecf-f94d2de3d6f1';
$DB['VAULT_PREFIX']             = '/v1/secret/data/zabbix/';
  1. При необходимости настройте пользовательские макросы, как описано в разделе User macro values.

Чтобы обновить существующую конфигурацию для получения секретов из CyberArk Vault, см. CyberArk configuration.

Устранение неполадок

  1. В файле журнала сервера/прокси Zabbix:
237839:20260729:130916.425 Vault token renew started to fail: cannot login into HashiCorp vault with AppRole method: unsuccessful response code "503"

Вероятная причина: HashiCorp Vault был (пере)запущен, но не был unsealed (это требуется в конфигурации по умолчанию, но не требуется, если настроен Auto Unseal).

  1. В файле журнала сервера/прокси Zabbix:
235545:20260729:125617.944 Vault token renew started to fail: cannot login into HashiCorp vault with AppRole method: unsuccessful response code "400"

или

235545:20260729:125718.537 Vault token renew failed: cannot login into HashiCorp vault with AppRole method: unsuccessful response code "400"

Вероятная причина: VaultAppSecretID истек или достиг лимита использования в HashiCorp vault.