elasticsearch7.8許可權控制和規劃

一寸HUI發表於2021-02-04

由於在版本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": "jacknich@example.com",
  "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開頭的全部索引許可權,還有叢集的讀許可權

建議大家多去看官網,畢竟那裡才是更全更詳細的,寫部落格很難面面俱到,只能說僅供參考

相關文章