(轉)Elasticsearch search-guard 插件部署

我以前寫了ELK+shield的部署文檔,因爲shield是商業收費的,不少人都推崇開源項目search-guard來作ELK的安全組件,準確來講是elasticsearch的安全組件。search-guard的部署很簡單,可是開始着手弄,徹底不瞭解的狀況下仍是會踩一些坑,加上網上對新版本使用介紹少,因此我決定寫一遍search-guard的部署文檔。 
search-guard插件包含兩部分,search-guard-ssl和search-guard-2兩個插件(官網提供了一個特殊的包,包含了search-guard和elasticsearch的一個壓縮包,裏面東西齊全,可是有點亂,還有windows的執行文件,因此我仍是一步步安裝插件)。 
咱們先安裝search-guard-ssl。按照如下步驟安裝:
php

  • 安裝search-guard-ssl插件java

    切換到elasticsearch的目錄(通常是/usr/share/elasticsearch) 
    命令安裝插件:
    node

sudo bin/plugin install com.floragunn/search-guard-ssl/2.3.4.16
  • 1
  • 1
注意版本,這裏elasticsearch的版本就是2.3.4,它是要跟search-guard的版本進行對應的。
  • 克隆search-guard-ssl項目,生成相關證書git

    克隆項目命令:github

sudo git clone https://github.com/floragunncom/search-guard-ssl.git
  • 1
  • 1

通常來講建立數字證書流程以下: 
建立證書流程: 
1.建立ROOT CA(根證書/CA認證機構) 
2.應用服務器建立CSR(證書籤名請求文件),同時會建立好本身的密鑰對(公鑰和私鑰) 
3.將CSR發送到CA認證機構 
4.CA機構將返回一個數字簽名證書
windows

首先切換到剛剛克隆的search-guard-ssl的項目目錄下 
修改etc目錄下的配置文件 
example-pki-scripts/etc/root-ca.conf 
example-pki-scripts/etc/signing-ca.conf 
根據本身狀況改成公司相關信息等 
利用腳本,寫入密碼,生成根證書
安全

sudo ./gen_root_ca.sh paswd paswd
  • 1
  • 1

search-guard-ssl 還提供瞭如下腳本 
gen_node_cert.sh 
能夠修改爲本身的信息,生成相應服務器證書,裏面包含了上述生成數字證書的過程。 
gen_client_node_cert.sh 
同理生成客戶端數字證書。這裏記住-dname參數後面的信息,後面認證客戶端,就靠這個。 
修改完腳本,就能夠執行腳本,就會生成相關證書了。 
- 配置ssl 
將生成的證書,keystore.jks 和 truststore.jks複製到/etc/elasticsearch目錄下,而後配置elasticsearch.yml添加配置 
searchguard.ssl.transport.enabled: true 
searchguard.ssl.transport.keystore_filepath: example-keystore.jks 
searchguard.ssl.transport.keystore_password: paswd 
searchguard.ssl.transport.truststore_filepath: truststore.jks 
searchguard.ssl.transport.truststore_password: paswd 
searchguard.ssl.transport.enforce_hostname_verification: false 
searchguard.ssl.transport.resolve_hostname: false
bash

http配置,這裏我只是爲了測試方便,配置完,應該設置爲true

searchguard.ssl.http.enabled: false 
searchguard.ssl.http.keystore_filepath: example-keystore.jks 
searchguard.ssl.http.keystore_password: paswd 
searchguard.ssl.http.truststore_filepath: truststore.jks 
searchguard.ssl.http.truststore_password: paswd
服務器

searchguard.allow_all_from_loopback: trueelasticsearch

這裏注意,下面的配置必定要和籤的客戶端證書一致,不然不能插入配置

searchguard.authcz.admin_dn: 
- CN=example, OU=client, O=client, L=Test, C=DE

安裝search-guard-2插件

  • 安裝插件
sudo bin/plugin install -b com.floragunn/search-guard-2/2.3.4.4
  • 1
  • 1

這裏一樣,版本注意與elasticsearch對應。

  • 修改配置並插入

切換目錄到/usr/share/elasticsearch/plugins/search-guard-2/ 
修改該目錄下的sgconfig目下的配置文件 
這裏和shield相似,修改用戶,角色,角色映射幾個配置文件便可。

注意,這裏用戶密碼,能夠經過plugins下的tools/hash.sh工具生成密碼的hash加密文本

配置文件修改完成後,經過命令將配置插入到elasticsearh中,

sudo tools/sgadmin.sh -cd sgconfig/ -ks sgconfig/example-keystore.jks -kspass paswd -ts sgconfig/truststore.jks -tspass paswd -nhnv
  • 1
  • 1

須要注意的是這時候elasticsearch的服務必須是運行狀態。若是插入配置失敗,檢查配置文件,好比前面提到的,生成客戶端證書的時候dname的參數 必須與配置文件中searchguard.authcz.admin_dn:下的認證列表進行對應。

接下來就是配置kibana和logstash的了。

注意: 
爲了logstash經過ssl鏈接elasticsearch,須要將elasticsearch的證書導入到Java的cacerts中 
其中要求必須是 x509標準的證書

錯誤提示如:keytool 錯誤: java.lang.Exception: 所輸入的不是 X.509 證書

這時候就須要把咱們的jks的證書作以下轉換 
sudo keytool -export -alias example -file example.der -keystore example.jks 
sudo openssl x509 -inform der example.der -out example.pem 
sudo openssl x509 -outform der -in example.pem -out example.crt sudo keytool -importcert -file example.crt -alias example -keystore cacerts -storepass changeit

相關文章
相關標籤/搜索