Opendistro Elasticsearch admin用户修改索引设置遇权限报错
解决Opendistro Elasticsearch修改设置时的403权限错误
看起来你遇到的问题是使用admin用户修改集群/索引设置时,无论是否携带securitytenant头都触发403权限拒绝,而且其他命令能正常执行。咱们一步步来排查解决:
首先,检查你的命令是否匹配需求
你的命令是修改/_settings(集群级设置),但number_of_replicas是索引级别的参数。如果你的目标是修改现有所有索引的副本数,命令应该调整为针对索引的操作:
# 修改所有现有索引的副本数 curl -XPUT 'localhost:9200/*/_settings' -H 'Content-Type: application/json' -u admin --insecure -d '{ "index" : { "number_of_replicas" : 0 } }'
如果是想设置集群默认的副本数(新创建的索引会继承),那原命令是对的,但需要对应的集群权限。
排查权限配置问题
错误信息里no permissions for [ ]说明Opendistro Security没有识别到你的操作对应的权限,或者admin角色缺少该权限:
验证admin角色的权限
登录Kibana的Opendistro Security插件,进入Security > Roles > admin,检查是否包含以下权限:- 如果是修改集群默认设置:需要添加集群权限
cluster:admin/settings/update - 如果是修改现有索引设置:需要添加索引权限
indices:admin/settings/update(索引模式选*或你目标的索引模式)
很多情况下,Opendistro默认的admin角色可能没有包含这些细粒度的设置修改权限,需要手动添加。
- 如果是修改集群默认设置:需要添加集群权限
租户头的影响
securitytenant头是针对索引级操作的(比如访问租户下的索引),而集群级操作(/_settings)不需要指定租户。如果你要修改Private租户下的特定索引,应该明确指定索引前缀(通常私有租户的索引会带private-前缀):curl -XPUT 'localhost:9200/private-*/_settings' -H 'Content-Type: application/json' -H 'securitytenant: Private' -u admin --insecure -d '{ "index" : { "number_of_replicas" : 0 } }'
测试验证
调整命令或权限后,重新执行命令,应该就能成功修改副本数了。如果还是报错,可以用_security/_privileges API检查admin用户的有效权限:
curl -XGET 'localhost:9200/_security/_privileges?username=admin' -u admin --insecure
内容的提问来源于stack exchange,提问作者pioupiou
相关产品推荐
相关产品推荐

