當您需要設定叢集、索引、欄位或其他動作的存取權限時,可以通過Elasticsearch X-Pack的RBAC(Role-based Access Control)機制,為自訂角色指派許可權,並將角色指派給使用者,實現許可權管控。Elasticsearch提供了多種內建角色,您可以在內建角色的基礎上擴充自訂角色,以滿足特定需求。本文介紹幾種常見的角色配置,以及如何通過角色配置實現許可權管控。
背景資訊
- Elasticsearch支援X-Pack RBAC機制。詳細資料,請參見User authorization。
- Elasticsearch支援多種安全認證功能。詳細資料,請參見Elasticsearch身份認證和授權。
操作步驟
說明 本文僅提供6.7版本和7.x版本的操作步驟,其他版本操作可能略有不同,具體以實際介面為準。
- 建立角色。
- 登入Kibana控制台,根據提示進入Kibana首頁。具體步驟,請參見登入Kibana控制台。
- 進入組態管理頁面。
- 6.7版本:在左側導覽列,單擊Management。
- 7.x版本:在頁面左上方,單擊表徵圖,然後選擇 。
- 在Security地區,單擊Roles。
- 單擊Create role,然後輸入相關參數配置。
參數 說明 Role name 角色名稱。 Cluster privileges 定義叢集的操作許可權,例如查看叢集健康度和Settings、建立快照等。詳細資料,請參見Cluster privileges。 Run As privileges 扮演該角色的使用者,可選。如果此處未選擇,可在建立使用者時,為該使用者指定對應角色。具體操作,請參見建立使用者。 Index privileges 定義索引的操作許可權,例如唯讀查看所有索引的所有欄位(索引名設定為*後,授予read索引),索引名支援萬用字元(*)及Regex。詳細資料,請參見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等。
詳細資料,請參見配置索引讀寫和叢集唯讀許可權。
- 為普通使用者授予Kibana Discover的唯讀和索引唯讀許可權,該使用者可以進入Kibana的Discover頁面查看該索引的資料。
詳細資料,請參見配置Discover Read索引資料許可權。
- 為普通使用者授予建立刪除索引的許可權、增刪改查文檔的許可權以及修改索引配置的許可權,同時禁止使用者登入Kibana控制台。
詳細資料,請參見配置建立刪除索引、增刪改查文檔以及修改索引配置的許可權。
- Indices:選擇對應的索引模式。例如heartbeat-*。
- 單擊Create role。
- 登入Kibana控制台,根據提示進入Kibana首頁。
- 建立使用者,並為該使用者指派對應角色,為其授予該角色擁有的許可權。
- 進入組態管理頁面。
- 6.7版本:在左側導覽列,單擊Management。
- 7.x版本:在頁面左上方,單擊表徵圖,然後選擇 。
- 在Security地區,單擊Users。
- 單擊Create new user,然後輸入相關參數配置。
參數 說明 Username 使用者名稱稱,用來登入Kibana控制台。自訂輸入。 Password 該使用者的密碼,用來登入Kibana控制台。自訂輸入。 Confirm password 確認密碼,與Password保持一致。 Full name 使用者全名,自訂輸入。 Email address 使用者的Email地址。 Roles 為使用者指派角色。選擇已建立的角色,或系統預置的角色,可選擇多個。 重要 在建立角色時,如果您已選擇了對應使用者,此處依然需要選擇角色,否則登入時會報錯。 - 單擊Create user。
- 進入組態管理頁面。
- 通過自訂使用者登入Kibana控制台,執行相關操作驗證許可權是否生效。
配置索引唯讀許可權
情境描述
為普通使用者授予指定索引的唯讀許可權。該使用者可通過Kibana查詢索引資料,但無權訪問叢集。
角色配置
權限類別型 | 許可權Key | 許可權Value | 描述 |
Index privileges | indices | kibana_sample_data_logs | 指定索引名稱,支援索引全名、別名、萬用字元及Regex。詳細資料,請參見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* | 指定索引名稱,支援索引全名、別名、萬用字元及Regex。詳細資料,請參見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 | 指定索引名稱,支援索引全名、別名、萬用字元及Regex。詳細資料,請參見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* | 指定索引名稱,支援索引全名、別名、萬用字元及Regex。詳細資料,請參見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控制台。提示使用者無許可權。