Elasticsearch RBAC 配置:打造多租户环境的安全访问控制
Elasticsearch 是许多企业构建搜索和分析平台的首选工具,但在多用户或多租户场景下,数据安全和访问控制至关重要。基于角色的访问控制(RBAC,Role-Based Access Control)是 Elasticsearch 提供的强大功能,可以帮助管理员为不同用户分配精确的权限。本文将通过一个多租户场景的案例,详细介绍如何使用 API 配置 RBAC 权限,涵盖索引隔离、文档级控制以及常见问题排查。
为什么需要 RBAC?
在多租户环境中,例如一个 SaaS 平台,不同客户的数据存储在同一个 Elasticsearch 集群中,RBAC 可以确保每个租户只能访问自己的数据。RBAC 通过角色定义权限,再将角色分配给用户,实现灵活且安全的访问管理。
前提条件
- Elasticsearch 8.x 已安装,并启用 X-Pack 安全功能。
- 具备管理员权限(
elastic
用户凭据)。 - 熟悉 REST API 或
curl
工具。 - 测试环境包含示例索引,例如
tenant1-logs
和tenant2-logs
。
配置 RBAC 的步骤
以下以一个 SaaS 日志分析平台的场景为例,配置两个租户(Tenant1 和 Tenant2)的 RBAC 权限,确保数据隔离。
1. 确认安全功能已启用
在 elasticsearch.yml
中确保以下配置:
xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true
重启 Elasticsearch 后,运行以下命令设置内置用户密码:
bin/elasticsearch-setup-passwords interactive
记录 elastic
用户的密码,用于后续 API 操作。
2. 定义租户角色
为每个租户创建独立的角色,限制其访问特定索引并设置文档级权限。以下为 Tenant1 创建角色,限制其只能访问 tenant1-logs
索引中标记为 tenant_id: tenant1
的文档。
API 请求: