You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenSearch只读用户无法获取有权限索引列表问题排查

问题分析与解决方案

一、配置误解或遗漏排查

  1. do_not_fail_on_forbidden配置未正确加载
    仅修改opensearch-security/config.yml并构建镜像不足以让配置生效,必须通过securityadmin.sh工具将配置推送至OpenSearch集群。Docker环境下需确保容器启动时执行配置初始化步骤,比如在启动脚本中加入:

    ./plugins/opensearch-security/tools/securityadmin.sh -cd /usr/share/opensearch/config/opensearch-security/ -icl -nhnv -cacert /usr/share/opensearch/config/root-ca.pem -cert /usr/share/opensearch/config/admin-cert.pem -key /usr/share/opensearch/config/admin-key.pem
    

    若未执行此步骤,集群仍使用旧配置,do_not_fail_on_forbidden不会生效,导致GET _all返回403。

  2. 配置节点位置错误
    do_not_fail_on_forbidden和do_not_fail_on_forbidden_empty需放在config.yml的opensearch_security.dynamic节点下,正确配置格式应为:

    opensearch_security:
      dynamic:
        do_not_fail_on_forbidden: true
        do_not_fail_on_forbidden_empty: true
        # 其他配置项...
    

    若放置位置错误(如根节点),配置不会被Security插件识别。

  3. 角色权限冲突
    检查ROLE_RO是否继承了拒绝访问_all的角色,或存在集群层面的权限限制。确保角色仅包含test-read*索引的read和indices:admin/get权限,无额外拒绝规则。

二、验证do_not_fail_on_forbidden生效的方法

  1. 直接请求验证
    使用USER_RO执行GET _cat/indices?v,若配置生效,将仅返回test-read*前缀的索引列表,无403错误;若仍返回403,说明配置未生效。

  2. 查看集群生效配置
    使用管理员用户执行:

    curl -XGET -u admin:admin_password https://<opensearch-host>:9200/_plugins/_security/api/config
    

    检查返回结果中是否包含"do_not_fail_on_forbidden": true,确认配置已加载至集群。

  3. 日志排查
    查看OpenSearch容器日志(路径通常为/usr/share/opensearch/logs/opensearch.log),搜索关键词do_not_fail_on_forbidden,若出现Loaded dynamic config: do_not_fail_on_forbidden=true类日志,说明配置已生效;若搜索到forbidden相关报错,可进一步定位权限拦截原因。

三、其他实现方式

  1. 直接指定索引前缀请求
    让用户直接执行GET test-read*或GET _cat/indices/test-read*,无需依赖_all,这是最直接且符合需求的方式,避免复杂的权限配置问题。

  2. 使用索引别名
    创建包含所有test-read*索引的别名:

    curl -XPOST -u admin:admin_password https://<opensearch-host>:9200/_aliases -d '
    {
      "actions": [
        { "add": { "index": "test-read*", "alias": "test-read-alias" } }
      ]
    }' -H "Content-Type: application/json"
    

    赋予ROLE_RO对test-read-alias的read和indices:admin/get权限,用户只需请求GET test-read-alias即可获取所有目标索引的信息。

  3. 调整角色权限范围(谨慎使用)
    若必须使用_all,可给ROLE_RO添加indices:admin/get权限至_all索引,但需注意:此配置仅允许用户查看所有索引的元数据(如名称),无法访问无read权限的索引内容,需根据业务需求评估是否适用。

内容的提问来源于stack exchange,提问作者buddemat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 10:32:41