當(dāng)您需要設(shè)置集群、索引、字段或其他操作的訪問權(quán)限時(shí),可以通過Elasticsearch X-Pack的RBAC(Role-based Access Control)機(jī)制,為自定義角色分配權(quán)限,并將角色分配給用戶,實(shí)現(xiàn)權(quán)限管控。Elasticsearch提供了多種內(nèi)置角色,您可以在內(nèi)置角色的基礎(chǔ)上擴(kuò)展自定義角色,以滿足特定需求。本文介紹幾種常見的角色配置,以及如何通過角色配置實(shí)現(xiàn)權(quán)限管控。
背景信息
- Elasticsearch支持X-Pack RBAC機(jī)制。詳細(xì)信息,請(qǐng)參見User authorization。
- Elasticsearch支持多種安全認(rèn)證功能。詳細(xì)信息,請(qǐng)參見Elasticsearch身份認(rèn)證和授權(quán)。
操作步驟
說明 本文僅提供6.7版本和7.x版本的操作步驟,其他版本操作可能略有不同,具體以實(shí)際界面為準(zhǔn)。
- 創(chuàng)建角色。
- 創(chuàng)建用戶,并為該用戶分配對(duì)應(yīng)角色,為其授予該角色擁有的權(quán)限。
- 通過自定義用戶登錄Kibana控制臺(tái),執(zhí)行相關(guān)操作驗(yàn)證權(quán)限是否生效。
配置索引只讀權(quán)限
場(chǎng)景描述
為普通用戶授予指定索引的只讀權(quán)限。該用戶可通過Kibana查詢索引數(shù)據(jù),但無權(quán)訪問集群。
角色配置
權(quán)限類型 | 權(quán)限Key | 權(quán)限Value | 描述 |
---|---|---|---|
Index privileges | indices | kibana_sample_data_logs | 指定索引名稱,支持索引全名、別名、通配符及正則表達(dá)式。詳細(xì)信息,請(qǐng)參見Indices Privileges。 |
privileges | read | 設(shè)置索引只讀權(quán)限。只讀權(quán)限包括count、explain、get、mget、scripts、search、scroll等操作權(quán)限。詳細(xì)信息,請(qǐng)參見privileges-list-indices。 | |
Granted fields (optional) | * | 索引字段。*表示索引的所有字段。 | |
Kibana privileges | privileges | read | 為所有空間授予Kibana只讀權(quán)限。默認(rèn)為none,表示所有空間無權(quán)限訪問Kibana。 重要 Kibana 7.0以下版本僅支持Base privileges,默認(rèn)為所有空間授權(quán);7.0及以上版本在Base privileges的基礎(chǔ)上,還支持Feature privileges,即對(duì)Kibana特定功能授權(quán),需要指定Kibana空間。 |
驗(yàn)證
- 通過普通用戶登錄Kibana控制臺(tái),執(zhí)行讀索引命令,返回結(jié)果正常。
GET /kibana_sample_data_logs/_search
- 執(zhí)行寫索引命令,返回未授權(quán)的錯(cuò)誤信息。
POST /kibana_sample_data_logs/_doc/1 { "productName": "testpro", "annual_rate": "3.22%", "describe": "testpro" }
配置Dashboard操作權(quán)限
場(chǎng)景描述
授予普通用戶指定索引的只讀權(quán)限,且可查看該索引對(duì)應(yīng)的Dashboard數(shù)據(jù)。
角色配置
在創(chuàng)建用戶時(shí),為該用戶分配角色:read-index和kibana_dashboard_only_user。
- read-index:自定義角色示例,需要您自行創(chuàng)建。該角色擁有指定索引的只讀權(quán)限。
- kibana_dashboard_only_user:Kibana內(nèi)置角色,該角色擁有查看指定索引Dashboard數(shù)據(jù)的權(quán)限。說明
- 在Kibana 7.0及以上版本中,kibana_dashboard_only_user角色已經(jīng)被廢棄。如果要查看指定索引的Dashboard,只需要為該索引配置讀權(quán)限,詳細(xì)信息,請(qǐng)參見配置索引只讀權(quán)限。
- kibana_dashboard_only_user角色與自定義角色配合使用可應(yīng)用于很多場(chǎng)景。如果您僅需為自定義角色設(shè)定Dashboards only roles功能,可在Management頁面的Kibana區(qū)域,單擊Advanced Settings,找到Dashboard部分,綁定自定義角色(默認(rèn)是kibana_dashboard_only_user角色)。
驗(yàn)證
通過普通用戶登錄Kibana控制臺(tái),可查看對(duì)應(yīng)索引的Dashboard大盤。
配置索引讀寫和集群只讀權(quán)限
場(chǎng)景描述
為普通用戶授予指定索引的讀、寫和刪除權(quán)限,以及集群和Kibana的只讀權(quán)限。
角色配置
權(quán)限類型 | 權(quán)限Key | 權(quán)限Value | 描述 |
---|---|---|---|
Cluster privileges | cluster | monitor | 集群只讀權(quán)限。例如查看集群的健康度、狀態(tài)、熱線程、節(jié)點(diǎn)信息、阻塞的任務(wù)等。 |
Index privileges | indices | heartbeat-*,library* | 指定索引名稱,支持索引全名、別名、通配符及正則表達(dá)式。詳細(xì)信息,請(qǐng)參見roles-indices-priv。 |
privileges | read | 設(shè)置索引只讀權(quán)限。只讀權(quán)限包括count、explain、get、mget、scripts、search、scroll等操作權(quán)限。詳細(xì)信息,請(qǐng)參見privileges-list-indices。 | |
create_index | 創(chuàng)建索引權(quán)限。如果在創(chuàng)建索引時(shí),定義了索引別名,還需要授予索引manage權(quán)限。 重要 索引別名需要同時(shí)滿足indices下定義的匹配規(guī)則。 | ||
view_index_metadata | 索引元數(shù)據(jù)的只讀權(quán)限,包括aliases、aliases exists、get index、exists、field mappings、mappings、search shards、type exists、validate、warmers、settings和ilm。 | ||
write | 對(duì)文檔執(zhí)行所有寫操作的權(quán)限,包括index、update、delete、bulk和更新mapping操作。與create和index權(quán)限相比,該權(quán)限的覆蓋面更大。 | ||
monitor | 監(jiān)控所有操作的權(quán)限,包括index recovery、segments info、index stats和status。 | ||
delete | 刪除索引文檔權(quán)限。 | ||
delete_index | 刪除索引權(quán)限。 | ||
granted fields | * | 待授權(quán)的索引字段,*表示索引的所有字段。 | |
Kibana privileges | privileges | read | 為所有空間授予Kibana只讀權(quán)限。默認(rèn)為none,表示所有空間無權(quán)限訪問Kibana。 重要 Kibana 7.0以下版本僅支持Base privileges,默認(rèn)為所有空間授權(quán);7.0及以上版本在Base privileges的基礎(chǔ)上,還支持Feature privileges,即對(duì)Kibana特定功能授權(quán),需要指定Kibana空間。 |
驗(yàn)證
通過普通用戶登錄Kibana控制臺(tái),執(zhí)行如下命令均正常。
- 查看集群中所包含索引的詳細(xì)信息
GET /_cat/indices?v
- 查看集群狀態(tài)
GET /_cluster/stats
- 查詢product_info索引中的數(shù)據(jù)
GET /product_info/_search
- 查詢product_info1索引中的數(shù)據(jù)
GET /product_info1/_search
- 通過POST方式,向kibana_sample_data_logs索引中寫入數(shù)據(jù)
POST /kibana_sample_data_logs/_doc/2 { "productName": "testpro", "annual_rate": "3.22%", "describe": "testpro" }
- 通過PUT方式,向product_info2索引中寫入數(shù)據(jù)
PUT /product_info2/_doc/1 { "productName": "testpro", "annual_rate": "3.22%", "describe": "testpro" }
- 刪除product_info索引
DELETE product_info
配置Discover Read索引數(shù)據(jù)權(quán)限
場(chǎng)景描述
為普通用戶授予Kibana Discover的只讀和索引只讀權(quán)限,該用戶可以進(jìn)入Kibana的Discover頁面查看該索引的數(shù)據(jù)。
角色配置
權(quán)限類型 | 權(quán)限Key | 權(quán)限Value | 描述 |
---|---|---|---|
Cluster privileges | Privileges | monitor | 授予所有集群的只讀操作權(quán)限,例如集群健康和狀態(tài)、熱線程、節(jié)點(diǎn)信息、節(jié)點(diǎn)和集群統(tǒng)計(jì)信息以及待處理的集群任務(wù)。 |
Index privileges | Indices | kibana_sample_data_ecommerce | 指定索引名稱,支持索引全名、別名、通配符及正則表達(dá)式。詳細(xì)信息,請(qǐng)參見Indices Privileges。 |
Privileges | read | 設(shè)置索引只讀權(quán)限。只讀權(quán)限包括count、explain、get、mget、scripts、search、scroll等操作權(quán)限。詳細(xì)信息,請(qǐng)參見privileges-list-indices。 | |
Granted fields (optional) | * | 索引字段。* 表示索引的所有字段。 | |
Kibana privileges | Privileges | read | 為所有空間授予Kibana只讀權(quán)限。默認(rèn)為none,表示所有空間無權(quán)限訪問Kibana。 重要 Kibana 7.0以下版本僅支持Base privileges,默認(rèn)為所有空間授權(quán);7.0及以上版本在Base privileges的基礎(chǔ)上,還支持Feature privileges,即對(duì)Kibana特定功能授權(quán),需要指定Kibana空間,例如授予Discover頁面的只讀權(quán)限。 |
驗(yàn)證
通過普通用戶登錄Kibana控制臺(tái),可通過Discover頁面查看指定索引的數(shù)據(jù)。
配置創(chuàng)建刪除索引、增刪改查文檔以及修改索引配置的權(quán)限
場(chǎng)景描述
為普通用戶授予創(chuàng)建刪除索引的權(quán)限、增刪改查文檔的權(quán)限以及修改索引配置的權(quán)限,同時(shí)禁止用戶登錄Kibana控制臺(tái)。
角色配置
權(quán)限類型 | 權(quán)限Key | 權(quán)限Value | 描述 |
---|---|---|---|
Index privileges | Indices | test* | 指定索引名稱,支持索引全名、別名、通配符及正則表達(dá)式。詳細(xì)信息,請(qǐng)參見Indices Privileges。 |
Privileges | create_index | 創(chuàng)建索引的權(quán)限。如果創(chuàng)建索引請(qǐng)求中包含添加到索引的別名,則需要同時(shí)授予manage權(quán)限。 | |
delete_index | 刪除索引的權(quán)限。 | ||
index | 索引和更新文檔的權(quán)限,以及更新索引mappings的權(quán)限。 | ||
delete | 刪除文檔的權(quán)限。 | ||
read | 索引只讀權(quán)限。只讀權(quán)限包括count、explain、get、mget、scripts、search、scroll等操作權(quán)限。詳細(xì)信息,請(qǐng)參見privileges-list-indices。 | ||
manage | 索引管理權(quán)限。管理權(quán)限包括aliases、analyze、cache clear、close、delete,、exists、flush、mapping、open、force merge、refresh、settings、search shards、templates、validate等操作權(quán)限。 | ||
Granted fields (optional) | * | 索引字段。* 表示索引的所有字段。 | |
Kibana privileges | Privileges | none | 設(shè)置為none(默認(rèn)),表示所有空間無權(quán)限訪問Kibana。 重要 Kibana 7.0以下版本僅支持Base privileges,默認(rèn)為所有空間授權(quán);7.0及以上版本在Base privileges的基礎(chǔ)上,還支持Feature privileges,即對(duì)Kibana特定功能授權(quán),需要指定Kibana空間。 |
驗(yàn)證
- 通過curl命令訪問實(shí)例,創(chuàng)建索引然后刪除。
- 修改索引配置,本示例將索引數(shù)據(jù)設(shè)置為冷數(shù)據(jù)。
- 對(duì)文檔進(jìn)行增刪改查。
- 用戶登錄Kibana控制臺(tái)。提示用戶無權(quán)限。