从密钥库(keystore)文件重新加载安全设置到集群节点,无需重启节点即可动态更新敏感配置(如密码、加密密钥等)。
API 格式 #
POST /_nodes/reload_secure_settings
POST /_nodes/{node_id}/reload_secure_settings
API 作用 #
该 API 允许管理员动态重新加载存储在密钥库文件中的敏感配置设置,而无需重启节点。密钥库中通常包含:
- 密码
- 加密密钥
- TLS 证书和密钥
- 其他敏感配置
API 参数 #
路径参数 #
| 参数 | 类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
{node_id} | String | 否 | 所有节点 | 逗号分隔的节点 ID 列表。如未指定,则在集群所有节点上执行操作 |
查询参数 #
| 参数 | 类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
timeout | Time | 否 | 集群默认超时 | 操作的显式超时时间 |
请求体参数 #
请求体是可选的,包含以下字段:
{
"secure_settings_password": "keystore_password"
}
| 参数 | 类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
secure_settings_password | String | 否 | 空字符串 | 用于解密和重新加载密钥库内容的密码。对于无密码保护的密钥库,使用默认空字符串 |
响应示例 #
成功响应 #
{
"cluster_name": "my_cluster",
"nodes": {
"node_id_1": {
"name": "node_1"
},
"node_id_2": {
"name": "node_2"
}
}
}
带错误的响应 #
{
"cluster_name": "my_cluster",
"nodes": {
"node_id_1": {
"name": "node_1"
},
"node_id_2": {
"name": "node_2",
"reload_exception": {
"type": "security_exception",
"reason": "Provided keystore password was incorrect",
"stack_trace": "..."
}
}
}
}
响应字段说明 #
| 字段 | 类型 | 描述 |
|---|---|---|
cluster_name | String | 集群名称 |
nodes | Object | 包含每个节点结果的对象 |
nodes.{node_id}.name | String | 节点名称 |
nodes.{node_id}.reload_exception | Object/null | 如果该节点重新加载失败,包含异常详情;成功则为 null |
reload_exception.type | String | 异常类型 |
reload_exception.reason | String | 失败原因 |
reload_exception.stack_trace | String | 异常堆栈跟踪 |
安全约束 #
- TLS 要求:如果提供了密码且请求不是节点本地操作(即针对多个节点),则必须为传输层启用 TLS
- 无 TLS 限制:在没有 TLS 的情况下,该 API 只能与
_local过滤器一起使用,在每个节点上更新安全设置
使用场景 #
- 更新密钥库密码:无需重启节点即可更新密钥库密码
- 重新加载 TLS 证书:更新 TLS 证书和密钥
- 更新敏感配置:动态更新存储在密钥库中的其他敏感配置
- 密钥库恢复:通过提供正确的密码从密钥库损坏中恢复
功能特性 #
- 密钥库重新加载:从配置目录读取密钥库文件并使用提供的密码解密
- 插件重新加载:将新设置广播到集群中所有可重新加载的插件
- 安全处理:密码在使用后会从内存中安全清除
- 原子操作:要么所有指定节点都成功重新加载,要么报告每个节点的失败情况
注意事项 #
- 确保密钥库文件在配置目录中存在
- 提供的密码必须与密钥库的密码匹配
- 在生产环境中使用时,建议启用 TLS 以保护密码传输
- 重新加载操作可能影响使用这些设置的服务,请谨慎操作





