Vault 配置文件
除非使用的是 "dev" 模式,否则 Vault 服务使用配置文件进行配置。配置文件使用 HCL 或是 JSON 格式。以下是一个配置文件的例子:
storage "consul" {
address = "127.0.0.1:8500"
path = "vault"
}
listener "tcp" {
address = "127.0.0.1:8200"
tls_disable = 1
}
telemetry {
statsite_address = "127.0.0.1:8125"
disable_hostname = true
}
配置文件编写好以后,使用 vault server
命令的 -config
标志指定使用的配置文件路径。
参数
storage
([StorageBackend][storage-backend]: <required>)
- 配置存储 Vault 数据的存储后端。在高可用模式下运行 Vault 需要后端支持协调(coordination)语义。如果存储后端支持高可用,也可以在此参数块中指定高可用后端选项。如果不支持,则应使用支持高可用的后端以及相应的高可用选项配置独立的ha_storage
参数。ha_storage
([StorageBackend][storage-backend]: nil)
- 配置 Vault 高可用集群协调所使用的后端存储。这必须是一个支持高可用集群的后端。如果没有设置该标志,那么将会尝试在storage
配置的位置上进行高可用集群协调。如果storage
后端支持高可用集群协调,那么不需要配置该标志。listener
([Listener][listener]: <required>)
- 配置 Vault 如何侦听 API 请求。seal
([Seal][seal]: nil)
- 配置自动解封的类型。cluster_name
(string: <generated>)
– 设置 Vault 集群的标志符。如果忽略,Vault 会生成一个值。cache_size
(string: "131072")
– 设定物理存储子系统所使用的读缓存的大小。该值设定的是缓存的条目数,所以实际缓存的大小取决于存储的条目的大小。disable_cache
(bool: false)
– 禁止 Vault 使用缓存,包括物理存储子系统的读缓存。这将会显著影响性能。disable_mlock
(bool: false)
– 禁止服务调用mlock
系统调用。mlock
防止内存数据被交换(swap)到磁盘上。不建议禁用mlock
,除非使用集成存储。禁用mlock
时,请遵循下面概述的其他安全预防措施。该参数也可以通过 环境变量VAULT_DISABLE_MLOCK
来设定。
除非运行 Vault 的系统仅使用加密虚拟内存或根本不使用虚拟内存,否则不建议禁用 mlock
。 Vault 只会在支持 mlock()
系统调用(Linux、FreeBSD 等)的类 UNIX 系统上支持内存锁定。非类 UNIX 系统(例如 Windows、NaCL、Android)缺乏防止进程的整个内存地址空间被交换到磁盘的原语(primitive),因此在不受支持的平台上会自动禁用。
如果使用集成存储,强烈建议禁用 mlock
,因为 mlock
无法与内存映射文件(例如由BoltDB 创建的用于跟踪 Raft 集群状态的文件)配合好。使用 mlock
时,内存映射文件会加载到常驻内存中,这会导致 Vault 的整个数据集加载到内存中,如果 Vault 的数据变得超出可用内存范围,则会引发内存不足问题。在这种情况下,即使 BoltDB 中的数据保持加密存储状态,也应禁用虚拟内存以防止 Vault 内存中其他的敏感数据转储到磁盘中。
在 Linux 中,要给予 Vault 可执行文件以使用 mlock
系统调用同时不给予 root 权限的话,运行以下命令:
sudo setcap cap_ipc_lock=+ep $(readlink -f $(which vault))
注意,由于 Vault 中所有的插件都是单独的进程,我们需要对插件目录中所有插件都执行该操作。
如果使用的 Linux 发行版搭配有 systemd 的现代化版本,我们可以将以下指令添加到配置文件中的 "[Service]" 部分:
LimitMEMLOCK=infinity
plugin_directory
(string: "")
– 存放有允许加载的插件的目录路径。Vault 必须拥有读取该目录的权限来成功加载插件,该路径不可以是符号链接。telemetry
([Telemetry][telemetry]: <none>)
– 设置遥测(telemetry)报告系统。log_level
(string: "")
– 设定使用的日志级别,可以使用命令行参数或环境变量覆盖配置文件中的配置。收到 SIGHUP (sudo kill -s HUP pid of vault) 信号时,Vault 会将日志级别更新为此处指定的当前值(包括命令行参数或环境变量覆盖的值)。并非 Vault 日志记录的所有部分都可以通过这种方式动态更改级别;特别是,secrets/auth
插件目前不支持动态更新。支持的日志级别:Trace
,Debug
,Error
,Warn
,Info
。log_format
(string: "")
– 设置使用的日志格式。可以使用命令行参数或环境变量覆盖配置文件中的配置。支持的格式有:standard
和json
。default_lease_ttl
(string: "768h")
– 设置令牌与机密的默认租约时长。该参数的值需要是后缀为"30s"
或"5m"
的字符串。该值不可以超过max_lease_ttl
。max_lease_ttl
(string: "768h")
– 设置令牌与机密租约的最大时长。该参数的值需要是后缀为"30s"
或"5m"
的字符串。具体挂载点可以通过调整配置max-lease-ttl
标志覆盖此处的配置:auth、secretdefault_max_request_duration
(string: "90s")
– 设置 Vault 处理请求所使用的最大时长。该参数可以被侦听器配置的max_request_duration
覆盖。raw_storage_endpoint
(bool: false)
– 启用sys/raw
端点,该端点允许透过加密屏障读写原始数据。这是一个需要极高特权的端点。ui
(bool: false)
– 是否启用 Web UI 界面,启用后可以从任意侦听地址加上/ui
后缀来访问 UI 界面。从浏览器中访问 Vault API 地址会被自动重定向到 UI 地址上。该参数也可以通过 环境变量VAULT_UI
来设定。pid_file
(string: "")
- Vault 服务用以保存进程 ID (PID)的文件路径enable_response_header_hostname
(bool: false)
- 在所有 Vault 的 HTTP 响应中添加 HTTP 标头:X-Vault-Hostname,值为响应 HTTP 请求的 Vault 节点的主机名。此信息是尽力而为,不保证存在。如果启用此配置选项并且响应中不存在 X-Vault-Hostname 标头,则意味着从操作系统检索主机名时出现了错误。enable_response_header_raft_node_id
(bool: false)
- 在所有 Vault 的 HTTP 响应中添加 HTTP 标头:X-Vault-Raft-Node-ID。如果 Vault 是 Raft 集群的组成节点(即使用集成存储),则此标头将包含响应 HTTP 请求的 Vault 节点的 Raft 节点 ID。如果 Vault 不参与 Raft 集群,则无论是否启用此配置选项,此标头都将被省略。
高可用参数
后端存储支持高可用时可以使用以下参数:
api_addr
(string: "")
- 设定要向集群中的其他 Vault 服务器通告以进行客户端重定向的地址(完整 URL)。该值也用于插件后端。也可以通过设置环境变量VAULT_API_ADDR
设置该参数。通常该参数要设置为指向侦听器地址值的完整 URL。cluster_addr
(string: "")
- 设定要向集群中的其他 Vault 服务器通告以进行请求转发的地址。也可以通过设置环境变量VAULT_CLUSTER_ADDR
设置该参数。这是一个像api_addr
那样完整的 URL,但 Vault 将忽略协议(所有集群成员始终使用带有私钥/证书的 TLS)。disable_clustering
(bool: false)
– 设定是否启用请求转发等集群功能。如果在一个 Vault 节点上将此设置为true
,那么只会在该节点是主节点时禁用这些功能。如果存储类型是raft
则不能将该参数设置为true
。