13 Хранение секретов

Обзор

Имеется возможность хранения некоторой конфиденциальной информации в HashiCorp Vault KV Secrets Engine - Версии 2. Секреты можно сохранять для:

  • значений пользовательских макросов
  • учётных данных для доступа к базам данных

Zabbix обеспечивает доступ только на чтение к секретам в Хранилище, предполагается, что секретами управляет кто-то другой.

Значения пользовательских макросов

В Хранилище можно скрытно хранить значения пользовательских макросов.

Значение пользовательского макроса «Секрет Хранилища» содержит ссылочный путь (в виде 'путь:ключ', например «secret/zabbix:password»).

Чтобы задать значение пути упомянутого в примере, можно использовать следующие команды:

# Включите точку монтирования "secret/", если она еще не включена, обратите внимание, что нужно использовать "kv-v2"
       vault secrets enable -path=secret/ kv-v2
       
       # Поместите новый секрет с ключом password в точку монтирования "secret/" и путь "secret/zabbix"
       vault kv put secret/zabbix password=<пароль>
       
       # Проверьте, что секрет успешно добавлен
       vault kv get secret/zabbix
       
       # Наконец, проверьте с помощью Curl, обратите внимание, что необходимо добавить вручную "data" после точки монтирования и "/v1" перед точкой монтирования, также смотрите параметр --capath
       $ curl --header "X-Vault-Token: <ТокенХранилища>" https://127.0.0.1:8200/v1/secret/data/zabbix

Секретное значение извлекается сервером Zabbix при каждом обновлении данных конфигурации и хранится в кэше конфигурации. Токен аутентификации для доступа только на чтение к ссылочным путям должен быть указан в конфигурации сервера (параметр VaultToken). Если значение макроса не удаётся получить успешно, элемент данных, использующий это значение, станет неподдерживаемым.

Также можно инициировать обновление секретных значений из Хранилища при помощи опции командной строки 'secrets_reload'.

Zabbix прокси никогда не связывается с Хранилищем для получения каких-либо секретов, кроме учётных данных базы данных. Zabbix прокси получает секретные значения от Zabbix сервера при каждой синхронизации конфигурации и сохраняет их в кэше конфигурации так же, как и Zabbix сервер.

Это означает, что Zabbix прокси не может начать сбор данных после перезапуска, пока не получит первое обновление данных конфигурации от Zabbix сервера. Между Zabbix сервером и прокси должно быть включено шифрование; в противном случае в журнал вносится сообщение с предупреждением сервера.

Учётные данные базы данных

Поддерживается секретное хранение в Хранилище учётных данных базы данных, используемых Zabbix сервером, прокси и веб-интерфейсом:

  • Относящиеся к хранилищу параметры для получения учётных данных базы данных можно опционально задать в мастере установки веб-интерфейса.

Учётные данные базы данных, полученные из Хранилища, будут внесены в кэш веб-интерфейса. Обратите внимание, что для кэширования учётных данных базы данных используется директория временных файлов файловой системы. Вы можете использовать определение ZBX_DATA_CACHE_TTL для контроля того, как часто кэш данных обновляется / аннулируется.

  • Для сервера / прокси можно использовать параметр конфигурации VaultDBPath, чтобы указать путь, откуда будут извлекаться учётные данные для базы данных с помощью ключей 'password' и 'username' (например: secret/zabbix/database).

Можно использовать следующие команды, чтобы задать значения для пути, который упоминается в примере:

# Включите точку монтирования "secret/", если она еще не включена, обратите внимание, что необходимо использовать "kv-v2"
       vault secrets enable -path=secret/ kv-v2
       
       # Поместите новые секреты с ключами username и password в точку монтирования "secret/" и путь "secret/zabbix/database"
       vault kv put secret/zabbix/database username=zabbix password=<пароль>
       
       # Проверьте, что секрет успешно добавлен
       vault kv  get secret/zabbix/database
       
       # Наконец, проверьте с помощью Curl, обратите внимание, что необходимо вручную добавить "data" после точки монтирования и «/v1» перед точкой монтирования, также смотрите параметр --capath
       curl --header "X-Vault-Token: <ТокенХранилища>" https://127.0.0.1:8200/v1/secret/data/zabbix/database

Параметры конфигурации

Zabbix серверу / прокси добавлены новые параметры конфигурации для аутентификации Хранилища и получения учётных данных базы данных:

  • VaultToken - токен аутентификации Хранилища (для получения более подробных сведений обратитесь к файлам конфигурации Zabbix сервера / прокси)
  • VaultURL - HTTP[S] URL-адрес сервера Хранилища
  • VaultDBPath - путь к Хранилищу, откуда будут извлекаться учётные данные для базы данных с помощью ключей "password" и "username" (например: secret/zabbix/database)

Zabbix сервер и Zabbix прокси читают параметры конфигурации, связанные с Vault, из zabbix_server.conf и zabbix_proxy.conf при запуске.

Zabbix сервер и Zabbix прокси дополнительно считывают переменную среды "VAULT_TOKEN" один раз во время запуска и удаляют её, чтобы она не была доступна через порождаемые (этими процессами) скрипты; это будет ошибкой, если оба параметра VaultToken и VAULT_TOKEN будут содержать значение.

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

Настройка TLS

Сертификат, подписанный центром сертификации (CA), нужно добавить в хранилище ЦС по умолчанию. В качестве альтернативы можно указать собственное расположение хранилища центров сертификации в параметре конфигурации SSLCALocation; обратите внимание, что в этом случае директория сертификатов должна быть подготовлена при помощи openssl утилиты c_rehash; например, настройте SSLCALocation и скопируйте "ca.pem" внутрь этой директории, а затем выполните следующую команду:

c_rehash .