当您需要设置集群、索引、字段或其他操作的访问权限时,可以通过Elasticsearch X-Pack的RBAC(Role-based Access Control)机制,为自定义角色分配权限,并将角色分配给用户,实现权限管控。Elasticsearch提供了多种内置角色,您可以在内置角色的基础上扩展自定义角色,以满足特定需求。本文介绍几种常见的角色配置,以及如何通过角色配置实现权限管控。
背景信息
- Elasticsearch支持X-Pack RBAC机制。详细信息,请参见User authorization。
- Elasticsearch支持多种安全认证功能。详细信息,请参见Elasticsearch身份认证和授权。
操作步骤
说明 本文操作以Elasticsearch 6.7.0版本为例,其他版本操作可能略有不同,具体以实际界面为准。
- 创建角色。
- 创建用户,并为该用户分配对应角色,为其授予该角色拥有的权限。
- 通过自定义用户登录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-index和kibana_dashboard_only_user。
- 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大盘。
配置索引读写和集群只读权限
- 场景描述
为普通用户授予指定索引的读、写和删除权限,以及集群和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
- 查看集群中所包含索引的详细信息