当您需要设置集群、索引、字段或其他操作的访问权限时,可以通过Elasticsearch X-Pack的RBAC(Role-based Access Control)机制,为自定义角色分配权限,并将角色分配给用户,实现权限管控。Elasticsearch提供了多种内置角色,您可以在内置角色的基础上扩展自定义角色,以满足特定需求。本文介绍几种常见的角色配置,以及如何通过角色配置实现权限管控。

背景信息

操作步骤

说明 本文操作以Elasticsearch 6.7.0版本为例,其他版本操作可能略有不同,具体以实际界面为准。
  1. 创建角色。
    1. 登录Kibana控制台。
      具体步骤,请参见登录Kibana控制台
    2. 在左侧导航栏,单击Management
    3. Security区域,单击Roles
    4. 单击Create role,然后输入相关参数配置。
      填写角色信息
      参数 说明
      Role name 角色名称。
      Cluster privileges 定义集群的操作权限,例如查看集群健康度和Settings、创建快照等。详细信息,请参见Cluster privileges
      Run As privileges 扮演该角色的用户,可选。如果此处未选择,可在创建用户时,为该用户指定对应角色,具体操作,请参见创建用户
      Index privileges 定义索引的操作权限,例如只读查看所有索引的所有字段(索引名设置为*后,授予read索引),索引名支持通配符(*)及正则表达式。详细信息,请参见Indices privileges。配置时,需要填写以下参数:
      • Indices:选择对应的索引模式。例如heartbeat-*。
        说明 如果没有索引模式,请先在Management页面,单击Kibana中的Index Pattern,按照页面提示创建一个索引模式。
      • Privileges:为角色分配的权限。
      • Granted fields (optional):授权的字段,可选。
      Kibana privileges 定义Kibana操作权限。
      注意 Kibana 7.0以下版本仅支持Base privileges,默认为所有空间授权;7.0及以上版本在Base privileges的基础上,还支持Feature privileges。即对Kibana特定功能授权,需要指定Kibana空间。
      创建角色时,需要为该角色分配对应权限。本文的角色权限配置示例如下:
      • 为普通用户授予指定索引的只读(Read)权限。设置用户仅能访问指定索引,不能进行其他操作。

        详细信息,请参见配置索引只读权限

      • 为普通用户授予查看所有或部分Dashboard的权限。

        详细信息,请参见配置Dashboard操作权限

      • 为普通用户授予部分索引的读写权限,及所有集群的只读权限。例如查看集群健康度、快照及Settings,写入索引数据和更新索引Mapping等。

        详细信息,请参见配置索引读写和集群只读权限

    5. 单击Create role
  2. 创建用户,并为该用户分配对应角色,为其授予该角色拥有的权限。
    1. 在Kibana控制台的左侧导航栏,单击Management
    2. Security区域,单击Users
    3. 单击Create new user,然后输入相关参数配置。
      Create new user
      参数 说明
      Username 用户名称,用来登录Kibana控制台。自定义输入。
      Password 该用户的密码,用来登录Kibana控制台。自定义输入。
      Confirm password 确认密码,与Password保持一致。
      Full name 用户全名,自定义输入。
      Email address 用户的Email地址。
      Roles 为用户分配角色。选择已创建的角色,或系统预置的角色,可选择多个。
      注意创建角色时,如果已选择了对应用户,此处依然需要选择角色,否则登录时会报错。
    4. 单击Create user
  3. 通过自定义用户登录Kibana控制台,执行相关操作验证权限是否生效。

配置索引只读权限

  • 场景描述

    为普通用户授予指定索引的只读权限。该用户可通过Kibana查询索引数据,但无权访问集群。

  • 角色配置索引只读权限
    表 1. 权限说明
    权限类型 权限Key 权限Value 描述
    Index privileges indices kibana_sample_data_logs 指定索引名称,支持索引全名、别名、通配符及正则表达式。详细信息,请参见Indices Privileges
    privileges read 设置索引只读权限。只读权限包括count、explain、get、mget、scripts、search、scroll等操作权限。详细信息,请参见privileges-list-indices
    Granted fields (optional) * 索引字段。*表示索引的所有字段。
    Kibana privileges privileges read 为所有空间授予Kibana只读权限。默认为none,表示所有空间无权限访问Kibana。
    注意 Kibana 7.0以下版本仅支持Base privileges,默认为所有空间授权;7.0及以上版本在Base privileges的基础上,还支持Feature privileges。即对Kibana特定功能授权,需要指定Kibana空间。
  • 验证
    通过普通用户登录Kibana控制台,执行读索引命令,返回结果正常。执行写索引命令,返回未授权的错误信息。
    GET /kibana_sample_data_logs/_search
    POST /kibana_sample_data_logs/_doc/1
    {
        "productName": "testpro",
        "annual_rate": "3.22%",
        "describe": "testpro"
    }
    验证只读权限

