
Elastic Stack 是 SIEM 系統市場(實際上,不僅僅是它們)中知名的工具。它可以收集許多不同類型的數據,包括敏感數據和不太敏感的數據。如果對 Elastic Stack 元素本身的存取沒有受到保護,那就不完全正確。預設情況下,所有 Elastic 盒裝元素(Elasticsearch、Logstash、Kibana 和 Beats 收集器)都透過開放協定運作。而在 Kibana 本身中,身份驗證是被禁用的。所有這些互動都可以受到保護,在本文中我們將告訴您如何做到這一點。為了方便起見,我們將敘述分成3個語意區塊:
- 基於角色的資料存取模型
- Elasticsearch 集群內的資料安全
- Elasticsearch 集群外部的資料安全
細節下切。
基於角色的資料存取模型
如果您安裝了 Elasticsearch 但不對其進行任何調整,則所有索引的存取權限都將對所有人開放。嗯,或者那些可以使用 curl 的人。為了避免這種情況,Elasticsearch 有一個基於角色的模型,從基本訂閱等級開始可用(免費)。示意圖如下:

圖片裡有什麼?
- 使用者是任何可以使用憑證登入的人。
- 角色是一組權利。
- 權利是一組特權。
- 權限是指寫入、讀取、刪除等權限。 ()
- 資源是索引、文件、欄位、使用者和其他儲存實體(某些資源的角色模型僅在付費訂閱中可用)。
Elasticsearch 預設有它 ,它們附著於 。一旦啟用安全設置,您就可以立即開始使用它們。
要在 Elasticsearch 設定中啟用安全性,您需要添加到設定檔中(預設情況下這是 elasticsearch/config/elasticsearch.yml) 新行:
xpack.security.enabled: true變更設定檔後,啟動或重新啟動 Elasticsearch 以使變更生效。下一步是為盒子使用者分配密碼。讓我們使用以下命令以互動方式執行此操作:
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,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]y
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
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]
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@node1 ~]$ curl -u elastic 'node1:9200/_cat/nodes?pretty'
Enter host password for user 'elastic':
192.168.0.2 23 46 14 0.28 0.32 0.18 dim * node1
您可以拍拍自己的背部 - Elasticsearch 端的設定已完成。現在是時候設定 Kibana 了。如果您現在運行它,您將會收到錯誤,因此建立金鑰庫非常重要。這是由兩個團隊完成的(用戶 基巴納 以及在 Elasticsearch 中建立密碼步驟中輸入的密碼):
[elastic@node1 ~]$ ./kibana/bin/kibana-keystore add elasticsearch.username
[elastic@node1 ~]$ ./kibana/bin/kibana-keystore add elasticsearch.password如果一切正確,Kibana 將開始詢問登入名稱和密碼。基本訂閱等級提供基於內部使用者的角色為基礎的模型。從 Gold 開始,您可以連接外部身份驗證系統 - LDAP、PKI、Active Directory 和單一登入系統。

對 Elasticsearch 內部物件的存取權限也可以受到限制。但是,要對文件或欄位執行相同操作,您需要付費訂閱(此奢侈功能從白金等級開始)。這些設定可在 Kibana 介面或透過 。您可以透過已經熟悉的 Dev Tools 選單進行檢查:
創建角色
PUT /_security/role/ruslan_i_ludmila_role
{
"cluster": [],
"indices": [
{
"names": [ "ruslan_i_ludmila" ],
"privileges": ["read", "view_index_metadata"]
}
]
}創建用戶
POST /_security/user/pushkin
{
"password" : "nataliaonelove",
"roles" : [ "ruslan_i_ludmila_role", "kibana_user" ],
"full_name" : "Alexander Pushkin",
"email" : "pushkin@lyceum.edu",
"metadata" : {
"hometown" : "Saint-Petersburg"
}
}Elasticsearch 集群內的資料安全
當 Elasticsearch 在叢集中運行時(很常見),叢集內的安全性設定變得很重要。為了確保節點之間的安全通信,Elasticsearch 使用 TLS 協定。為了在它們之間建立安全通信,需要證書。產生PEM格式的憑證和私鑰:
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil ca --pem執行上述指令後,在目錄中 /../elasticsearch 將會出現一個檔案 elastic-stack-ca.zip。在裡面你會發現一個憑證和一個有擴充的私鑰。 資源管理器 и 關鍵 分別。建議將它們放置在所有叢集節點都可以存取的共用資源上。
現在每個節點都需要根據共享目錄中的憑證和私鑰來取得自己的憑證和私鑰。執行命令時,會要求設定密碼。可以新增附加選項 --ip 和 --dns 來完全驗證通訊節點。
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.key執行該命令後,我們將收到一個受密碼保護的 PKCS#12 格式的憑證和私鑰。剩下的就是移動產生的文件 p12 到配置目錄:
[elastic@node1 ~]$ mv elasticsearch/elastic-certificates.p12 elasticsearch/config讓我們以以下格式為憑證新增密碼 p12 在每個節點上的金鑰庫和信任庫中:
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password在已知的 elasticsearch.yml 仍需新增包含證書資料的行:
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啟動所有 Elasticsearch 節點並執行 捲曲。如果一切操作正確,將會傳回包含多個節點的回應:
[elastic@node1 ~]$ curl node1:9200/_cat/nodes -u elastic:password
172.18.0.3 43 75 4 0.00 0.05 0.05 dim * node2
172.18.0.4 21 75 3 0.00 0.05 0.05 dim - node3
172.18.0.2 39 75 4 0.00 0.05 0.05 dim - node1還有另一個安全選項 - IP 位址過濾(黃金等級訂閱中可用)。允許您建立允許存取節點的 IP 位址白名單。
Elasticsearch 集群外部的資料安全
叢集外部意味著連接外部工具:Kibana、Logstash、Beats 或其他外部客戶端。

若要設定 https 支援(而非 http),請在 elasticsearch.yml 中新增一行:
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: elastic-certificates.p12
xpack.security.http.ssl.truststore.path: elastic-certificates.p12由於憑證受密碼保護,因此我們將其新增至每個節點上的金鑰庫和信任庫:
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.http.ssl.truststore.secure_password新增金鑰後,Elasticsearch 節點即可透過 https 連線。現在可以啟動它們了。
下一步是建立一個連接到 Kibana 的金鑰並將其新增至組態。基於共享目錄中已經存在的證書,我們將產生 PEM 格式的證書(PKCS#12 Kibana、Logstash 和 Beats 尚不支援):
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.key --pem剩下的就是將創建的密鑰解壓縮到包含 Kibana 配置的資料夾中:
[elastic@node1 ~]$ unzip elasticsearch/certificate-bundle.zip -d kibana/config密鑰就在那裡,所以剩下的就是更改 Kibana 配置以便它開始使用它們。在 kibana.yml 設定檔中,將 http 變更為 https 並新增包含 SSL 連線設定的行。最後三行在使用者瀏覽器和 Kibana 之間建立安全通訊。
elasticsearch.hosts: ["https://${HOSTNAME}:9200"]
elasticsearch.ssl.certificateAuthorities: /shared_folder/ca/ca.crt
elasticsearch.ssl.verificationMode: certificate
server.ssl.enabled: true
server.ssl.key: /../kibana/config/instance/instance.key
server.ssl.certificate: /../kibana/config/instance/instance.crt至此設定完成,對Elasticsearch集群中的資料的存取已加密。
如果您對 Elastic Stack 的免費或付費訂閱功能、監控任務或建立 SIEM 系統有任何疑問,請在 在我們的網站上。
Habr 上有關 Elastic Stack 的更多文章:
來源: www.habr.com
