elasticsearch7.8權限控制和規劃

由於在版本7開始,x-pack可以免費使用了,但是權限控制免費的不夠細,但是控制到索引級別都基本夠用了。付費的可以體驗更細緻的權限控制。本文的基礎是已經有了es集羣的基礎上進行的。

官網:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/secure-cluster.html

一、集羣權限配置

假設你已經安裝了elasticsearch7.8的集羣,並且能夠正常的運行。接下就是來配置權限;

在elasticsearch.yml配置文件中新增(每個節點):

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

然後在一臺節點上運行:

注意:如下操作都統一使用默認的命名:如下內容可參考官網:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/configuring-tls.html

  1. ./bin/elasticsearch-certutil ca #創建集羣認證機構,需要交互輸入密碼
  2. ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 #爲節點頒發證書,與上面密碼一樣
  3. 執行./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password 並輸入第一步輸入的密碼 
  4. 執行./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password 並輸入第一步輸入的密碼 
  5. 將生成的elastic-certificates.p12、elastic-stack-ca.p12文件移動到config目錄下

 最後把elastic-certificates.p12、elastic-stack-ca.p12、elasticsearch.keystore三個文件複製到其他的節點的config目錄下,啓動es。然後去登陸es的時候就需要密碼了。接下設置內置用戶的密碼:

設置內置密碼可參考官網:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/setup-passwords.html  

然後./bin/elasticsearch-setup-passwords interactive 配置默認用戶的密碼:(有如下的交互),可以使用auto自動生成

[test@lgh01 elasticsearch-7.8.1]$ ./bin/elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]yes
Did not understand answer 'yes'
Please confirm that you would like to continue [y/N]y

Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana_system]:
Reenter password for [kibana_system]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]

做完如上的操作就完成了一些特定賬號的密碼設置:比如elastic超級管理員的密碼,這樣就可以對權限進行管理了,到這裏爲止,就可以去通過elastic用戶去登陸es集羣了,elastic用戶時超級用戶,在開發的過程中不建議使用,所以需要自己管理和配置角色和用戶,請繼續看下文

二、用戶和角色管理

權限控制:主要是先把權限賦給角色,該角色就擁有了賦有的權限了,然後指定用戶爲該角色,這樣該用戶也就有了該角色的權限。大概可以理解爲,權限和用戶之間的橋樑就是角色,把不同的權限賦給角色,然後把用戶對應什麼樣子的角色就有該角色的權限。

2.1、Security privileges(權限管理)

可參考官網:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/security-privileges.html

權限這裏分爲集羣的權限和索引的權限,集羣權限有所有的權限,有快照的權限,管理權限,監控權限等。索引權限有創建,刪除,讀,寫等權限。這裏我大概列一些出來,更具體還是查看官網比較合適:

部分集羣權限如下:

集羣權限

描述

all

所有羣集管理操作,例如快照,節點關閉/重新啓動,設置更新,重新路由或管理用戶和角色

create_snapshot

爲現有存儲庫創建快照的特權。也可以列出和查看有關現有存儲庫和快照的詳細信息

manage

建立monitor並添加更改羣集中值的羣集操作。這包括快照,更新設置和重新路由。它還包括獲取快照和還原狀態。此特權不包括管理安全性的能力

monitor

所有羣集只讀操作,例如羣集運行狀況和狀態,熱線程,節點信息,節點和羣集統計信息以及待處理的羣集任務

部分索引權限如下:

all

對索引的任何操作

create

索引文件的權限。還授予對更新映射操作的訪問權限。

delete

刪除文件的權限

create_index

創建索引的權限。創建索引請求可能包含要在創建索引後添加到索引的別名

delete_index

刪除索引的權限

manage

所有monitor特權以及索引管理(別名,分析,緩存清除,關閉,刪除,存在,刷新,映射,打開,強制合併,刷新,設置,搜索分片,模板,驗證)

monitor

監視所需的所有操作(恢復,段信息,索引統計信息和狀態)

read

對後面這些操作只讀訪問(計數,解釋,獲取,管理,獲取索引腳本,諸如此類,多過濾/搜索/術語向量,過濾,滾動,clear_scroll,搜索)

write

具有對文檔執行所有寫操作的特權,包括對文檔進行索引,更新和刪除以及執行批量操作的權限。還授予對更新映射操作的訪問權限。

2.2、role(角色)介紹和操作

elasticsearch7內置了很多角色,可以查看官網:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/built-in-roles.html

