2 HashiCorp配置

概述

本节说明要从HashiCorp Vault KV Secrets Engine - Version 2检索秘文,应该如何配置Zabbix。

保险库应按照官方HashiCorp文档中描述的方式部署和配置。

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

获取数据库凭据

要成功获取包含数据库凭据的密钥,需要同时配置以下两项:

  • Zabbix 服务器/proxy
  • Zabbix 前端
服务器/proxy

要配置 Zabbix 服务器proxy, 请在配置文件中指定以下配置参数:

  • Vault - 应使用哪个 vault 提供程序;
  • VaultToken - vault 身份验证令牌(详见 Zabbix 服务器/proxy 配置文件);
  • VaultURL - vault 服务器 HTTP[S] URL;
  • VaultDBPath - 包含数据库凭据的 vault 密钥路径(仅当未指定 DBUser 和 DBPassword 时才能使用此选项);Zabbix 服务器或 proxy 将通过键 "password" 和 "username" 获取凭据;
  • VaultPrefix - vault 路径或查询的自定义前缀,具体取决于 vault;如果未指定,将使用最合适的默认值。

在 Zabbix 服务器处理密钥 vault 宏时(以及 Zabbix proxy(如果已配置)),也会使用 VaultVaultTokenVaultURLVaultPrefix 配置参数进行 vault 身份验证。Zabbix 服务器和 proxies 不会打开包含来自 VaultDBPath 的数据库凭据的 vault 密钥宏。

强烈建议为不同的 proxies 使用不同的令牌。

Zabbix 服务器和 Zabbix proxy 在启动时会从 zabbix_server.confzabbix_proxy.conf 中读取与 vault 相关的配置参数。 此外,Zabbix 服务器和 Zabbix proxy 还会在启动期间读取一次 VAULT_TOKEN 环境变量,并在读取后将其取消设置,以避免它可通过 fork 出来的脚本获取;如果 VaultTokenVAULT_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 命令,在 vault 中创建所需的 secret:
# 如果尚未启用,则启用 "secret/" 挂载点;请注意,必须使用 "kv-v2"。
vault secrets enable -path=secret/ kv-v2

# 在挂载点 "secret/" 下、路径 "zabbix/database" 中,添加键为 username 和 password 的新 secret。
vault kv put -mount=secret zabbix/database username=zabbix password=<password>

# 测试 secret 是否已成功添加。
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 前端可配置为从 vault 获取数据库凭据,
可在前端安装期间进行配置,也可通过更新前端配置文件(zabbix.conf.php)进行配置。

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

前端安装期间,必须在 Configure DB Connection 步骤中指定配置参数:

  • Store credentials in 参数设置为 “HashiCorp Vault”。
  • 指定连接参数:
参数 必填 默认值 描述
Vault API endpoint https://localhost:8200 指定用于连接 vault 的 URL,格式为 scheme://host:port
Vault prefix /v1/secret/data/ 为 vault 路径或查询提供自定义前缀。如果未指定,则使用默认值。
示例:/v1/secret/data/zabbix/
Vault secret path 用于从中获取数据库凭据的 secret 路径,凭据通过键 “password” 和 “username” 读取。
示例:database
Vault authentication token 提供对 secret 路径具有只读访问权限的认证令牌。
有关创建令牌和 vault 策略的信息,请参见 HashiCorp documentation

检索用户宏值

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

  • Zabbix 服务器/proxy 已配置为可与 HashiCorp Vault 配合工作;
  • 管理 → 常规 → 其他中的 Vault provider 参数设置为“HashiCorp Vault”(默认);

Zabbix 服务器(以及 Zabbix proxy,如果已配置)需要能够从 vault 访问 Vault secret 宏值。 Zabbix 前端不需要此类访问。

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

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

路径语法

斜杠("/")和冒号(":")这两个符号是保留的。

斜杠只能用于将挂载点与路径分隔开(例如,secret/zabbix 中挂载点是 "secret",路径是 "zabbix")。在保险库宏的情况下,冒号只能用于将路径/查询与键分隔开。

如果需要创建一个由斜杠分隔的挂载点名称(例如 foo/bar/zabbix,其中挂载点是 "foo/bar",路径是 "zabbix"),可以对斜杠和冒号符号进行URL编码。如果需要在挂载点名称或路径中包含冒号,也可以进行URL编码。

示例

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

  1. 运行以下 CLI 命令,在 vault 中创建所需的 secret:
# 如果尚未启用,则启用 "secret/" 挂载点;请注意,必须使用 "kv-v2"。
vault secrets enable -path=secret/ kv-v2

# 在挂载点 "secret/" 和路径 "zabbix/macros" 下放置一个键为 "password" 的新 secret。
vault kv put -mount=secret zabbix/macros password=<password>

# 测试 secret 是否已成功添加。
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} 解析为值:<password>

更新现有配置

要更新用于从 HashiCorp Vault 检索密钥的现有配置:

  1. 按照 数据库凭据 部分中的说明,更新 Zabbix 服务器或 proxy 配置文件参数。

  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 配置