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

Обзор

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

Хранилище должно быть развернуто и настроено, как описано в официальной документации 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 является ошибкой.

Пример

  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/" и по пути "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 можно настроить на получение учетных данных базы данных из хранилища либо во время установки веб-интерфейса, либо путем обновления файла конфигурации веб-интерфейса (zabbix.conf.php).

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

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

  • Установите для параметра Store credentials in значение "HashiCorp Vault".
  • Укажите параметры подключения:
Параметр Обязательный Значение по умолчанию Описание
Vault API endpoint да https://localhost:8200 Укажите URL для подключения к хранилищу в формате scheme://host:port
Vault prefix нет /v1/secret/data/ Укажите пользовательский префикс для пути или запроса хранилища. Если не указан, используется значение по умолчанию.
Пример: /v1/secret/data/zabbix/
Vault secret path нет Путь к секрету, из которого должны быть получены учетные данные для базы данных по ключам "password" и "username".
Пример: database
Vault authentication token нет Укажите токен аутентификации для доступа только на чтение к пути секрета.
Информацию о создании токенов и политиках хранилища см. в документации HashiCorp.

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

Чтобы использовать HashiCorp Vault для хранения значений пользовательских макросов Vault secret, убедитесь, что:

Сервер Zabbix (и прокси Zabbix, если настроено) требует доступ к значениям макросов Vault secret из хранилища. Веб-интерфейс Zabbix такой доступ не требуется.

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

Подробную информацию об обработке значений макросов в Zabbix см. в разделе Макросы Vault secret.

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

Символы косой черты ("/") и двоеточия (":") являются зарезервированными.

Косая черта может использоваться только для отделения точки монтирования от пути (например, secret/zabbix, где точка монтирования — "secret", а путь — "zabbix"). В случае макросов Vault двоеточие может использоваться только для отделения пути/запроса от ключа.

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

Пример

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

  1. Выполните следующие CLI-команды, чтобы создать необходимый секрет в хранилище:
# Enable "secret/" mount point if not already enabled; note that "kv-v2" must be used.
vault secrets enable -path=secret/ kv-v2

# Put new secret with key "password" under mount point "secret/" and path "zabbix/macros".
vault kv put -mount=secret zabbix/macros password=<password>

# Test that secret is successfully added.
vault kv get secret/zabbix/macros

# Finally test with Curl; note that "data" need to be manually added after mount point and "/v1" before the mount point, also see --capath parameter.
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 или прокси, как описано в разделе Учетные данные базы данных.

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

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