2 HashiCorp 配置

概述

本节说明如何配置 Zabbix 以从 HashiCorp Vault KV Secrets Engine(版本 2)中检索密钥。

Vault 的部署和配置应按照官方文档中的说明进行,详见 HashiCorp documentation

有关在 Zabbix 中配置 TLS 的信息,请参见 Storage of secrets

检索数据库凭据

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

  • 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中获取数据库凭据,
可以在前端installation期间配置,
或者通过更新前端配置file(zabbix.conf.php)进行配置。

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

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

  • 存储凭据于参数设置为 "HashiCorp Vault"。
  • 指定连接参数:
参数 必填 默认值 描述
Vault API endpoint yes https://localhost:8200 以格式 scheme://host:port 指定连接vault的URL
Vault prefix no /v1/secret/data/ 提供vault路径的自定义前缀或query。若未指定,则使用默认值。
示例:/v1/secret/data/zabbix/
Vault secret path no 指定从其中检索数据库凭据(通过键 "password" 和 "username")的密钥路径。
示例:database
Vault authentication token no 提供用于对密钥路径进行只读访问的身份验证令牌。
有关创建令牌和vault策略的信息,请参阅HashiCorp documentation

检索用户宏值

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

  • Zabbix server 已 serverproxy 与 HashiCorp Vault 配合使用;
  • 其他Vault provider 参数已设置为 "HashiCorp Vault"(默认值)。

只有 Zabbix server 需要从 Vault 中访问 Vault secret 宏值。 其他 Zabbix 组件(proxy、前端)不需要此类访问权限。

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

有关 Zabbix 处理宏值的详细信息,请参见 vault秘密

路径语法

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

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

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

示例

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

2。运行以下 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

3。结果,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配置