13 存储密钥
概述
可以在 HashiCorp 中秘密存储一些敏感信息 Vault KV Secrets Engine - 第 2 版。可以将密钥保存为:
- 用户宏值
- 数据库访问凭据
Zabbix 提供对 Vault 中机密的只读访问权限,假设密钥由其他人管理。
用户宏值
可以将用户宏值秘密存储在 Vault 中。
一个“Vault 机密” 用户宏的值包含一个参考路径(如 ‘path:key’,对于 例如“秘密/zabbix:密码”)。
以下命令可用于设置路径的值 示例中提到:
# 如果没有启用“secret/”挂载点,请注意必须使用“kv-v2”
$ vault secrets enable -path=secret/ kv-v2
# 在挂载点 "secret/" 和路径 "secret/zabbix" 下放置带有密钥密码的新密钥
$ vault kv put secret/zabbix 密码=<密码>
# 测试是否添加成功
$ vault kv 获取秘密/zabbix
# 最后用Curl进行测试,注意“data”需要手动添加在挂载点之后,“/v1”需要在挂载点之前添加,另见--capath参数
$ curl --header "X-Vault-Token: <VaultToken>" https://127.0.0.1:8200/v1/secret/data/zabbix
每次刷新配置数据时,Zabbix 服务器都会检索秘密值并存储在配置缓存中。必须在服务器配置中提供对引用路径进行只读访问的身份验证令牌(“VaultToken”参数)。如果无法成功检索宏值,则使用该值的相应项目将变为不受支持。
也可以使用 ‘secrets_reload’ 命令行 option 从 Vault 触发秘密值的刷新。
Zabbix 代理从不与 Vault 通信以获取数据库凭据以外的任何机密。 Zabbix 代理上的秘密值在每次配置同步时从 Zabbix 服务器检索,并以与 Zabbix 服务器相同的方式存储在配置缓存中。
这意味着 Zabbix 代理在重新启动后无法开始数据收集,直到它第一次从 Zabbix 服务器接收到配置数据更新。 Zabbix server和proxy之间必须开启加密;否则会记录服务器警告消息。
数据库凭据
支持将 Zabbix 服务器、代理和前端使用的数据库凭据秘密存储在 Vault 中:
- 可以选择在前端 安装向导 中输入用于检索数据库凭据的 Vault 相关参数。
从 Vault 检索的数据库凭据将由前端缓存。请注意,文件系统临时文件目录用于前端的数据库凭据缓存。您可以使用 ZBX_DATA_CACHE_TTL 常量 来控制数据缓存刷新/失效的频率。
- 对于服务器/代理,VaultDBPath 配置参数可用于指定通过密钥“密码”和“用户名”检索数据库凭据的路径(例如:secret/zabbix/database)。
以下命令可用于设置示例中提到的路径的值:
# 如果没有启用“secret/”挂载点,请注意必须使用“kv-v2”
$ vault secrets enable -path=secret/ kv-v2
# 在挂载点 "secret/" 和路径 "secret/zabbix/database" 下放置带有密钥用户名和密码的新密钥
$ vault kv put secret/zabbix/database 用户名=zabbix 密码=<密码>
# 测试是否添加成功
$ vault kv 获取秘密/zabbix/数据库
# 最后用Curl进行测试,注意“data”需要手动添加在挂载点之后,“/v1”需要在挂载点之前添加,另见--capath参数
$ curl --header "X-Vault-Token: <VaultToken>" https://127.0.0.1:8200/v1/secret/data/zabbix/database
配置参数
对于 Zabbix 服务器/代理,为 Vault 身份验证和检索数据库凭据添加了新的配置参数:
- VaultToken - Vault 身份验证令牌(请参阅 Zabbix server/proxy配置文件详细)
- VaultURL - Vault 服务器 HTTP[S] URL
- VaultDBPath - 将通过密钥“密码”和“用户名”检索数据库凭据的保险库路径(例如:secret/zabbix/database)
Zabbix server 和 Zabbix proxy 在启动时会从 zabbix_server.conf 和 zabbix_proxy.conf 中读取 Vault 相关的配置参数。
Zabbix server 和 Zabbix proxy 会在启动时额外读取一次 “VAULT_TOKEN” 环境变量并取消设置,使其无法通过 fork 脚本使用;如果 VaultToken 和 VAULT_TOKEN 都包含值,则这是一个错误。
正斜杠和冒号是保留符号。正斜杠只能用于将挂载点与路径分开(例如,secret/zabbix,其中挂载点为“secret”,“zabbix”为路径),对于 Vault 宏,冒号只能用于将路径与密钥分开。如果需要创建名称由正斜杠分隔的挂载点(例如 foo/bar/zabbix,挂载点为“foo/bar”且路径为“ zabbix” 为 “foo%2Fbar/zabbix”) 并且挂载点名称或路径是否需要包含冒号。
配置 TLS
应将由证书颁发机构 (CA) 签名的证书添加到默认 CA 存储中。 或者,可以使用 SSLCALocation 配置参数指定自定义 CA 存储位置; 请注意,在这种情况下,必须使用 openssl c_rehash 实用程序准备证书目录,例如配置 SSLCALocation 并在该目录中复制“ca.pem”,然后运行以下命令:
$ c_rehash 。