Elasticsearch7.10 開發中配置偽叢集的TLS和身份驗證(基礎)

山沉發表於2020-12-24

一、開發中配置偽叢集的TLS和身份驗證(基礎)

參看資料:
基礎
擴充套件
視訊
Document

很詳細的配置,支援部落格主【https://knner.wang/】 連結

我這裡用到的是基礎板(免費的),自動申請Basic License,X-pack 的免費Auth和Node間的SSL。

1.建立三個Elasticsearch7.10的節點

在一個伺服器上,建立三個節點。解壓檔案,複製一個es-slave01和es-slave02,其中一個命名為master節點,好區分。

2.配置TLS和身份驗證檔案

在安全的叢集中,Elastic節點在與其他節點通訊時使用證照來標識自己。這個叢集必須驗證這些證照的真實性。推薦的方法
是信任指定的CA身份認證檔案,因此,當節點加入到叢集中時,它只需都擁有相同的CA簽署的證照,

這裡第一步是生成證照,然後把證照分發到子節點(好區分),其中一個命名為master節點。

在這個過程中,我們需要證照讓節點安全的通訊,會用到elasticsearch-certutil 的命令,此命令可以很快的生成證照。

流程:

ca證照–》更具ca證照,獲取node證照–》複製node證照到其他節點–》生成使用者密碼

1.master主節點生成node證照

官網配置Node節點認證

  1. 在config目錄下
[~choleen config]mkdir certs
  1. 在linux系統中,cd 進入elastic的bin目錄下,這個可以不啟動執行,執行此命令
[~choleen bin]./elasticsearch-certutil cert -out elastic-certificates.p12 -pass ""

對於這個命令elasticsearch-certutil,可以輸入--help來檢視幫助,我們來看它給解釋:

命令含義
elasticsearch-certutil–help
cert生成X.509的證照和密碼
ca生成一個新本地認證檔案,裡面包含了證照和金鑰
csr生成證照籤名
http對於這個Elastcsearch的http介面生成一個新的認證
cert–help
ca指向已經生成的ca金鑰檔案
ca-cert指向存在的ca認證檔案(節點之間認證)
dns指定DNS域名
ip指定ip
pass生成的私鑰密碼
out指定生成檔案路徑
name證照名字

執行之後,在根目錄生成了elastic-certificates.p12 檔案。

$ cd config
$ mkdir certs
$ mv ../elastic-certificates.p12 certs/
  • 注意:
    我這裡沒有使用$ /bin/elasticsearch-certutil ca -v ,只是為了快速的設定SSL

    正常我們應該先生成ca證照,然後根據ca證照去生成node證照。

    https://www.elastic.co/guide/en/elasticsearch/reference/current/configuring-tls.html
  1. 配置elasticsearch.yml
xpack.security.enabled: true
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

這裡的verification_mode配置方式:

  • full,認證證照是否通過信任的CA證照籤發,同時認證server的hostname 或者 IP 地址是否匹配證照中配置的
  • cretificate,只認證證照是否通過信任的CA證照籤發的
  • none,什麼也不認證,相當於關閉了SSL/TLS認證,僅用於你非常相信的安全的環境
  1. 啟動master節點,生成叢集密碼
$ bin/ elasticsearch-setup-passwords interactive

手動設定密碼,elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user,都有這些使用者。

登入時會用到。

  1. Elastic節點配置TLS
    由於不是後臺執行,開啟一個新的終端,拷貝node證照(cert檔案)到位元組的的config/certs目錄下。

    節點中node.master: false,不能為true。

    在其他節點中增加,就是xpck.security.*鍵設定為master一樣。
$ echo "xpack.security.enabled: true" >> elasticsearch.yml
$ echo ''xpack.security.transport.ssl.enabled: true" >> elasticsearch.yml
$ echo ''xpack.security.transport.ssl.verification_mode: certificate" >> elasticsearch.yml
$ echo ''xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12" >> elasticsearch.yml
$ echo ''xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12" >> elasticsearch.yml
  1. 執行其他兩個節點,
$ bin/elasticsearch

最後看其他兩個節點加入進去沒有。

  1. Kibana中設定安全
elasticsearch.username: "kibana"
elasticsearch.password: "admin123"

執行命令 bin/kibana --allow-root

開啟瀏覽器,輸入 http://localhost:5601

這裡的密碼,我們可以使用elastic超級使用者進行登入,就是來自setup-password 命令。

  1. Kibana中可以設定Role和User
  • role

  • user

先生成證照

  1. 執行命令 $ bin/elasticsearch-certutil ca -v
    • 其中
Please enter the desired output file [elastic-stack-ca.p12]:  # 輸入儲存的ca檔名稱
Enter password for elastic-stack-ca.p12 : # 輸入證照密碼,我們這裡留空
  1. 在生成node證照時,使用$ bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
    • 其中
Enter password for CA (elastic-stack-ca.p12) :  # 輸入CA證照的密碼,我們這裡沒有設定,直接回車
Please enter the desired output file [elastic-certificates.p12]:  # 輸入證照儲存名稱,保值預設直接回車
Enter password for elastic-certificates.p12 :  # 輸入證照的密碼,留空,直接回車

這種根據CA證照籤署生成的node證照elastic-certificates.p12,包含有node證照、CA證照、私鑰

3. 檢視節點命令

  1. 檢視節點資訊
$ curl localhost:9200/_cat/nodes?v
  1. 檢視節點狀態
$ curl localhost:9200/_cat/health
  1. 檢視每臺機器的屬性
$ curl localhost:9200/_cat/nodeattrs

相關文章