乾貨 | Elasticsearch7.X X-Pack基礎安全實操詳解
- 2019 年 11 月 5 日
- 筆記
1、調查:你的Elasticsearch怎麼做的安全防護?
背景:大家知道elasticsearch早期版本安全部分收費(7.1 & 6.8 版本之前),實際中各個公司6.x,5.x,2.x,1.x都有在用,且非少數。
群隨機投票結果如下:

通過留言發現,大家使用2的比較多,歷史包袱重,真正升級7.X的企業還不太多。
Medcl在《給你 10 個升級到 Elastic Stack 7 的理由!》分享中提到升級到最新版本「更安全」的核心理由。
之前文章中也有過探討:你的Elasitcsearch集群在裸奔嗎?
的確,安全問題已經成為公司使用Elasticsearch必須考慮的問題之一。
2、說到Elasticsearch安全,你想到的是什麼?
首先想到的是「不安全」、「暴露」、「攻擊」、「泄露」、「隱私」等負面的關鍵詞。
的確,如果9200或者改成其他端口的ES暴露在公網,一旦被掃到,集群及數據會受到災難式影響。
稍微了解網絡安全的朋友都知道,通過nmap等掃描工具,可以非常快速掃描出開放的外網端口。
安全無小事,本文以Elasticsearch7.2+為示例,串講:
- 1)啥是X-Pack?基礎免費版本哪些安全功能是免費?哪些收費呢?
- 2)單節點X-Pack安全如何配置?
- 3)多節點X-Pack安全如何配置?
非常基礎但非常重要,希望對你有幫助。
3、啥是X-Pack?
X-Pack是Elastic Stack擴展功能,提供安全性,警報,監視,報告,機器學習和許多其他功能。 ES7.0+之後,默認情況下,當安裝Elasticsearch時,會安裝X-Pack,無需單獨再安裝。
自6.8以及7.1+版本之後,基礎級安全永久免費。
基礎版本安全功能列表如下:

4、單節點ES X-Pack安全如何配置?
4.1 安全配置
默認情況下,擁有安全免費許可證時,Elasticsearch安全功能被禁用。 要啟用安全功能,需要設置xpack.security.enabled。
在節點的elasticsearch.yml配置文件中,新增:
1xpack.security.enabled: true
4.2 為節點間通信配置傳輸層安全性(TLS / SSL)
使用範圍:配置傳輸層安全性適用於具有多個節點的集群以及需要外網通信訪問的單節點ES。
使用環回地址127.0.0.1的單節點ES可以不用配置。
4.2.1 加密通信
Elasticsearch節點可能存儲是機密的數據,而無處不在的網絡攻擊對這些數據垂涎欲滴。
網絡攻擊包括對數據的嗅探,對數據的操縱,以及試圖獲得對服務器的訪問權限,進而訪問存儲數據的文件。
保護節點的安全有助於降低來自網絡的攻擊的風險。
4.2.2 生成節點證書
1、證書實現加密通信的原理
TLS需要X.509證書(X.509 證書是一個數字證書,它使用 X.509 公有密鑰基礎設施標準將公有密鑰與證書中包含的身份相關聯。X.509 證書由一家名為證書頒發機構 (CA) 的可信實體頒發。CA 持有一個或多個名為 CA 證書的特殊證書,它使用這種證書來頒發 X.509 證書。只有證書頒發機構才有權訪問 CA 證書)才能對與之通信的應用程序執行加密和身份驗證。 為了使節點之間的通信真正安全,必須對證書進行驗證
。
在Elasticsearch集群中驗證證書真實性的推薦方法是信任簽署證書的證書頒發機構(CA)。
這樣,只需要使用由同一CA簽名的證書,即可自動允許該節點加入集群。
2、藉助elasticsearch-certutil命令生成證書
1bin/elasticsearch-certutil.bat ca -out config/elastic-certificates.p12 -pass ""

4.2.3 配置加密通信
啟用安全功能後,必須使用TLS來確保節點之間的通信已加密。
在elasticsearch.yml中心新增配置如下:
1xpack.security.transport.ssl.enabled: true 2xpack.security.transport.ssl.verification_mode: certificate 3xpack.security.transport.ssl.keystore.path: elastic-certificates.p12 4xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
4.3 設置集群密碼
藉助:elasticsearch-setup-passwords 設置集群密碼。
elasticsearch-setup-passwords 支持的參數如下:
1Commands 2-------- 3auto - Uses randomly generated passwords 4interactive - Uses passwords entered by a user 5 6Non-option arguments: 7command 8 9Option Description 10------ ----------- 11-h, --help show help 12-s, --silent show minimal output 13-v, --verbose show verbose output
核心: auto – 隨機生成密碼。 interactive – 自定義不同用戶的密碼。
注意:必須配置好xpack之後,才能設置密碼。否則會報錯。

自此:單節點安全配置完畢,訪問9200會出現用戶名和密碼的提示窗口。

5、多節點集群X-Pack安全如何配置?
最簡單的方法, 假定是初始部署集群階段。
- 步驟1:清空data文件(原因:防止衝突,該問題多次在社區被提問);
- 步驟2:將配置好的帶證書的文件copy到另一台機器;
- 步驟3:根據集群配置ip、角色等信息即可。
6、小結
X-Pack安全配置的核心三步驟:
- 第一:設置:xpack.security.enabled: true。
- 第二:生成TLS證書。
- 第三:配置加密通信。
- 第四:設置密碼。
這些對於安全來說只是皮毛,更多的角色、權限、Space需要藉助Kibana實現。
你的Elasticsearch安全嗎?歡迎留言交流。
參考: https://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/x509-certs.html https://www.elastic.co/cn/blog/getting-started-with-elasticsearch-security https://www.elastic.co/cn/blog/security-for-elasticsearch-is-now-free