對Elastic集群內部配置TLS加密通信及身份驗證


1、介紹

官方宣布從6.8和7.1開始,免費提供多項安全功能。其中包括tls加密通信,基於角色訪問控制等功能。
可以使用企業CA證書來完成這一步驟,但是一般情況下,我們可以通過elasticsearch自帶的elasticsearch-certutil的命令生成證書。然后各節點通過該證書可以進行安全通信。
為節點創建證書
TLS:TLS協議要求Trusted Certificate Authority(CA)簽發的X.509的證書

證書認證的不同級別

  • Certificate:節點加入集群需要使用想用CA簽發的證書
  • Full Verfication:節點加入集群需要使用想用CA簽發的證書,還需要驗證Hostname或IP地址
  • No Verfication:任何節點都可以加入,開發環境用於診斷目的

先簽發CA證書,然后基於這個CA證書,簽發每一個節點的證書

2. 步驟

2.1 生成證書

搭建好了es集群,先拿第一個節點來操作,進入elasticsearch目錄,然后執行以下命令。

cd /usr/share/elasticsearch # 使用yum方式安裝的可執行文件路徑 # 生成CA證書 bin/elasticsearch-certutil ca (CA證書:elastic-stack-ca.p12) # 生成節點證書 bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 (節點證書:elastic-certificates.p12) `# bin/elasticsearch-certutil cert -out /etc/elasticsearch/elastic-certificates.p12 -pass`# 生成證書到配置文件目錄 (這一步暫不操作) 上面命令執行成功后,會在`/etc/elasticsearch/`文件夾下生成elastic-certificates.p12證書 注意:在本機生成的證書需要更改證書權限:`chmod 644 elastic-certificates.p12` (若是使用運行es程序的用戶創建證書,則不用更改證書權限) 默認證書權限是600,運行elasticsearch程序的用戶沒有權限讀取,會造成elasticsearch啟動失敗 ## 2.2 編輯配置文件,開啟證書訪問 編輯配置文件/etc/elasticsearch/elasticsearch.yml,取消掉下面幾行的注釋(注意證書路徑) ```yml xpack.security.enabled: true 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 

將上面步驟生成的elastic-certificates.p12證書復制到另外兩個es節點上對應的/etc/elasticsearch/文件夾中,同時將上面
xpack.security.*配置選項也都復制到對應節點的elasticsearch.yml文件里

2.3 設置密碼

啟動三個節點,待節點啟動完畢之后,進入第一個節點elasticsearch目錄,執行以下命令,進行密碼設置:

cd /usr/share/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 # 輸入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] 

為了方便后續使用,這里可以都設置成一樣
password: elkstack123456

驗證集群設置的賬號和密碼
打開瀏覽器訪問這個地址,出現需要輸入賬號密碼的界面證明設置成功,集群的一個節點
http://192.168.80.105:9200/_security/_authenticate?pretty

2.4 logstash增加訪問es集群的用戶及密碼

logstash過濾數據之后往es中推送的時候,需要添加權限認證。增加訪問es集群的用戶及密碼:

output { if [fields][log_source] == 'messages' { elasticsearch { hosts => ["http://192.168.80.104:9200", "http://192.168.80.105:9200","http://192.168.80.106:9200"] index => "messages-%{+YYYY.MM.dd}" user => "elastic" # 注意:這里演示使用超級賬號,安全起見最好是使用自定義的賬號,並授予該用戶創建索引的權限,具體看下方地址 password => "elkstack123456" # 密碼是上面步驟設置的 } }  if [fields][log_source] == "secure" { elasticsearch { hosts => ["http://192.168.80.104:9200", "http://192.168.80.105:9200","http://192.168.80.106:9200"] index => "secure-%{+YYYY.MM.dd}" user => "elastic" # 注意:這里演示使用超級賬號,安全起見最好是使用自定義的賬號,並授予該用戶創建索引的權限,具體看下方地址 password => "elkstack123456" } } } 

使用自定義的賬號官方地址:https://www.elastic.co/cn/blog/configuring-ssl-tls-and-https-to-secure-elasticsearch-kibana-beats-and-logstash

2.5 elasticsearch-head訪問es集群的用戶及密碼

elasticsearch-head插件此時再去訪問有安全認證的es集群時,會發現無法進行查看,打開控制台可以看到報錯:401 unauthorized
解決辦法是修改elasticsearch.yml文件,增加以下配置。

http.cors.allow-headers: Authorization,content-type 

修改三台es節點,然后重新啟動,再次url+認證信息方式可以正常訪問es集群。

http://192.168.80.104:9100/?auth_user=elkstack&auth_password=elkstack123456

2.6 Kibana組件訪問帶有安全認證的Elasticsearch集群

配置文件kibana.yml中需要加入以下配置

elasticsearch.username: "kibana" # 注意:此處不用超級賬號elastic,而是使用kibana跟es連接的賬號kibana elasticsearch.password: "elkstack123456" 

然后重啟kibana,再次訪問的話就就需要輸入上述賬號密碼才能登陸訪問了

不一樣的地方:
在Management下面的Kibana最后出現一個Security,有User和Role
方便kibana多用戶創建及角色權限控制


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM