2 HashiCorp配置

概述

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

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

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

检索数据库凭证

要成功检索包含数据库凭证的密钥,需要配置以下两者:

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

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

  • Vault - 应使用的密钥库提供者;
  • VaultToken - 密钥库认证令牌(详情请参阅 Zabbix server/proxy 配置文件);
  • VaultURL - 密钥库服务器的 HTTP[S] URL;
  • VaultDBPath - 包含数据库凭证的密钥库密钥路径(如果未指定 DBUser 和 DBPassword,此选项才可使用);Zabbix server 或 proxy 将通过 "password" 和 "username" 的键来检索凭证;
  • VaultPrefix - 密钥库路径或查询的自定义前缀,具体取决于密钥库;如果未指定,将使用最合适的默认值。

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

Zabbix server 和 Zabbix proxy 在启动时从 zabbix_server.confzabbix_proxy.conf 读取与密钥库相关的配置参数。 此外,Zabbix server 和 Zabbix proxy 在启动时会读取一次 VAULT_TOKEN 环境变量,并将其取消设置,以免通过分叉脚本访问;如果 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 命令以在 vault 中创建所需的密钥:
# 如果尚未启用,则启用 "secret/" 挂载点;请注意必须使用 "kv-v2"。
       vault secrets enable -path=secret/ kv-v2
       
       # 在挂载点 "secret/" 和路径 "zabbix/database" 下,使用键 username 和 password 存储新密钥。
       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前端可以配置为从vault检索数据库凭证, 无论是通过前端安装过程,还是通过更新 前端配置文件(zabbix.conf.php)。

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

前端安装过程中,必须在配置数据库连接步骤中指定配置参数:

  • Store credentials in参数设置为"HashiCorp Vault"。
  • 指定连接参数:
参数 必须 默认值 描述
Vault API endpoint https://localhost:8200 指定以scheme://host:port格式连接到vault的URL
Vault prefix /v1/secret/data/ 提供vault路径或查询的自定义前缀。如果未指定,使用默认值。
示例:/v1/secret/data/zabbix/
Vault secret path 从其中检索数据库凭证的路径,通过"password"和"username"键。
示例:database
Vault authentication token 提供一个用于仅读访问secret path的认证令牌。
参阅HashiCorp文档了解创建令牌和vault策略的信息。

获取用户宏值

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

仅Zabbix server需要从vault访问Vault secret宏值。 其他Zabbix组件(proxy, frontend)不需要此类访问。

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

有关Zabbix处理宏值的详细信息,请参阅Vault secret 宏

路径语法

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

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

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

示例

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

  1. 运行以下CLI命令以在Vault中创建所需的密钥:
# 如果尚未启用,则启用 "secret/" 挂载点;请注意必须使用 "kv-v2"。
       vault secrets enable -path=secret/ kv-v2
       
       # 在 "secret/" 挂载点和 "zabbix/macros" 路径下放置包含 "password" 密钥的新密钥。
       vault kv put -mount=secret zabbix/macros password=<password>
       
       # 测试密钥是否成功添加。
       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 server或proxy配置文件参数。

  2. 通过重新配置Zabbix前端并指定前端部分中所述的所需参数来更新DB连接设置。 要重新配置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配置