📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

从密钥库(keystore)文件重新加载安全设置到集群节点,无需重启节点即可动态更新敏感配置(如密码、加密密钥等)。

API 格式 #

POST /_nodes/reload_secure_settings
POST /_nodes/{node_id}/reload_secure_settings

API 作用 #

该 API 允许管理员动态重新加载存储在密钥库文件中的敏感配置设置,而无需重启节点。密钥库中通常包含:

  • 密码
  • 加密密钥
  • TLS 证书和密钥
  • 其他敏感配置

API 参数 #

路径参数 #

参数类型是否必填默认值描述
{node_id}String所有节点逗号分隔的节点 ID 列表。如未指定,则在集群所有节点上执行操作

查询参数 #

参数类型是否必填默认值描述
timeoutTime集群默认超时操作的显式超时时间

请求体参数 #

请求体是可选的,包含以下字段:

{
  "secure_settings_password": "keystore_password"
}
参数类型是否必填默认值描述
secure_settings_passwordString空字符串用于解密和重新加载密钥库内容的密码。对于无密码保护的密钥库,使用默认空字符串

响应示例 #

成功响应 #

{
  "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_nameString集群名称
nodesObject包含每个节点结果的对象
nodes.{node_id}.nameString节点名称
nodes.{node_id}.reload_exceptionObject/null如果该节点重新加载失败,包含异常详情;成功则为 null
reload_exception.typeString异常类型
reload_exception.reasonString失败原因
reload_exception.stack_traceString异常堆栈跟踪

安全约束 #

  1. TLS 要求:如果提供了密码且请求不是节点本地操作(即针对多个节点),则必须为传输层启用 TLS
  2. 无 TLS 限制:在没有 TLS 的情况下,该 API 只能与 _local 过滤器一起使用,在每个节点上更新安全设置

使用场景 #

  1. 更新密钥库密码:无需重启节点即可更新密钥库密码
  2. 重新加载 TLS 证书:更新 TLS 证书和密钥
  3. 更新敏感配置:动态更新存储在密钥库中的其他敏感配置
  4. 密钥库恢复:通过提供正确的密码从密钥库损坏中恢复

功能特性 #

  1. 密钥库重新加载:从配置目录读取密钥库文件并使用提供的密码解密
  2. 插件重新加载:将新设置广播到集群中所有可重新加载的插件
  3. 安全处理:密码在使用后会从内存中安全清除
  4. 原子操作:要么所有指定节点都成功重新加载,要么报告每个节点的失败情况

注意事项 #

  1. 确保密钥库文件在配置目录中存在
  2. 提供的密码必须与密钥库的密码匹配
  3. 在生产环境中使用时,建议启用 TLS 以保护密码传输
  4. 重新加载操作可能影响使用这些设置的服务,请谨慎操作