這篇文章主要會簡介 Role-Based Access Control (RBAC),因為當沒有任何權限控管時,每個人都可以對 Index 進行讀取和修改,這樣就毫無隱私及安全性可言,所以 Elasticsearch 提供了 Role-Based Access Control (RBAC) 讓管理者進行相關設定。
RBAC 機制中,每個使用者可能會得到很多不同的角色,每個角色擁有不同的層級的權限,角色可以提供選取的權限非常多種,可以參考文件中 security-privileges 的部分。
在我們把機制啟動之後,可以設置相關密碼,Elasticsearch 其實本來就有提供預設的使用者及角色,相關的設定都會存放在特定的 Index 中,主要是讓相關的服務像是 Beats、Kibana 等可以運作,所以接下來就會從預設值開始了解。
Elastic Stack 在安全性方面,提供了一些內建的使用者,會存放在 .security
Index 裡面,想要修改預設的密碼就可以透過這個指令 bin/elasticsearch-setup-passwords interactive
來設定,內建的使用者,看文件看說明也可以在各服務找到對應的 yml (kibana.yml
)去修改。
elasticsearch.username: "kibana_system"
elasticsearch.password: "kibanapassword"
內建的使用者列表與細節如下,剛開始可先用 elastic 測試連線與功能,之後再創一個常用的使用者。
elastic
(超級使用者): 擁有存取全部 cluster 的權限,沒設定的話預設本來就會有預設密碼
kibana_system
(一般使用者): 給 Kibana 服務跟 Elasticsearch 互動用的帳號logstash_system
(一般使用者): Logstash 存資料進 Elasticsearch 用beats_system
(一般使用者): 給不同類型的 beat 儲存或監控 Elasticsearchapm_system
(一般使用者): APM server 使用,儲存或監控 Elasticsearchremote_monitoring_user
(一般使用者): 特別給 Metricbeat 使用,可以蒐集儲存相關需監控的資訊剛開始創建使用者,可能發現權限很多有點難懂,也可以先使用內建的角色去進行相關安排,每個使用者都有一個預設的角色,允許去打 Auth 的 API 還有讀取或修改自己的相關資訊,像是修改密碼等等。
apm_system
: 給跟 APM 系統同等級的權限,可以傳送相關資訊apm_user
: APM 使用者用,像是針對 apm-*
、.ml-anomalies*
有 read
、view_index_metadata
的權限beats_admin
: .management-beat
的控制權,進行相關 Beats 的配置beats_system
: 能傳送系統層級的監控資訊,不適合給使用者data_frame_transforms_admin
: 管理 transforms,包含 kibana 中機器學習模組的權限data_frame_transforms_user
: 使用 transforms,包含 kibana 中機器學習模組的權限ingest_admin
: 可以管理全部的 Index、Pipeline,但不包含創建kibana_dashboard_only_user
: 只能讀取 Dashborad 用kibana_system
: 任何足夠管理 Kibana 的相關權限 .monitoring-*
、.reporting-*
,不適合給使用者kibana_user
: 可以存取所有 Kibana 功能logstash_admin
: .logstash*
的控制權,管理相關配置logstash_system
: Logstash system 層級的相關權限,不適合給使用者machine_learning_admin
: 機器學習相關的控制權machine_learning_user
: 存取機器學習相關最小的權限配置monitoring_user
: 監控 Index 的最小權限配置remote_monitoring_agent
: 寫資料到 .monitoring-*
、metricbeat-*
中的最小權限配置remote_monitoring_collector
: 可以蒐集 Elastic Stack 監控相關資料的最小權限配置reporting_user
: 只能存取自己相關報告的權限snapshot_user
: 讓使用者可以對任何 Index 做快照superuser
: 超級使用者transport_client
: 使用者可以看所有的 metadata、但不能讀資料watcher_admin
: .watches
的控制權watcher_user
: 可以存取 .watches
要進行使用者與角色管理有兩種方式
如下圖箭頭指的三個位置
test-user
並進行相關設定,其實 Kibana GUI 理論上也是打 API 完成設置,所以有可以用就不需要再自己寫一套了?
POST /_security/user/test-user
{
"password" : "test-password",
"roles" : [ "safety_inspector"],
"full_name" : "test test",
"email" : "test@test.com",
"metadata" : {
"hometown" : "test"
}
}