2 HashiCorp 配置

概述

本节说明如何配置 Zabbix,以便从 HashiCorp Vault KV Secrets Engine - Version 2 检索密钥。

应按照官方 HashiCorp 文档 中的说明部署并配置 vault。

要了解如何在 Zabbix 中配置 TLS,请参见 密钥存储

检索数据库凭据

为了成功检索包含数据库凭据的密钥,需要同时配置以下两项:

  • Zabbix server/proxy
  • Zabbix 前端
Server/proxy

要配置 Zabbix serverproxy, 请在配置文件中指定以下配置参数:

  • Vault - 应该使用哪个 vault 提供程序;
  • VaultToken - vault 认证令牌(详情请参见 Zabbix server/proxy 配置 file);
  • VaultURL - vault 服务器 HTTP[S] URL;
  • VaultDBPath - 包含数据库凭据的 vault 密钥路径(如果未指定 DBUser 和 DBPassword,则只能使用此选项);Zabbix server 或 proxy 将通过 "password" 和 "username" 键检索凭据;
  • VaultPrefix - vault 路径或 query 的自定义前缀,取决于所使用的 vault;如果未指定,将使用最合适的默认值。

Zabbix server 在处理 vault 密钥宏时,也会使用 VaultVaultTokenVaultURLVaultPrefix 配置参数进行 vault 认证。

Zabbix server 和 Zabbix proxy 在启动时从 zabbix_server.confzabbix_proxy.conf 中读取与 vault 相关的配置参数。 此外,Zabbix server 和 Zabbix proxy 在启动期间将读取一次 VAULT_TOKEN 环境变量,并在读取后将其取消设置,以防止通过 forked 脚本访问;如果 VaultTokenVAULT_TOKEN 参数都包含值,则视为错误。

Zabbix server 或 proxy 支持服务令牌的自动续订和周期性服务令牌。如果 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 命令以在保管库中create所需的密钥:
# Enable "secret/" mount point if not already enabled; note that "kv-v2" must be used.
vault secrets enable -path=secret/ kv-v2

# Put new secrets with keys username and password under mount point "secret/" and path "zabbix/database".
vault kv put -mount=secret zabbix/database username=zabbix password=<password>

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

# 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/database
  1. 最终,Zabbix server将检索到以下数据库认证凭据:
  • 用户名:zabbix
  • 密码: <password>
前端

Zabbix 前端可以配置为从 vault 中检索数据库凭据,方式可以是在前端 安装 期间进行,或者通过更新前端配置文件(zabbix.conf.php)进行。

如果自上次前端安装以来 vault 凭据已发生更改,请重新运行前端安装,或更新 zabbix.conf.php。另请参见:更新现有配置

前端安装 期间,必须在 配置数据库连接 步骤中指定这些配置参数:

  • Store credentials in 参数设置为 "HashiCorp Vault"。
  • 指定连接参数:
Parameter Mandatory Default value Description
Vault API endpoint yes https://localhost:8200 指定用于连接 vault 的 URL,格式为 scheme://host:port
Vault prefix no /v1/secret/data/ 为 vault 路径或查询提供自定义前缀。如果未指定,则使用默认值。
示例:/v1/secret/data/zabbix/
Vault secret path no 用于从中检索数据库凭据的 secret 路径,凭据将通过键 "password" 和 "username" 获取。
示例:database
Vault authentication token no 提供用于只读访问 secret 路径的认证令牌。
有关创建令牌和 vault 策略的信息,请参见 HashiCorp 文档

检索用户宏值

要使用 HashiCorp Vault 存储 Vault secret 用户宏值,请确保:

只有 Zabbix 服务器需要从 vault 访问 Vault secret 宏值。 其他 Zabbix 组件(proxy、前端)不需要此类访问。

宏值应包含一个引用路径(格式为 path:key,例如 macros:password)。 在 Zabbix 服务器配置期间指定的身份验证令牌(通过 VaultToken 参数)必须对该路径提供只读访问权限。

有关 Zabbix 如何处理宏值的详细信息,请参见 Vault secret macros

路径语法

正斜杠(“/”)和冒号(“:”)是保留符号。

正斜杠只能用于分隔挂载点和路径(例如,secret/zabbix,其中挂载点为 "secret",路径为 "zabbix")。对于Vault宏,冒号只能用于分隔路径/query和键。

如果需要使用正斜杠分隔的名称作为挂载点(例如,foo/bar/zabbix,其中挂载点为 "foo/bar",路径为 "zabbix",可以将其编码为 "foo%2Fbar/zabbix"),或者挂载点名称或路径需要包含冒号时,可以对正斜杠和冒号符号进行 URL 编码以实现该需求 create。

示例

  1. 在 Zabbix 中,添加一个用户宏 {$PASSWORD},类型为 "Vault secret",值为 macros:password

  1. 运行以下 CLI 命令以在 vault 中 create 所需的密钥:
# 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>

更新现有配置

要update现有的从HashiCorp Vault获取机密的配置:

  1. 按照数据库凭据章节描述,更新Zabbix server或proxy配置file参数。

  2. 通过重新配置Zabbix前端来更新数据库连接设置,并按照前端章节指定所需参数。 要重新配置Zabbix前端,请在浏览器中打开前端安装URL:

  • Apache环境:http://<服务器IP或名称>/zabbix/setup.php
  • nginx环境:http://<服务器IP或名称>/setup.php

或者,这些参数可以在frontend configuration filezabbix.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. 如有需要,按照用户宏值章节配置用户宏。

要update现有的从CyberArk Vault获取机密的配置,请参阅CyberArk配置