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

背景信息

操作步骤

说明 本文仅提供6.7版本和7.x版本的操作步骤,其他版本操作可能略有不同,具体以实际界面为准。
  1. 创建角色。
    1. 登录Kibana控制台,根据提示进入Kibana主页。
      具体步骤,请参见登录Kibana控制台
    2. 进入配置管理页面。
      • 6.7版本:在左侧导航栏,单击Management
      • 7.x版本:在页面左上角,单击展开图标图标,然后选择Management > Stack 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空间。
      创建角色时,需要为该角色分配对应权限。本文的角色权限配置示例如下:
    5. 单击Create role
  2. 创建用户,并为该用户分配对应角色,为其授予该角色拥有的权限。
    1. 进入配置管理页面。
      • 6.7版本:在左侧导航栏,单击Management
      • 7.x版本:在页面左上角,单击展开图标图标,然后选择Management > Stack 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 privilegesindiceskibana_sample_data_logs指定索引名称,支持索引全名、别名、通配符及正则表达式。详细信息,请参见Indices Privileges
privilegesread设置索引只读权限。只读权限包括count、explain、get、mget、scripts、search、scroll等操作权限。详细信息,请参见privileges-list-indices
Granted fields (optional)*索引字段。*表示索引的所有字段。
Kibana privilegesprivilegesread为所有空间授予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_userDashboard角色配置
  • 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 privilegescluster monitor集群只读权限。例如查看集群的健康度、状态、热线程、节点信息、阻塞的任务等。
Index privilegesindicesheartbeat-*,library*指定索引名称,支持索引全名、别名、通配符及正则表达式。详细信息,请参见roles-indices-priv
privilegesread设置索引只读权限。只读权限包括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 privilegesprivilegesread为所有空间授予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

配置Discover Read索引数据权限

场景描述

为普通用户授予Kibana Discover的只读和索引只读权限,该用户可以进入Kibana的Discover页面查看该索引的数据。

角色配置

Discover Read权限配置
表 3. 权限说明
权限类型权限Key权限Value描述
Cluster privilegesPrivilegesmonitor授予所有集群的只读操作权限,例如集群健康和状态、热线程、节点信息、节点和集群统计信息以及待处理的集群任务。
Index privilegesIndiceskibana_sample_data_ecommerce指定索引名称,支持索引全名、别名、通配符及正则表达式。详细信息,请参见Indices Privileges
Privilegesread设置索引只读权限。只读权限包括count、explain、get、mget、scripts、search、scroll等操作权限。详细信息,请参见privileges-list-indices
Granted fields (optional)*索引字段。*表示索引的所有字段。
Kibana privilegesPrivilegesread为所有空间授予Kibana只读权限。默认为none,表示所有空间无权限访问Kibana。
重要 Kibana 7.0以下版本仅支持Base privileges,默认为所有空间授权;7.0及以上版本在Base privileges的基础上,还支持Feature privileges,即对Kibana特定功能授权,需要指定Kibana空间,例如授予Discover页面的只读权限。

验证

通过普通用户登录Kibana控制台,可通过Discover页面查看指定索引的数据。查看Discover页面

配置创建删除索引、增删改查文档以及修改索引配置的权限

场景描述

为普通用户授予创建删除索引的权限、增删改查文档的权限以及修改索引配置的权限,同时禁止用户登录Kibana控制台。

角色配置

角色配置
表 4. 权限说明
权限类型权限Key权限Value描述
Index privilegesIndicestest*指定索引名称,支持索引全名、别名、通配符及正则表达式。详细信息,请参见Indices Privileges
Privilegescreate_index创建索引的权限。如果创建索引请求中包含添加到索引的别名,则需要同时授予manage权限。
delete_index删除索引的权限。
index索引和更新文档的权限,以及更新索引mappings的权限。
delete删除文档的权限。
read索引只读权限。只读权限包括count、explain、get、mget、scripts、search、scroll等操作权限。详细信息,请参见privileges-list-indices
manage索引管理权限。管理权限包括aliases、analyze、cache clear、close、delete,、exists、flush、mapping、open、force merge、refresh、settings、search shards、templates、validate等操作权限。
Granted fields (optional)*索引字段。*表示索引的所有字段。
Kibana privilegesPrivilegesnone设置为none(默认),表示所有空间无权限访问Kibana。
重要 Kibana 7.0以下版本仅支持Base privileges,默认为所有空间授权;7.0及以上版本在Base privileges的基础上,还支持Feature privileges,即对Kibana特定功能授权,需要指定Kibana空间。

验证

  • 通过curl命令访问实例,创建索引然后删除。创建与删除索引
  • 修改索引配置,本示例将索引数据设置为冷数据。修改索引配置
  • 对文档进行增删改查。文档增删改查
  • 用户登录Kibana控制台。
    提示用户无权限。登录Kibana控制台