[comment]: # ({72ab9926-72ab9926})
# 13 密钥存储

[comment]: # ({/72ab9926-72ab9926})

[comment]: # ({753be55f-753be55f})
#### 概述

可以将一些敏感信息安全地存储在HashiCorp Vault KV Secrets Engine - 版本2中。可以保存以下内容的密钥：

-   用户宏值
-   数据库访问凭据

Zabbix提供对Vault中密钥的只读访问，假设密钥由其他人管理。

[comment]: # ({/753be55f-753be55f})

[comment]: # ({a9fb8f46-6c5ad307})
#### 用户宏值

可以将用户宏值秘密存储在Vault中.

用户宏的"[配置](/manual/config/macros/user_macros#配置)"
值包含一个引用路径(格式为'path:key'，例如"secret/zabbix:password").

可以使用以下命令为示例中提到的路径设置值:

    # Enable "secret/" mount point if not already enabled, note that "kv-v2" must be used
    vault secrets enable -path=secret/ kv-v2

    # 在挂载点"secret/"和路径"secret/zabbix"下添加带有password键的新密钥

    vault kv put secret/zabbix password=<password>

    # 测试密钥是否成功添加

    vault kv get secret/zabbix

    # 最后使用Curl测试，注意"data"需要在挂载点后手动添加，且在挂载点前添加"/v1"，另请参阅--capath参数

    curl --header "X-Vault-Token: <VaultToken>" https://127.0.0.1:8200/v1/secret/data/zabbix

密钥值会在每次配置数据刷新时由Zabbix server获取，并存储在configuration cache中.
必须先在服务器配置('VaultToken'参数)中提供对引用路径的只读访问认证令牌.
如果无法成功获取宏值，使用该值的相应监控项将变为不支持状态.

也可以使用'secrets\_reload'命令行
[运行时控制](/manual/concepts/server#运行时控制)
来触发从Vault刷新密钥值.

Zabbix proxy永远不会与Vault通信以get除数据库凭据外的任何密钥.
Zabbix proxy上的密钥值会在每次配置同步时从Zabbix server获取，并以与Zabbix server相同的方式存储在配置缓存中.

这意味着Zabbix proxy在重启后无法开始数据收集，直到它首次从Zabbix server接收update的配置数据.
必须在Zabbix server和proxy之间启用加密；否则服务器会记录警告消息.

[comment]: # ({/a9fb8f46-6c5ad307})

[comment]: # ({facf21fc-0397a06f})
#### 数据库凭据

支持将Zabbix server、proxies及前端使用的数据库凭证安全存储在Vault中：

-   用于获取数据库凭证的Vault相关参数可配置

    optionally entered in the frontend [installation
    wizard](/manual/installation/frontend).

从Vault获取的数据库凭证将由前端进行缓存。需注意前端使用文件系统临时file目录作为数据库凭证缓存位置。可通过ZBX\_DATA\_CACHE\_TTL[constant](/manual/web_interface/definitions)参数控制数据缓存的刷新/失效频率。

-   对于server/proxy可使用VaultDBPath配置参数

    to specify the path from where credentials for database will be
    retrieved by keys 'password' and 'username' (for example:
    secret/zabbix/database).

以下命令可用于设置示例中提及路径的对应值：

    # Enable "secret/" mount point if not already enabled, note that "kv-v2" must be used
    vault secrets enable -path=secret/ kv-v2

    # 在挂载点"secret/"和路径"secret/zabbix/database"下新增包含username和password键的密钥

    vault kv put 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

[comment]: # ({/facf21fc-0397a06f})

[comment]: # ({afa61aff-afa61aff})
#### 配置参数

针对Zabbix server/proxy新增了以下Vault认证及数据库凭据获取的配置参数:

-   VaultToken - Vault认证令牌(详见Zabbix
    [server](/manual/appendix/config/zabbix_server)/[proxy](/manual/appendix/config/zabbix_proxy)
    配置中的file函数说明)
-   VaultURL - Vault服务器的HTTP[S]地址
-   VaultDBPath - 用于获取数据库凭据的Vault路径

    retrieved by keys 'password' and 'username' (for example:
    secret/zabbix/database)

Zabbix server和Zabbix proxy在启动时会从zabbix\_server.conf和zabbix\_proxy.conf读取Vault相关配置参数。

Zabbix server和Zabbix proxy在启动时会额外读取一次"VAULT\_TOKEN"环境变量并立即清除该变量，以防止其通过fork脚本泄露；若同时设置了VaultToken和VAULT\_TOKEN将会报错。

::: noteclassic
斜杠(/)和冒号(:)是保留字符。斜杠仅可用于分隔挂载点与路径(例如secret/zabbix中"secret"是挂载点，"zabbix"是路径)；在Vault宏中，冒号仅可用于分隔路径与键名。如需create包含斜杠的挂载点名称(例如foo/bar/zabbix中挂载点为"foo/bar"，路径为"zabbix"，应表示为"foo%2Fbar/zabbix")，或当挂载点名称/路径需要包含冒号时，可对"/"和":"进行URL编码。

:::

[comment]: # ({/afa61aff-afa61aff})

[comment]: # ({903292c8-71d9c0a5})
#### 配置 TLS

由证书颁发机构(CA)签发的证书应添加到默认CA存储中。或者，可以使用SSLCALocation配置参数指定自定义CA存储位置；请注意，在这种情况下，必须使用openssl c_rehash工具准备证书目录，例如在该目录中配置SSLCALocation和copy "ca.pem"文件，然后run以下命令：

    
c_rehash .

[comment]: # ({/903292c8-71d9c0a5})
