Elastic under lock and key:啟用 Elasticsearch 叢集安全選項以進行內部和外部訪問

Elastic under lock and key:啟用 Elasticsearch 叢集安全選項以進行內部和外部訪問

Elastic Stack 是 SIEM 系統市場中眾所周知的工具(實際上,不僅僅是它們)。 它可以收集大量不同大小的數據,包括敏感的和不太敏感的數據。 如果對 Elastic Stack 元素本身的存取不受保護,則這種說法並不完全正確。 預設情況下,所有 Elastic 開箱即用元素(Elasticsearch、Logstash、Kibana 和 Beats 收集器)都在開放協定上運行。 在 Kibana 本身中,身份驗證已停用。 所有這些互動都可以受到保護,在本文中我們將告訴您如何做到這一點。 為了方便起見,我們將敘述分成 3 個語意區塊:

  • 基於角色的資料存取模型
  • Elasticsearch 集群內的資料安全
  • 保護 Elasticsearch 集群外部的資料安全

細節下切。

基於角色的資料存取模型

如果您安裝了 Elasticsearch 並且不以任何方式對其進行調整,則所有索引的存取權限都將向所有人開放。 好吧,或者那些可以使用curl的人。 為了避免這種情況,Elasticsearch 有一個角色模型,從基本訂閱(免費)開始即可使用。 從原理上講,它看起來像這樣:

Elastic under lock and key:啟用 Elasticsearch 叢集安全選項以進行內部和外部訪問

圖片裡是什麼

  • 使用者是可以使用其憑證登入的所有人。
  • 角色是一組權利。
  • 權利是一組特權。
  • 權限是指寫入、讀取、刪除等權限。 (完整的特權列表)
  • 資源是索引、文件、欄位、使用者和其他儲存實體(某些資源的角色模型僅適用於付費訂閱)。

預設情況下Elasticsearch有 盒子用戶,它們所附著的 盒子角色。 啟用安全性設定後,您可以立即開始使用它們。

要在 Elasticsearch 設定中啟用安全性,您需要將其新增至設定檔(預設為 彈性搜尋/配置/elasticsearch.yml) 新隊:

xpack.security.enabled: true

變更設定檔後,啟動或重新啟動 Elasticsearch 以使變更生效。 下一步是為 Box 使用者分配密碼。 讓我們使用以下命令以互動方式執行此操作:

[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 和單一登入系統。

Elastic under lock and key:啟用 Elasticsearch 叢集安全選項以進行內部和外部訪問

對 Elasticsearch 內部物件的存取權限也可能受到限制。 但是,要對文件或欄位執行相同的操作,您將需要付費訂閱(這種奢侈從白金級別開始)。 這些設定可在 Kibana 介面中或透過 安全API。 您可以透過已經熟悉的開發工具選單進行檢查:

創建角色

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" : "[email protected]",
  "metadata" : {
    "hometown" : "Saint-Petersburg"
  }
}

Elasticsearch 集群內的資料安全

當 Elasticsearch 在叢集中運行時(這很常見),叢集內的安全設定變得很重要。 為了節點之間的安全通信,Elasticsearch 使用 TLS 協定。 要在它們之間建立安全交互,您需要證書。 我們產生 PEM 格式的憑證和私鑰:

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil ca --pem

執行上面的指令後,在目錄中 /../elasticsearch 將出現存檔 彈性堆疊-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

已經知道 彈性搜尋.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 或其他外部客戶端。

Elastic under lock and key:啟用 Elasticsearch 叢集安全選項以進行內部和外部訪問

若要設定對 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 的更多文章:

了解 Elastic Stack(又稱 Elasticsearch、又稱 ELK)中的機器學習

Elasticsearch 大小調整

來源: www.habr.com

添加評論