本节说明要从HashiCorp Vault KV Secrets Engine - Version 2检索秘文,应该如何配置Zabbix。
保险库应按照官方HashiCorp文档中描述的方式部署和配置。
要了解如何在Zabbix中配置TLS,请参阅存储秘密。
要成功检索包含数据库凭证的密钥,需要配置以下两者:
要配置 Zabbix server 或 proxy, 在配置文件中指定以下配置参数:
Vault
- 应使用的密钥库提供者;VaultToken
- 密钥库认证令牌(详情请参阅 Zabbix server/proxy 配置文件);VaultURL
- 密钥库服务器的 HTTP[S] URL;VaultDBPath
- 包含数据库凭证的密钥库密钥路径(如果未指定 DBUser 和 DBPassword,此选项才可使用);Zabbix server 或 proxy 将通过 "password" 和 "username" 的键来检索凭证;VaultPrefix
- 密钥库路径或查询的自定义前缀,具体取决于密钥库;如果未指定,将使用最合适的默认值。Zabbix server 在处理密钥库密钥宏时,也使用 Vault
、VaultToken
、VaultURL
和 VaultPrefix
配置参数进行密钥库认证。
Zabbix server 和 Zabbix proxy 在启动时从 zabbix_server.conf 和 zabbix_proxy.conf 读取与密钥库相关的配置参数。 此外,Zabbix server 和 Zabbix proxy 在启动时会读取一次 VAULT_TOKEN
环境变量,并将其取消设置,以免通过分叉脚本访问;如果 VaultToken
和 VAULT_TOKEN
参数都包含值,则为错误。
Zabbix server 或 proxy 支持自动续期服务令牌和周期性服务令牌。如果 Zabbix 检测到 令牌可续期,它将一直自动续期,直到 令牌的最大TTL到达,或者在周期性服务令牌的情况下,无限期续期。
示例
Vault=HashiCorp
VaultToken=hvs.CAESIIG_PILmULFYOsEyWHxkZ2mF2a8VPKNLE8eHqd4autYGGh4KHGh2cy5aeTY0NFNSaUp3ZnpWbDF1RUNjUkNTZEg
VaultURL=https://127.0.0.1:8200
VaultDBPath=database
VaultPrefix=/v1/secret/data/zabbix/
# 如果尚未启用,则启用 "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
Zabbix前端可以配置为从vault检索数据库凭证, 无论是通过前端安装过程,还是通过更新 前端配置文件(zabbix.conf.php
)。
如果自上次前端安装以来,vault凭证已更改,重新运行前端安装 或更新zabbix.conf.php
。另请参阅:更新现有配置。
在前端安装过程中,必须在配置数据库连接步骤中指定配置参数:
参数 | 必须 | 默认值 | 描述 |
---|---|---|---|
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编码。
示例
macros:password
# 如果尚未启用,则启用 "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
要更新从HashiCorp Vault检索秘密的现有配置:
根据数据库凭证部分中所述,更新Zabbix server或proxy配置文件参数。
通过重新配置Zabbix前端并指定前端部分中所述的所需参数来更新DB连接设置。 要重新配置Zabbix前端,请在浏览器中打开前端设置URL:
或者,这些参数可以在前端配置文件 (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/';
要更新从CyberArk Vault检索秘密的现有配置,请参阅CyberArk配置。