当您需要设置集群、索引、字段或其他操作的访问权限时,可以通过Elasticsearch X-Pack的RBAC(Role-based Access Control)机制,为自定义角色分配权限,并将角色分配给用户,实现权限管控。Elasticsearch提供了多种内置角色,您可以在内置角色的基础上扩展自定义角色,以满足特定需求。本文介绍几种常见的角色配置,以及如何通过角色配置实现权限管控。
背景信息
- Elasticsearch支持X-Pack RBAC机制。详细信息,请参见User authorization。
- Elasticsearch支持多种安全认证功能。详细信息,请参见Elasticsearch身份认证和授权。
操作步骤
说明 本文仅提供6.7版本和7.x版本的操作步骤,其他版本操作可能略有不同,具体以实际界面为准。
- 创建角色。
- 创建用户,并为该用户分配对应角色,为其授予该角色拥有的权限。
- 通过自定义用户登录Kibana控制台,执行相关操作验证权限是否生效。
配置索引只读权限
场景描述
为普通用户授予指定索引的只读权限。该用户可通过Kibana查询索引数据,但无权访问集群。
角色配置
权限类型 | 权限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的只读权限。
角色配置
权限类型 | 权限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
配置Discover Read索引数据权限
场景描述
为普通用户授予Kibana Discover的只读和索引只读权限,该用户可以进入Kibana的Discover页面查看该索引的数据。
角色配置
权限类型 | 权限Key | 权限Value | 描述 |
---|---|---|---|
Cluster privileges | Privileges | monitor | 授予所有集群的只读操作权限,例如集群健康和状态、热线程、节点信息、节点和集群统计信息以及待处理的集群任务。 |
Index privileges | Indices | kibana_sample_data_ecommerce | 指定索引名称,支持索引全名、别名、通配符及正则表达式。详细信息,请参见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空间,例如授予Discover页面的只读权限。 |
验证
通过普通用户登录Kibana控制台,可通过Discover页面查看指定索引的数据。
配置创建删除索引、增删改查文档以及修改索引配置的权限
场景描述
为普通用户授予创建删除索引的权限、增删改查文档的权限以及修改索引配置的权限,同时禁止用户登录Kibana控制台。
角色配置
权限类型 | 权限Key | 权限Value | 描述 |
---|---|---|---|
Index privileges | Indices | test* | 指定索引名称,支持索引全名、别名、通配符及正则表达式。详细信息,请参见Indices Privileges。 |
Privileges | create_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 privileges | Privileges | none | 设置为none(默认),表示所有空间无权限访问Kibana。 重要 Kibana 7.0以下版本仅支持Base privileges,默认为所有空间授权;7.0及以上版本在Base privileges的基础上,还支持Feature privileges,即对Kibana特定功能授权,需要指定Kibana空间。 |
验证
- 通过curl命令访问实例,创建索引然后删除。
- 修改索引配置,本示例将索引数据设置为冷数据。
- 对文档进行增删改查。
- 用户登录Kibana控制台。提示用户无权限。