加密ElasticSearch通信

本文翻譯自ElasticSearch官方文檔,原文請見 《Encrypting Communications in Elasticsearch》。

X-pack安全允許你加密來、往在你的ElasticSearch集羣。鏈接安全使用傳輸層安全(TLS/SSL)。

Warning未啓用加密的羣集以純文本發送所有數據,包括密碼,並且無法安裝啓用X-Pack 安全特性許可證(也就是當你安裝白金許可證時,會報500服務器錯誤)

要啓用加密,需要對集羣中的每個節點執行以下步驟:

  1. 驗證xpack.security.enabled設置是否爲true,獲取更多的信息查看security-settings
  2. 生成私鑰和X.509證書。
  3. 配置每一個節點:
    a.必須:Enable TLS on the transport layer.
    b.推薦:Enable TLS on the HTTP layer.
  4. 如果使用ActiveDirectory用戶身份驗證,請加密Elasticearch與ActiveDirectory服務器之間的通信。
  5. 如果使用LDAP用戶身份驗證,請加密Elasticearch與LDAP服務器之間的通信


    有關在彈性堆棧中加密通信的詳細信息,請參閱加密通信。

 生成節點證書

TLS需要X.509證書來執行與之通信的應用程序的加密和身份驗證。爲了使節點之間的通信真正安全,必須對證書進行驗證。在Elasticearch羣集中驗證證書真實性的推薦方法是信任簽署證書的證書頒發機構(CA)。通過這樣做,當節點被添加到您的集羣時,它們只需要使用由同一個CA簽名的證書,節點就可以自動加入集羣。此外,建議證書包含與節點的IP地址和DNS名稱相對應的主題替代名稱(SAN),以便可以執行主機名驗證。

爲了簡化爲一個命令行工具ElasticStack生成證書的過程,X-Pack中包含了elasticsearch-certutil。該工具負責生成CA並使用CA簽名證書。elasticsearch-certutil可以通過使用輸入文件交互地或在靜默模式下使用。elasticsearch-certutil工具還支持生成證書籤名請求(CSR),因此可以使用特定於商業或組織的CA對證書進行簽名。例如:

  1. 可選:爲您的Elasticearch集羣創建一個證書頒發機構。例如,使用elasticsearch-certutil ca命令:
    bin/elasticsearch-certutil ca

    可以將羣集配置爲信任擁有由此CA簽名的證書的所有節點。該命令輸出一個文件,默認名稱爲elastic-stack-ca.p12。此文件是一個PKCS#12密鑰存儲庫,它包含CA的公共證書和用於爲每個節點簽名證書的私鑰。
     

    elasticsearch-certutil 命令還提示您輸入密碼以保護文件和密鑰。如果將來計劃向羣集添加更多節點,請保留文件的副本並記住其密碼。

  2. 爲羣集中的每個節點生成證書和私鑰。例如,使用elasticsearch-certutil cert 命令:
     

    bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

    輸出是單個PKCS#12密鑰存儲庫,其中包括節點證書節點密鑰CA證書。還會提示您輸入密碼。您可以爲證書和密鑰輸入密碼,也可以按Enter將密碼保留爲空白。
              默認情況下,elasticsearch-certutil 生成沒有主機名信息的證書(也就是說,它們沒有任何主題可選名稱字段)。這意味着您可以對集羣中的每個節點使用證書,但您必須關閉主機名驗證,如下面的配置所示。
     

    如果要在集羣中使用主機名驗證,請爲每個節點運行一次ElasticSearch-certutilcert命令,並提供-name、-dns和-ip選項。
    Note

    您應該保護輸出文件,因爲它們包含實例的私鑰。

    或者,如果您想使用特定於商業或組織的CA,可以使用ElasticSearch-certutil CSR命令爲集羣中的節點生成證書籤名請求(CSR)。有關更多信息,請參見ElasticSearch-certutil。

  3. 將節點證書複製到適當的位置。

    將適用的.p12文件複製到每個節點的Elasticsearch配置目錄中的目錄中。例如,/home/es/config/certs。不需要將CA文件複製到此目錄。
               對於要配置的每一個額外的Elastic產品,請將證書複製到相關的配置目錄中。
     

    如果選擇不使用ElasticSearch-certutil,則如果存在擴展密鑰使用擴展,則所獲得的證書必須同時允許clientAuth和serverAuth。證書需要採用PEM或PKCS#12格式。儘管不是必需的,但強烈建議證書包含節點的DNS名稱和/或IP地址,以便可以使用主機名驗證。

加密集羣節點之間的通信

傳輸網絡層用於集羣中節點之間的內部通信。啓用X-Pack安全性時,必須使用TLS來確保節點之間的通信是加密的。

1、生成節點證書

2、啓用TLS並指定訪問節點證書所需的信息。

如果簽名的證書是PKCS#12格式,請將以下信息添加到每個節點的elasticsearch.yml文件中:

xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate 
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12 
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12 

如果您在elasticsearch-certutil cert命令中使用了-dns或-ip選項,並且希望啓用嚴格的主機名檢查,請將驗證模式設置爲full。有關這些值的描述,請參見xPack.ssl.Version_Mode。

如果爲每個節點創建了單獨的證書,則可能需要在每個節點上自定義此路徑。如果文件名與節點名稱匹配,則可以使用certs/${node.name}.p12格式。

