2 HashiCorp配置
概述
本节说明要从HashiCorp Vault KV Secrets Engine - Version 2检索秘文,应该如何配置Zabbix。
保险库应按照官方HashiCorp文档中描述的方式部署和配置。
要了解如何在Zabbix中配置TLS,请参阅存储秘密。
检索数据库凭据
要成功检索包含数据库凭据的秘文,需要同时配置:
- Zabbix server/proxy
- Zabbix前端
Server/proxy
要配置Zabbix server或proxy,请在配置文件中指定以下配置参数:
Vault
- 应使用的保险库提供者;VaultToken
- 保险库认证令牌(详见Zabbix server/proxy配置文件获取详细信息);VaultURL
- 保险库服务器的HTTP[S] URL;VaultDBPath
- 指向包含数据库凭据的保险库秘密的路径;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.conf中,指定以下参数:
Vault=HashiCorp
VaultToken=hvs.CAESIIG_PILmULFYOsEyWHxkZ2mF2a8VPKNLE8eHqd4autYGGh4KHGh2cy5aeTY0NFNSaUp3ZnpWbDF1RUNjUkNTZEg
VaultURL=https://127.0.0.1:8200
VaultDBPath=secret/zabbix/database
VaultPrefix=/v1/secret/data/
- 使用以下CLI命令在保险库中创建所需的秘密:
# 如果尚未启用“secret/”挂载点,请启用;请注意必须使用“kv-v2”。
vault secrets enable -path=secret/ kv-v2
# 在挂载点“secret/”和路径“zabbix/database”下放置具有用户名和密码键的新秘密。
vault kv put -mount=secret zabbix/database username=zabbix password=<password>
# 测试秘密是否成功添加。
vault kv get secret/zabbix/database
# 最后使用Curl测试;请注意,在挂载点之后和“/v1”之前,需要手动添加“data”参数,并查看--capath参数。
curl --header "X-Vault-Token: <VaultToken>" https://127.0.0.1:8200/v1/secret/data/zabbix/database
- 结果是,Zabbix server将检索以下用于数据库认证的凭据:
- 用户名:zabbix
- 密码:<password>
前端
经过配置Zabbix前端可以从保险库检索数据库凭据,可以在前端安装期间或通过更新前端配置文件(zabbix.conf.php
)进行配置。
如果自上次前端安装以来保险库凭据已更改,请重新运行前端安装或更新zabbix.conf.php
。另请参阅:更新现有配置。
在前端安装期间,必须在配置数据库连接步骤中指定配置参数:
- 将Store credentials in参数设置为 “HashiCorp Vault”。
- 指定连接参数:
参数 | 必填项 | 默认值 | 描述 |
---|---|---|---|
Vault API endpoint(保险库API端点) | 是 | https://localhost:8200 | 指定连接到保险库的URL,格式为 scheme://host:port |
Vault prefix(保险库前缀) | 否 | /v1/secret/data/ | 提供用于保险库路径或查询的自定义前缀。如果未指定,则使用默认值。 |
Vault secret path(保险库秘密路径) | 否 | 从中检索数据库凭据的秘密路径,通过键”password”和”username”。 例如: secret/zabbix/database | |
Vault authentication token(保险库认证令牌) | 否 | 提供用于只读访问秘密路径的认证令牌。 请参阅HashiCorp文档了解如何创建令牌和保险库策略。 |
检索用户宏值
要使用HashiCorp Vault存储Vault secret用户宏值,请确保以下几点:
- Zabbix server已配置为与HashiCorp Vault配合使用,详见配置。
- Administration → General → Other中的Vault provider参数设置为 “HashiCorp Vault”(默认)。
只有Zabbix server需要从保险库获取Vault secret宏值。 其他Zabbix组件(proxy,前端)不需要此类访问权限。
用户宏值应包含一个引用路径(如path:key
,例如secret/zabbix:password
)。 在Zabbix server配置期间指定的认证令牌(通过VaultToken
参数)必须为此路径提供只读访问权限。
详细了解Zabbix如何处理Vault secret宏值,请参阅Vault secret macros。
路径语法
斜杠(”/“)和冒号(”:”)这两个符号是保留的。
斜杠只能用于将挂载点与路径分隔开(例如,secret/zabbix 中挂载点是 “secret”,路径是 “zabbix”)。在保险库宏的情况下,冒号只能用于将路径/查询与键分隔开。
如果需要创建一个由斜杠分隔的挂载点名称(例如 foo/bar/zabbix,其中挂载点是 “foo/bar”,路径是 “zabbix”),可以对斜杠和冒号符号进行URL编码。如果需要在挂载点名称或路径中包含冒号,也可以进行URL编码。
示例
- 在Zabbix中,添加一个类型为 “Vault secret” 的用户宏 {$PASSWORD},其值为
secret/zabbix:password
。
- 使用以下CLI命令在保险库中创建所需的秘密:
# 如果尚未启用“secret/”挂载点,请启用;请注意必须使用“kv-v2”。
vault secrets enable -path=secret/ kv-v2
# 在挂载点“secret/”和路径“zabbix”下放置键为password的新秘密。
vault kv put -mount=secret zabbix password=<password>
# 测试秘密是否成功添加。
vault kv get secret/zabbix
# 最后使用Curl测试;请注意,在挂载点之后和“/v1”之前,需要手动添加“data”参数,并查看--capath参数。
curl --header "X-Vault-Token: <VaultToken>" https://127.0.0.1:8200/v1/secret/data/zabbix
- 结果是,Zabbix将把宏 {$PASSWORD} 解析为值:<password>
更新现有配置
要更新从HashiCorp Vault检索秘密的现有配置,请按照以下步骤进行操作:
根据Database credentials部分的说明,更新Zabbix server或proxy配置文件参数。
通过重新配置Zabbix前端并指定所需的参数来更新DB连接设置,具体步骤如Frontend部分所述。 要重新配置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'] = 'secret/zabbix/database';
$DB['VAULT_TOKEN'] = '<mytoken>';
$DB['VAULT_CERT_FILE'] = '';
$DB['VAULT_KEY_FILE'] = '';
$DB['VAULT_PREFIX'] = '';
根据需要,按照User macro values部分的说明配置用户宏值。
要更新从CyberArk Vault检索秘密的现有配置,请参阅CyberArk configuration。