這兩天,你將學到如何確保 Elasticsearch 的安全性。
本篇的主題包含有:
那我們就開始吧!
為了防止對你的 ES 做未經授權的存取,我們必須要有一種方式來授權使用者,然而,單單只是驗證使用者可不可以用這樣,在實務上往往是不夠的,我們還會需要更進一步地去控制什麼資料使用者可以存取,以及什麼任務使用者可以執行。
ES 安全功能讓你可以:
舉個例子如上圖:
安全功能提供了基於 角色(Role) 的訪問控制(RBAC)機制。使用者可以訪問包含不同權限的多個角色。每個權限設定是針對受保護資源的一組特權。
下圖簡單描繪了 RBAC 的意義:
User
(使用者):經過授權的使用者Role
(角色):一組命名的權限Permission
(權限):針對受保護資源的一組特權Privilege
(特權):一群命名的行為,使用者可以針對受保護的資源執行Secured Resource
(受保護的資源):一個存取權限受限制的資源,例如索引、文件、欄位、ES cluster...等等,都可以是保護的物件Elastic Stack 安全功能提供了一些內建使用者,這些資訊儲存在 .security
的索引中並由 Elasticsearch 管理。
這些內建使用者有著固定的一組角色,在使用他們之前你必須要先設置好他們的密碼,下表是所有內建的使用者:
使用者名稱 | 說明 |
---|---|
elastic |
超級使用者,有完整存取 cluster 的權限 |
kibana |
被 Kibana 使用的使用者,用於 Kibana 和 ES 的溝通 |
logstash_system |
被 Logstash 使用的使用者,用於 Logstash 儲存監控資訊進 ES |
beats_system |
被不同 Beats 使用的使用者,用於 Beats 儲存監控資訊進 ES |
apm_system |
被 APM server 使用的使用者,用於 APM server 儲存監控資訊進 ES |
remote_monitoring_user |
被 Metricbeat 使用的使用者,用於 Metricbeat 收集和儲存監控資訊進 ES |
除了內建使用者之外,當然也會有自定義的使用者,同樣地,這類型的使用者我們也可以指定內建的角色給他們歐!
關於內建角色的權限資訊,更詳細的可以參考這裡:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/built-in-roles.html
授權使用者的方式有許多方法,這邊我們來講兩個內建的方式(使用者帳號密碼的資訊,會儲存在 .security
索引中):
我們可以管理所有的使用者透過 Security API,所有 Security API 的請求皆是安全的 HTTP 請求,透過這個 API 我們可以做到:
下面是一個 POST 請求新增一位 gg30day
使用者的範例:
POST /_security/user/gg30day
{
"password" : "iloveiThelpironman2020",
"roles" : [ "es_cloud"],
"full_name" : "GG 30 Day",
"email" : "ironman2020@gg30day.com",
"metadata" : {
"hometown" : "鐵人賽大家加油!快要到終點了!"
}
}
在 Kibana 上我們也可以達到和 Security API 相同的操作效果,這部分我們就留到明天的實作篇,來實際操作一遍給大家看看吧!
安全性真的是一個系統不可或缺的一環!隨著學習的內容一步一步的往前,更可以了解到要建構一套完善的服務需要考慮的點確實不少~
今天我們學到在 Elastic Stack 中,安全性的概念與做法,明天我們就來實際操作看看吧!