Sidebar

Zabbix Summit 2022
Register for Zabbix Summit 2022

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

Обзор

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Учетные данные базы данных, полученные из Vault, будут кэшироваться веб-интерфейсом. Обратите внимание, что для кэширования учетных данных базы данных используется каталог временных файлов файловой системы. Вы можете использовать константу 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=<password>
       
       # Проверяем, что секрет успешно добавлен
       $ vault kv  get secret/zabbix/database
       
       # Наконец, проверьте с помощью Curl, обратите внимание, что  необходимо вручную добавить «данные» после точки монтирования и «/v1» перед точкой монтирования, также см. параметр --capath
       $ curl --header "X-Vault-Token: <VaultToken>" https://127.0.0.1:8200/v1/secret/data/zabbix/database

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

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

  • VaultToken - токен аутентификации хранилища (см. подробнее в конфигурационном файле Zabbix сервера/прокси)
  • VaultURL - URL-адрес сервера хранилища HTTP[S]
  • VaultDBPath - путь к хранилищу, откуда будут извлекаться учетные данные для базы данных с помощью ключей «пароль» и «имя пользователя» (например: 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 .