如何限制应用仅能访问Elasticsearch中指定的索引列表?
Elasticsearch 多应用索引权限隔离实现方案
你需要的权限隔离能力可以直接通过已启用的X-Pack自带的基于角色的访问控制(RBAC) 实现,无需额外引入组件,是Elasticsearch官方原生的权限管理方案,完全满足多应用索引互不干扰的需求。
核心逻辑
X-Pack RBAC采用白名单权限机制,默认对所有未显式授予的访问请求直接拒绝。你可以为每个应用单独分配专属角色、专属访问账号,仅给角色授予对应应用的索引操作权限,即可实现不同应用的索引完全隔离,不会出现跨应用读写篡改的问题。
具体操作步骤
- 第一步:先统一所有应用的索引命名规范,建议按
app_{应用唯一标识}_*格式命名,比如应用A的缓存索引统一前缀为app_a_cache_*,应用B的缓存索引统一前缀为app_b_cache_*,方便后续权限批量匹配 - 第二步:为单个应用创建专属角色,以应用A为例,执行以下请求(可在Kibana Dev Tools中直接运行),仅授予该角色操作应用A对应索引的权限:
POST _security/role/app_a_cache_role { "indices": [ { "names": ["app_a_cache_*"], "privileges": ["all"] } ] }
如果你不需要给应用索引的全操作权限,可以按需调整privileges的取值,比如仅允许读写填["read", "write"],仅允许查询填["read"]。
- 第三步:为应用创建专属访问账号,绑定上一步创建的角色:
POST _security/user/app_a_cache_user { "password": "自定义强密码", "roles": ["app_a_cache_role"], "full_name": "应用A缓存服务专用账号" }
- 第四步:每个应用使用自己对应的专属账号连接Elasticsearch即可,此时应用的账号仅能操作自己权限范围内的索引,完全无法访问其他应用的索引,也看不到其他索引的存在。
可选细粒度控制
如果需要更精细化的权限管控,可以调整角色的权限配置:
- 若需要禁止应用删除索引、修改索引结构,可去掉
all权限,按需搭配read、write、create_index等细粒度权限 - 若需要禁止应用访问集群层面的接口(比如查询集群节点状态、查询所有索引列表),创建角色时无需配置
cluster权限即可,默认无任何集群层面的访问权限
内容的提问来源于stack exchange,提问作者alilland
相关产品推荐
相关产品推荐

