📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

获取 Easysearch 中的安全角色配置信息。

API 格式 #

GET /_security/role
GET /_security/role/{name}

API 作用 #

该 API 用于检索安全角色的配置信息:

  • GET /_security/role:获取所有角色
  • GET /_security/role/{name}:获取指定角色

API 参数 #

路径参数 #

参数类型是否必填默认值描述
{name}String-要查询的角色名称。如未指定,返回所有角色

查询参数 #

参数类型是否必填默认值描述
nameString所有角色逗号分隔的角色名称列表

请求示例 #

获取所有角色 #

GET /_security/role

获取指定角色 #

GET /_security/role/admin

获取多个角色 #

GET /_security/role?name=admin,user,developer

响应示例 #

获取所有角色响应 #

{
  "admin": {
    "cluster": ["*"],
    "indices": [
      {
        "names": ["*"],
        "privileges": ["*"],
        "query": null,
        "field_security": [],
        "field_mask": []
      }
    ],
    "description": "管理员角色",
    "reserved": false,
    "hidden": false,
    "static": false
  },
  "data_analyst": {
    "cluster": ["cluster:monitor/health"],
    "indices": [
      {
        "names": ["logs-*", "metrics-*"],
        "privileges": ["READ_UT"],
        "query": null,
        "field_security": ["timestamp", "message", "level"],
        "field_mask": []
      }
    ],
    "description": "数据分析师角色",
    "reserved": false,
    "hidden": false,
    "static": false
  },
  "kibana_user": {
    "cluster": ["cluster:monitor/health"],
    "indices": [
      {
        "names": [".kibana*"],
        "privileges": ["ALL"]
      }
    ],
    "description": "Kibana 用户角色",
    "reserved": false,
    "hidden": false,
    "static": false
  }
}

获取指定角色响应 #

{
  "admin": {
    "cluster": ["cluster:monitor*", "cluster:all"],
    "indices": [
      {
        "names": ["sf", "pub"],
        "privileges": ["SECURITY_CRUD"],
        "query": null,
        "field_security": [],
        "field_mask": []
      }
    ],
    "description": "管理员角色",
    "reserved": false,
    "hidden": false,
    "static": false
  }
}

错误响应 - 权限不足 #

403 Forbidden
{
  "error": "Authentication required"
}

错误响应 - 角色不存在(非超级管理员) #

404 Not Found
{
  "status": 404,
  "error": "role 'hidden_role' not found"
}

响应字段说明 #

顶层字段 #

字段类型描述
{role_name}Object以角色名称为键的角色配置对象

角色配置字段 #

字段类型描述
clusterString[]集群级别的权限列表
indicesObject[]索引级别的权限配置数组
descriptionString角色的描述信息
reservedBoolean是否为保留角色(系统角色)
hiddenBoolean是否为隐藏角色
staticBoolean是否为静态角色(不可修改)

indices 数组元素字段 #

字段类型描述
namesString[]索引模式列表
privilegesString[]权限列表
queryString/null文档级安全查询
field_securityString[]可访问的字段列表
field_maskString[]需要隐藏的字段列表

访问控制行为 #

用户类型可见角色
超级管理员所有角色,包括隐藏角色
普通用户仅非隐藏角色
未认证用户返回 403 Forbidden

常见集群权限 #

权限描述
"*"所有权限
"cluster:monitor*"所有集群监控权限
"cluster:monitor/health"监控集群健康状态
"cluster:monitor/nodes/info"获取节点信息
"cluster:all"所有集群权限

常见索引权限 #

权限描述
"*""ALL"所有索引权限
"READ_UT"读取、查看和索引映射
"CRUD_UT"创建、读取、更新、删除
"SECURITY_CRUD"安全相关的 CRUD 操作
"indices:data/read/search"搜索权限

注意事项 #

  1. 需要认证:该 API 需要通过证书进行身份验证
  2. 隐藏角色:只有超级管理员可以查看隐藏角色
  3. 安全索引:使用该 API 前必须初始化 .security 索引
  4. 空结果:如果安全配置未初始化,会返回 500 错误

相关操作 #

  • PUT /_security/role/{name}:创建或更新角色
  • DELETE /_security/role/{name}:删除角色
  • PATCH /_security/role/{name}:部分更新角色
  • GET /_security/user:查询用户信息

实现细节 #

  • 处理器RolesApiAction.java
  • 继承:继承自 PatchableResourceApiActionAbstractApiAction
  • 实际处理:在 AbstractApiAction.handleGet 方法中(第 237-266 行)
  • 配置加载:从安全索引加载角色配置
  • 过滤逻辑:为非超级管理员用户过滤隐藏角色