在6.8之前免費版本並不包含安全認證功能,之後版本有開放一些基礎認證功能,對於普通用戶來說是夠用的。
免費版本
- TLS 功能,可對通信進行加密
- 文件和原生 Realm,可用於創建和管理用戶
- 基於角色的訪問控制,可用於控制用戶對集羣 API 和索引的訪問權限;
- 通過針對 Kibana Spaces 的安全功能,還可允許在 Kibana 中實現多租戶。
收費版本包含更豐富的安全功能,比如:
- 日誌審計
- IP過濾
- LDAP、PKI和活動目錄身份驗證
- 單點登錄身份驗證(SAML、Kerberos)
- 基於屬性的權限控制
- 字段和文檔級別安全性
- 靜態數據加密支持
需要同時在ES和kibana端開啓安全認證功能,下面介紹如何操作。
ES端
啓用安全模塊
- 打開ES配置文件
$ES_PATH_CONF/elasticsearch.yml
添加設置:xpack.security.enabled:true
,在免費版本中此項設置是禁用的,所以需要顯式打開它。 - 非集羣模式下啓用單節點發現
discovery.type: single-node
。如果你是在ES集羣中配置則忽略本項,因爲集羣模式下要配置TLS。
啓用Elasticsearch安全功能時默認情況下會啓用基本身份驗證,要與集羣通信你必須指定用戶名和密碼,除非啓用匿名訪問,否則所有不包含用戶名和密碼的請求都將被拒絕。
爲系統默認用戶創建密碼
Elastic Stack安全功能提供內置的用戶憑據可幫助你啓動運行ES,這些用戶具有一組固定的權限,在設置密碼之前無法進行身份驗證,其中elastic用戶可以用來設置所有內置的用戶密碼。
上面的內置用戶存儲在一個特殊 .security
索引中,該索引由Elasticsearch管理。如果禁用內置用戶或其密碼更改,則更改將自動反映在集羣中的每個節點上。但是,如果從快照中刪除或恢復索引,則已應用的任何更改都將丟失。
- 先創建keystore文件
bin/elasticsearch-keystore create
。 - 在Elasticsearch目錄中運行命令:
./bin/elasticsearch-setup-passwords interactive
,回車之後爲每一個用戶設置獨立的密碼。記住ES實例必須啓動。 - 你需要在後續步驟中使用這些內置用戶,因此務必牢記前面設置的密碼!
在集羣上配置TLS
如果你在操作單節點ES則可以跳過本內容。
Elastic Stack安全功能使你可以加密來自Elasticsearch集羣的流量。使用傳輸層安全性(TLS)來保護連接,傳統層安全性通常稱爲“SSL”。
爲每個Elasticsearch節點生成私鑰和X.509證書
- 生成CA證書
bin/elasticsearch-certutil ca
,將產生新文件elastic-stack-ca.p12
。該elasticsearch-certutil
命令還會提示你輸入密碼以保護文件和密鑰,請保留該文件的副本並記住其密碼。 - 爲集羣中的每個節點生成證書和私鑰
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
,將產生新文件elastic-certificates.p12
。系統還會提示你輸入密碼,你可以輸入證書和密鑰的密碼,也可以按Enter鍵將密碼留空。默認情況下elasticsearch-certutil
生成沒有主機名信息的證書,這意味着你可以將證書用於集羣中的每個節點,另外要關閉主機名驗證。 - 將
elastic-certificates.p12
文件複製到每個節點上Elasticsearch配置目錄中。例如,/home/es/config/certs
。無需將elastic-stack-ca.p12
文件複製到此目錄。
-
mkdir config/certs mv elastic-certificates.p12 config/certs/
配置集羣中的每個節點以使用其簽名證書標識自身並在傳輸層上啓用TLS
-
啓用TLS並指定訪問節點證書所需的信息,將以下信息添加到每個節點的
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
-
如果你在創建證書時輸入了密碼,那可以通過下面的方法設置。
-
bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
-
重啓Elasticsearch
配置爲使用TLS的節點無法與使用未加密網絡的節點通信(反之亦然)。啓用TLS後,必須重新啓動所有節點才能保持羣集之間的通信。
你還可以選擇在HTTP層上啓用TLS,這裏就不作介紹了。
- 處理
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
問題,打開/etc/security/limits.conf
文件並添加下面內容,其中es表示啓動ES實例的用戶。
-
es soft nofile 65536 es hard nofile 65536 es memlock unlimited
其它組件中啓用加密(非強制)
根據自己的需要配置,不配置並不影響本次啓用安全認證功能。
- 配置X-Pack監視以使用加密連接
- 配置Kibana以加密瀏覽器和Kibana服務器之間的通信,並通過HTTPS連接到Elasticsearch。
- 配置Logstash以使用TLS加密。
- 配置Beats以使用加密連接。
- 配置Java傳輸客戶端以使用加密通信。
- 配置Elasticsearch for Apache Hadoop以使用安全傳輸。
Kibana端
啓用Elasticsearch安全功能後,用戶必須使用有效的用戶ID和密碼登錄Kibana。
將內置用戶添加到Kibana
-
在
kibana.yml
文件中填寫連接ES的用戶憑證,上一步有爲kibana
用戶初始化密碼。
-
elasticsearch.username: "kibana" elasticsearch.password: "your_password"
-
如果你不想將用戶ID和密碼放在kibana.yml文件中明文配置,可以將它們存儲在密鑰庫中。運行以下命令以創建Kibana密鑰庫並添加配置:
-
./bin/kibana-keystore create ./bin/kibana-keystore add elasticsearch.username ./bin/kibana-keystore add elasticsearch.password
-
重啓kibana。
測試
重新訪問kibana會跳轉到登錄頁面,用上面初始化的內置賬號比如elastic來登錄即可。進入Manager菜單可以添加用戶和角色,權限是和角色綁定的。