Elasticsearch自定义Action报indices:admin/get/relation未授权错误如何解决
报错原因
X-Pack安全功能开启后,所有未在权限体系中注册的自定义Action都会被默认拦截,即使是elastic超级用户也没有这类未注册Action的访问权限。
解决方案
方法1:配置白名单(适用于ES 7.10及以上版本)
无需修改代码,直接在elasticsearch.yml中添加如下配置,将你的自定义Action加入权限放行列表即可:
xpack.security.authz.actions.allow_list: ["indices:admin/get/relation"]
修改配置后重启ES节点生效。
方法2:注册自定义权限(全版本通用,适合生产环境)
在你的ES插件主类中重写权限扩展方法,将自定义Action注册到ES权限体系中:
@Override public List<PrivilegedAction> getAdditionalPermissions() { // NAME取值必须和自定义Action中定义的名称完全一致 return Collections.singletonList(new PrivilegedAction(RelationAdminGetAction.NAME, ActionPrivilege.Type.ALLOWED)); }
如果需要精细化控制权限,可通过安全API给指定角色分配该Action的访问权限:
PUT _security/role/custom_relation_admin { "indices": [ { "names": ["*"], "privileges": ["manage"] } ], "actions": ["indices:admin/get/relation"] }
将该角色绑定到相应用户后,调用POST _security/refresh刷新权限缓存即可生效。
注意事项
- 需确认自定义Action的
NAME属性值和报错信息中的Action名称完全一致,避免拼写错误导致校验不通过 - 白名单配置方式简单快捷,适合测试场景;权限注册方式更符合ES安全规范,适合正式上线的插件使用
内容的提问来源于stack exchange,提问作者lanicc
相关产品推荐
相关产品推荐

