2. Настройка HashiCorp

Обзор

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

Хранилище должно быть развёрнуто и настроено, как описано в официальной документации HashiCorp [en].

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

Извлечение учётных данных базы данных

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

  • Zabbix сервер/прокси
  • веб-интерфейс Zabbix
Сервер/прокси

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

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

Zabbix-сервер также использует параметры конфигурации Vault, VaultToken, VaultURL и VaultPrefix для аутентификации хранилища при обработке макросов секрета хранилища.

Zabbix-сервер и Zabbix-прокси считывают параметры конфигурации, связанные с хранилищем, из zabbix_server.conf и zabbix_proxy.conf при запуске. Кроме того, Zabbix-сервер и Zabbix-прокси считывают переменную среды VAULT_TOKEN однократно во время запуска и удаляют её, чтобы она не была доступна через порождаемые (этими процессами) скрипты; будет ошибкой, если оба параметра VaultToken и VAULT_TOKEN содержат значение.

Zabbix сервер или прокси поддерживают автоматическое продление сервисных токенов и периодических сервисных токенов. Если Zabbix обнаруживает, что токен возобновляемый, он будет автоматически продлевать его до тех пор, пока не будет достигнут максимальный TTL токена или, в случае периодических сервисных токенов, бесконечно.

Пример

  1. В zabbix_server.conf укажите следующие параметры:
Vault=HashiCorp
       VaultToken=hvs.CAESIIG_PILmULFYOsEyWHxkZ2mF2a8VPKNLE8eHqd4autYGGh4KHGh2cy5aeTY0NFNSaUp3ZnpWbDF1RUNjUkNTZEg
       VaultURL=https://127.0.0.1:8200
       VaultDBPath=database
       VaultPrefix=/v1/secret/data/zabbix/
  1. Выполните следующие команды 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
  1. В результате 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 для хранения значений пользовательских макросов Секрет Хранилища, убедитесь, что:

Только серверу Zabbix требуется доступ к значениям макросов Секрет Хранилища из хранилища. Другим компонентам Zabbix (прокси, веб-интерфейс) такой доступ не нужен.

Значение макроса должно содержать ссылочный путь (в виде путь:ключ, например: macros:password). Токен аутентификации, указанный во время настройки Zabbix сервера (параметром VaultToken), должен предоставлять доступ только для чтения к этому пути.

Подробную информацию об обработке значений макросов Zabbix смотрите в макросах секрета Хранилища.

Синтаксис пути

Прямая косая черта («/») и двоеточие («:») являются зарезервированными символами.

Прямая косая черта может использоваться только для отделения точки монтирования от пути (например, secret/zabbix, где точка монтирования — «secret», а путь — «zabbix»). В случае макросов Хранилища двоеточие может использоваться только для отделения пути/запроса от ключа.

Можно использовать URL-кодирование символов косой черты и двоеточия, если необходимо создать точку монтирования с именем, разделённым косой чертой (например, foo/bar/zabbix, где точка монтирования — «foo/bar», а путь — «zabbix», можно закодировать как «foo%2Fbar/zabbix»), и если имя или путь точки монтирования должны содержать двоеточие.

Пример

  1. В Zabbix добавьте пользовательский макрос {$PASSWORD} с типом «Секрет Хранилища» и со значением macros:password

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

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

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

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

  2. Обновите параметры подключения к БД, перенастроив веб-интерфейс 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/';
  1. Настройте пользовательские макросы, как описано в разделе Значения пользовательских макросов, если необходимо.

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