由於在版本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
- ./bin/elasticsearch-certutil ca #創建集羣認證機構,需要交互輸入密碼
- ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 #爲節點頒發證書,與上面密碼一樣
- 執行./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password 並輸入第一步輸入的密碼
- 執行./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password 並輸入第一步輸入的密碼
- 將生成的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開頭的全部索引權限,還有集羣的讀權限 |
建議大家多去看官網,畢竟那裏纔是更全更詳細的,寫博客很難面面俱到,只能說僅供參考