OpenSearch使用通配符删除别名时出现权限错误求助
问题
需要执行操作:移除别名my_index关联的所有索引,再将其关联到单个指定索引。使用的请求如下:
POST _aliases { "actions": [ { "remove": { "index": "*", // or "index": "_all" "alias": "my_index" } }, { "add": { "index": "my_index_2023_01_05_17_18_29", "alias": "my_index" } } ] }
使用admin用户执行该请求时,出现403权限错误:
{ "error" : { "root_cause" : [ { "type" : "security_exception", "reason" : "no permissions for [] and User [name=admin, backend_roles=[], requestedTenant=]" } ], "type" : "security_exception", "reason" : "no permissions for [] and User [name=admin, backend_roles=[], requestedTenant=]" }, "status" : 403 }
错误信息未明确缺失的权限,将index参数改为my_index*时请求可执行,但无法满足移除所有关联索引的需求(使用OpenSearch 2.3版本)。
原因分析
在OpenSearch的权限控制逻辑中,使用通配符*或_all指定索引时,要求用户拥有所有索引的别名管理权限,但当前admin用户的权限范围仅覆盖了匹配my_index*的索引,而非全局所有索引。另外,OpenSearch处理全局通配符时,权限校验逻辑无法精准定位具体缺失的权限项,导致错误信息未明确列出权限内容。
解决方法
方法一:调整权限配置
给admin用户添加针对所有索引的别名管理权限:
- 进入OpenSearch Dashboards的Security插件界面
- 找到
Roles管理页面,创建或编辑admin用户关联的角色 - 添加权限项:
- 权限类型选择
Indices - 索引模式填写
* - 勾选
manage_aliases权限
- 权限类型选择
- 保存角色配置后重新执行请求
方法二:先查询关联索引再针对性移除
如果不想赋予全局权限,可先查询别名当前关联的所有索引,再精准移除:
- 执行查询获取关联索引列表:
GET _alias/my_index
- 将返回的所有关联索引填入
remove操作的index参数,示例:
POST _aliases { "actions": [ { "remove": { "index": ["my_index_old_1", "my_index_old_2"], "alias": "my_index" } }, { "add": { "index": "my_index_2023_01_05_17_18_29", "alias": "my_index" } } ] }
该方式仅需对实际关联的索引拥有manage_aliases权限即可。
内容的提问来源于stack exchange,提问作者André Machado
相关产品推荐
相关产品推荐

