1. Elasticsearch 配置(elasticsearch.yml)
需配置:
- 自身的實體證書(用於 Transport 層節點間通信、HTTP 層外部客户端通信);
- CA 根證書(用於驗證其他節點 / 組件的實體證書)。
yaml
# 基本配置
cluster.name: my-elk-cluster
node.name: es-node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
# 網絡配置(需與實體證書中的hostname一致)
network.host: 192.168.1.100 # 實際IP/域名
http.port: 9200
# 1. Transport層(節點間通信)SSL配置
xpack.security.transport.ssl.enabled: true
# 自身的實體證書(包含公鑰+私鑰,p12格式)
xpack.security.transport.ssl.keystore.path: certs/es-node.p12
xpack.security.transport.ssl.keystore.password: your_es_keystore_pwd # 實體證書密碼
# CA根證書(用於驗證其他節點的實體證書)
xpack.security.transport.ssl.truststore.path: certs/elastic-ca.p12
xpack.security.transport.ssl.truststore.password: your_ca_pwd # CA證書密碼(若設置)
# 2. HTTP層(與Kibana/Logstash通信)SSL配置
xpack.security.http.ssl.enabled: true
# 可複用Transport層的實體證書(或單獨生成,此處複用)
xpack.security.http.ssl.keystore.path: certs/es-node.p12
xpack.security.http.ssl.keystore.password: your_es_keystore_pwd
# CA根證書(用於驗證客户端如Kibana的實體證書,可選,若開啓客户端證書驗證)
xpack.security.http.ssl.truststore.path: certs/elastic-ca.p12
xpack.security.http.ssl.truststore.password: your_ca_pwd
# 啓用安全功能(必須開啓,否則SSL配置不生效)
xpack.security.enabled: true
2. Logstash 配置(/etc/logstash/conf.d/logstash.conf)
需配置:
- 輸入端(如 Beats):自身的實體證書(供 Filebeat 驗證)+ CA 根證書(驗證 Filebeat 的實體證書);
- 輸出端(到 Elasticsearch):CA 根證書(驗證 ES 的實體證書)+ 自身的實體證書(供 ES 驗證,可選)。
ruby
# 輸入:接收Filebeat數據(需SSL加密)
input {
beats {
port => 5044
# 啓用SSL
ssl => true
# 自身的實體證書(公鑰,供Filebeat驗證Logstash身份)
ssl_certificate => "/etc/logstash/certs/logstash-cert.pem"
# 自身的實體私鑰
ssl_key => "/etc/logstash/certs/logstash-key.pem"
# CA根證書(用於驗證Filebeat的實體證書是否可信)
ssl_certificate_authorities => ["/etc/logstash/certs/elastic-ca.pem"]
# 強制驗證Filebeat的證書(確保來源可信)
ssl_verify_mode => "force_peer"
}
}
# 過濾:按需添加(示例)
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
# 輸出:發送到Elasticsearch(需SSL加密)
output {
elasticsearch {
hosts => ["https://192.168.1.100:9200"] # ES的HTTPS地址
# 訪問ES的賬號密碼(需提前在ES中創建)
user => "logstash_writer"
password => "logstash_pwd"
# 啓用SSL
ssl => true
# CA根證書(用於驗證ES的實體證書是否可信)
cacert => "/etc/logstash/certs/elastic-ca.pem"
# 若ES開啓了客户端證書驗證,需添加Logstash的實體證書(可選)
# ssl_certificate => "/etc/logstash/certs/logstash-cert.pem"
# ssl_key => "/etc/logstash/certs/logstash-key.pem"
}
}
3. Filebeat 配置(filebeat.yml)
需配置:
- 輸出到 Logstash:自身的實體證書(供 Logstash 驗證)+ CA 根證書(驗證 Logstash 的實體證書)。
yaml
# 啓用模塊(按需開啓,如nginx、syslog等)
filebeat.modules:
- module: nginx
access:
enabled: true
paths:
- /var/log/nginx/access.log
# 輸出到Logstash
output.logstash:
hosts: ["192.168.1.101:5044"] # Logstash地址
# SSL配置
ssl:
enabled: true
# CA根證書(用於驗證Logstash的實體證書是否可信)
certificate_authorities: ["/etc/filebeat/certs/elastic-ca.pem"]
# 自身的實體證書(供Logstash驗證Filebeat身份)
certificate: "/etc/filebeat/certs/filebeat-cert.pem"
# 自身的實體私鑰
key: "/etc/filebeat/certs/filebeat-key.pem"
# 日誌配置(可選)
logging.level: info
logging.to_files: true
logging.files:
path: /var/log/filebeat
4. Kibana 配置(kibana.yml)
需配置兩部分:
- 內部通信(與 ES):自身的實體證書(供 ES 驗證)+ CA 根證書(驗證 ES 的實體證書);
- 外部訪問(用户瀏覽器):公共 CA 簽發的實體證書(供瀏覽器信任)。
yaml
# 基本配置
server.name: kibana
server.host: "192.168.1.102" # 實際IP/域名
# 1. 與Elasticsearch內部通信的SSL配置
elasticsearch.hosts: ["https://192.168.1.100:9200"] # ES的HTTPS地址
# 訪問ES的賬號密碼(kibana_system用户,需提前在ES中創建)
elasticsearch.username: "kibana_system"
elasticsearch.password: "kibana_pwd"
# CA根證書(用於驗證ES的實體證書是否可信)
elasticsearch.ssl.certificateAuthorities: ["/etc/kibana/certs/elastic-ca.pem"]
# 自身的實體證書(供ES驗證Kibana身份,可選,若ES開啓客户端驗證)
elasticsearch.ssl.certificate: "/etc/kibana/certs/kibana-cert.pem"
elasticsearch.ssl.key: "/etc/kibana/certs/kibana-key.pem"
# 2. 外部訪問(用户瀏覽器)的HTTPS配置(公共CA證書)
server.ssl.enabled: true
# 公共CA簽發的實體證書(公鑰,如Let's Encrypt的kibana.yourdomain.com證書)
server.ssl.certificate: "/etc/kibana/certs/public-kibana-cert.pem"
# 公共CA證書對應的私鑰
server.ssl.key: "/etc/kibana/certs/public-kibana-key.pem"
# 公共CA的根證書(可選,瀏覽器通常已預裝,無需配置)
# server.ssl.certificateAuthorities: ["/etc/kibana/certs/public-ca-root.pem"]
# 日誌配置(可選)
logging:
appenders:
file:
path: /var/log/kibana
name: kibana-log
root:
appenders: [file]
配置要點總結
- 每個組件都需要兩類證書:
- 自身的實體證書(
xxx-cert.pem/xxx.p12+ 私鑰):證明 “我是誰”; - CA 根證書(
elastic-ca.pem/elastic-ca.p12):驗證 “對方的實體證書是否可信”。
- Kibana 的特殊性:
- 內部與 ES 通信:用自簽名 CA 體系(
elastic-ca.pem+ 自身實體證書); - 外部用户訪問:用公共 CA 證書(
public-kibana-cert.pem),確保瀏覽器信任。
- 證書路徑與權限:
- 所有證書路徑建議用絕對路徑;
- 確保組件進程(如
elasticsearch、kibana用户)對證書文件有讀取權限(chown命令設置)。
- 一致性檢查:
- 實體證書中的
hostname必須包含組件實際通信的 IP / 域名(否則 SSL 驗證會報 “主機名不匹配” 錯誤); - 所有實體證書必須由同一 CA 根證書(
elastic-ca)簽發。
按此配置後,ELK 內部通信會通過自簽名 CA 實現加密互信,Kibana 外部訪問會通過公共 CA 實現瀏覽器信任,兼顧安全性和易用性。
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。