配置Dashboard操作权限

  • 场景描述

    授予普通用户指定索引的只读权限,且可查看该索引对应的Dashboard数据。

  • 角色配置

    创建用户时,为该用户分配角色:read-indexkibana_dashboard_only_user

    Dashboard角色配置
    • read-index:自定义角色示例,需要您自行创建。该角色拥有指定索引的只读权限。
    • kibana_dashboard_only_user:Kibana内置角色,该角色拥有查看指定索引Dashboard数据的权限。
      注意
      • 在Kibana 7.0及以上版本中,kibana_dashboard_only_user角色已经被废弃。如果要查看指定索引的Dashboard,只需要为该索引配置读权限,详细信息,请参见配置索引只读权限
      • kibana_dashboard_only_user角色与自定义角色配合使用可应用于很多场景。如果您仅需为自定义角色设定Dashboards only roles功能,可在Management页面的Kibana区域,单击Advanced Settings,找到Dashboard部分,绑定自定义角色(默认是kibana_dashboard_only_user角色)。
  • 验证
    通过普通用户登录Kibana控制台,可查看对应索引的Dashboard大盘。查看Dashboard大盘

配置索引读写和集群只读权限

  • 场景描述

    为普通用户授予指定索引的读、写和删除权限,以及集群和Kibana的只读权限。

  • 角色配置索引读写和集群只读权限
    表 2. 权限说明
    权限类型 权限Key 权限Value 描述
    Cluster privileges cluster monitor 集群只读权限。例如查看集群的健康度、状态、热线程、节点信息、阻塞的任务等。
    Index privileges indices heartbeat-*,library* 指定索引名称,支持索引全名、别名、通配符及正则表达式。详细信息,请参见roles-indices-priv
    privileges read 设置索引只读权限。只读权限包括count、explain、get、mget、scripts、search、scroll等操作权限。详细信息,请参见privileges-list-indices
    create_index 创建索引权限。如果在创建索引时,定义了索引别名,还需要授予索引manage权限。
    注意 索引别名需要同时满足indices下定义的匹配规则。
    view_index_metadata 索引元数据的只读权限,包括aliases、aliases exists、get index、exists、field mappings、mappings、search shards、type exists、validate、warmers、settings和ilm。
    write 对文档执行所有写操作的权限,包括index、update、delete、bulk和更新mapping操作。与create和index权限相比,该权限的覆盖面更大。
    monitor 监控所有操作的权限,包括index recovery、segments info、index stats和status。
    delete 删除索引文档权限。
    delete_index 删除索引权限。
    granted fields * 待授权的索引字段,*表示索引的所有字段。
    Kibana privileges privileges read 为所有空间授予Kibana只读权限。默认为none,表示所有空间无权限访问Kibana。
    注意 Kibana 7.0以下版本仅支持Base privileges,默认为所有空间授权;7.0及以上版本在Base privileges的基础上,还支持Feature privileges。即对Kibana特定功能授权,需要指定Kibana空间。
  • 验证
    通过普通用户登录Kibana控制台,执行如下命令均正常。验证
    • 查看集群中所包含索引的详细信息
      GET /_cat/indices?v
    • 查看集群状态
      GET /_cluster/stats
    • 查询product_info索引中的数据
      GET /product_info/_search
    • 查询product_info1索引中的数据
      GET /product_info1/_search
    • 通过POST方式,向kibana_sample_data_logs索引中写入数据
      POST /kibana_sample_data_logs/_doc/2
      {
          "productName": "testpro",
          "annual_rate": "3.22%",
          "describe": "testpro"
      }
    • 通过PUT方式,向product_info2索引中写入数据
      PUT /product_info2/_doc/1
      {
          "productName": "testpro",
          "annual_rate": "3.22%",
          "describe": "testpro"
      }
    • 删除product_info索引
      DELETE product_info