但是很多內置角色都不是我們想要的,每個公司的需求都是不一樣,如果集羣很小,則可以簡單控制權限就可以,如果集羣大,用戶多,則需要比較細粒度的控制權限,所以我們要根據自己的需求定義自己的所要的角色 。角色的配置有兩種方式,一種是界面的操作(kibana方式),這樣就傻瓜式的操作,很簡單。還有就是通過API的方式控制權限,這樣的話需要花點時間熟悉下,操作相對來說複雜點,但是不需要額外的kibana。這裏兩種方式都簡單介紹下。

方式一(kibana方式):

1、登錄kibana

2、點擊role

 

 

 

 3、點擊新建

 

 

 4、配置權限

 

  到這裏爲止通過kibana方式配置role的步驟就完了,很簡單的,下面介紹API的方式

 

方式二(API)

可參考官網:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/security-api-put-role.html

配置語法:

{
  "run_as": [ ... ], 
  "cluster": [ ... ], 
  "global": { ... }, 
  "indices": [ ... ], 
  "applications": [ ... ] 
}

 其實使用基本的配置就可以了,這裏我們只用到cluster和indices這兩種,其他的可參考官網的配置方式,根據需求配置即可。

例如配置一個名爲testb的role,集羣權限爲monitor,索引只有對test-開頭的索引有隻讀權限:

post  _security/role/testb
{
  "cluster": [ "monitor" ],
  "indices": [
    {
      "names": [ "test-*" ],
      "privileges": [ "read" ]
    }
  ]
}

   

  其實多去試試,也很簡單的。

2.3、user(用戶)介紹和操作

elasticsearch7內置了很多用戶,還記得前面那步設置密碼就是給裏面的內置用戶配置密碼,詳細的內置用戶參考官網:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/built-in-users.html

在日常es開發中,內置用戶基本不使用,所以主要自定義用戶,自定義用戶也同樣有兩種方式,同樣是kibana和API方式,這兩種方式也很簡單。

方式一(kibana方式)

1、登錄kibana,點擊users,然後點擊新建

   2、配置用戶的基本信息和指定配置的角色

  傻瓜式的操作,是真的很簡單,不過還是要熟悉裏面的role到底有什麼樣子的權限

方式二(API方式)

詳情可參考官網:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/security-api-put-user.html

put _security/user/tony
{
  "password": "j@rV1s",
  "roles": [
    "test1"
  ],
  "full_name": "tony",
  "email": "[email protected]",
  "metadata": {
    "intelligence": 7
  }
}

 

 

 到這裏,role和user的基本創建就介紹完了,如果想知道更多role和user相關的操作請見官網:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/security-api.html

 三、簡單權限規劃

話說知道了集羣權限配置、role和user的基本用法,那如何根據需求控制權限呢?這些都是根據實際情況確定的,因爲用戶配置有很多,也支持ldap,這裏只是用了最簡單的方式,若想超級細粒度或者ldap方式或者其他方式對權限進行控制,最好去研究下官網,本文說的很簡單,只是對基本的權限的控制。設計都是基於現有的業務場景或者用戶的數量,或者是集羣的規模確定權限是否細粒度。所以這裏僅提供下個人的思考。

背景:這裏是一個比較小的集羣,10+個數據節點,用戶數量很少,也沒有多種業務,一個集羣就一種,所以控制起來也很簡單,這裏對索引做了一個強制的命名規範:{開頭:固定的寫方}-{業務種類}-{業務名稱}-{版本},這些都可以體現在權限控制裏面。

根據如上情況,相關角色規劃如下:

 

角色

描述

超級管理員角色(superuser)

集羣索引全部權限

索引管理角色(indexrole)

只負責test開頭的索引全部權限,還有集羣的讀權限

讀寫角色(writerole)

只有讀寫test開頭的全部索引權限,還有集羣的讀權限

只讀角色(readrole)

只讀test開頭的全部索引權限,還有集羣的讀權限

備份角色(snapshotrole)

負責所有索引的快照創建,進行備份

相關用戶規劃如下:

用戶

角色

描述

elastic

superuser

超級管理員:正常情況下不允許使用

snapshot

snapshotrole

負責所有索引的快照備份

es_index

indexrole

只負責test開頭的索引全部權限,還有集羣的讀權限

es_write

writerole

只有讀寫test開頭的全部索引權限,還有集羣的讀權限

es_read

readrole

只讀test開頭的全部索引權限,還有集羣的讀權限

建議大家多去看官網,畢竟那裏纔是更全更詳細的,寫博客很難面面俱到,只能說僅供參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章