elasticsearch-certutil 輸出PKCS#12密鑰存儲庫,其中包含CA證書作爲受信任的證書條目。這允許密鑰庫也用作信任庫。在這種情況下,路徑值應該與keystore.path值匹配。但是,請注意,這不是一般規則。有些密鑰存儲不能用作信任存儲,只有巧盡心思構建的密鑰存儲才能使用。

如果證書的格式是PEM,增加下面的信息到elasticsearch.yml文件在每一個節點上:

xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate 
xpack.security.transport.ssl.key: /home/es/config/node01.key 
xpack.security.transport.ssl.certificate: /home/es/config/node01.crt 
xpack.security.transport.ssl.certificate_authorities: [ "/home/es/config/ca.crt" ] 

如果您在elasticsearch-certutil cert命令中使用了-dns或-ip選項,並且希望啓用嚴格的主機名檢查,請將驗證模式設置爲full。有關這些值的描述,請參見xPack.ssl.Version_Mode。

節點密鑰文件的完整路徑。這必須是Elasticsearch配置目錄中的位置。

節點證書的完整路徑。這必須是Elasticsearch配置目錄中的位置。

應該信任的CA證書的路徑數組。這些路徑必須是Elasticsearch配置目錄中的位置。

3、如果使用密碼保護節點的證書,請將密碼添加到您的ElasticSearch密鑰存儲庫中:

如果簽名證書採用PKCS#12格式,請使用以下命令:

bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password

bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

如果證書是PEM格式的,請使用以下命令:

bin/elasticsearch-keystore add xpack.security.transport.ssl.secure_key_passphrase

4、重啓ElasticSearch

必須執行完全重新啓動羣集。配置爲使用TLS的節點不能與使用未加密網絡的節點通信(反之亦然)。啓用TLS之後,必須重新啓動所有節點,以維護集羣之間的通信。

所有與TLS相關的節點設置都被認爲是高度敏感的,因此不會通過節點信息API公開有關這些設置的更多信息,請參見安全設置。

ElasticSearch監視配置爲與TLS相關的節點設置值的所有文件,如證書、密鑰存儲庫或信任存儲庫。如果您更新這些文件中的任何一個(例如,當主機名更改或證書到期時),Elasticearch將重新加載它們。文件被輪詢以全局ElasticSearchResoure.reload.Interval.High設置確定的頻率進行更改,該設置默認爲5秒。

加密Http客戶端通信

啓用X-Pack安全性時,您可以選擇使用TLS來確保HTTP客戶端和集羣之間的通信是加密的。

強烈建議在HTTP層上啓用TLS,但不是必需的。如果在Elastic search的HTTP層上啓用TLS,則可能需要在Elastic stack的其他部分和使用的任何ElasticSearch客戶端中進行配置更改。

1、如果尚未這樣做,請生成節點證書。

2、啓用TLS並指定訪問節點證書所需的信息。

2-1如果證書是PKCS#12格式的,那麼將以下信息添加到每個節點的elasticsearch.yml文件中:
 

xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: certs/elastic-certificates.p12 
xpack.security.http.ssl.truststore.path: certs/elastic-certificates.p12 

如果爲每個節點創建了單獨的證書,則可能需要在每個節點上自定義此路徑。如果文件名與節點名稱匹配,則可以使用certs/${node.name}.p12格式。

ElasticSearch-certutil輸出包括PKCS#12密鑰庫中的CA證書,因此密鑰庫也可以用作信任庫。此名稱應與keystore.path值匹配。

2-2如果證書是PEM格式,則將以下信息添加到每個節點的elasticsearch.yml文件中:

xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.key:  /home/es/config/node01.key 
xpack.security.http.ssl.certificate: /home/es/config/node01.crt 
xpack.security.http.ssl.certificate_authorities: [ "/home/es/config/ca.crt" ] 

 節點密鑰文件的完整路徑。這必須是Elasticsearch配置目錄中的位置。

節點證書的完整路徑。這必須是Elasticsearch配置目錄中的位置。

應該信任的CA證書的路徑數組。這些路徑必須是Elasticsearch配置目錄中的位置。

3、如果使用密碼保護節點的證書,請將密碼添加到您的ElasticSearch密鑰存儲庫中:

如果簽名證書採用PKCS#12格式,請使用以下命令:

bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password

bin/elasticsearch-keystore add xpack.security.http.ssl.truststore.secure_password

如果證書是PEM格式的,請使用以下命令:

bin/elasticsearch-keystore add xpack.security.http.ssl.secure_key_passphrase

4、重新啓動ELastic。

 

必須執行完全重新啓動羣集。配置爲使用TLS的節點不能與使用未加密網絡的節點通信(反之亦然)。啓用TLS之後,必須重新啓動所有節點,以維護集羣之間的通信。

所有與TLS相關的節點設置都被認爲是高度敏感的,因此不會通過節點信息API公開有關這些設置的更多信息,請參見安全設置。

ElasticSearch監視配置爲與TLS相關的節點設置值的所有文件,如證書、密鑰存儲庫或信任存儲庫。如果您更新這些文件中的任何一個(例如,當主機名更改或證書到期時),Elasticearch將重新加載它們。文件被輪詢以全局ElasticSearchResoure.reload.Interval.High設置確定的頻率進行更改,該設置默認爲5秒。

 

注意:官方文檔不止於此,還包括Encrypting communications between Elasticsearch and Active Directory等內容,由於未用到,暫時不做翻譯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章