赞
踩
应用场景阐述:
本文记录一次解决ElasticSearch开启x-pack安全认证后,logstash无法发送数据至 ES 存储的解决方法。
版本为 logstash-6.8.0、elasticsearch-6.8.0
一、先决条件
首先我们需要 logstash 和 es集群环境,且配置好了 hosts文件映射主机名
例如:vim etc/hosts
#es三个节点
10.20.10.1 pc1
10.20.10.2 pc2
10.20.10.3 pc3
10.20.10.4 logstash-node-1
二、开启安全认证
在es主节点的配置文件中(elasticsearch.yml)加入以下一行配置,并重启es,目的是开启安全认证
xpack.security.enabled: true
做完这一步,最基本的安全认证,用户名、密码验证 就配置好了,浏览器访问 http://pc1:9200/ 就会要求输入用户名密码来访问es了
三、设置ES内置用户及密码
1、在Elasticsearch安装目录中运行命令:
./bin/elasticsearch-setup-passwords interactive,
回车之后为每一个用户设置独立的密码。前提是 ES必须为启动状态。
2、你需要在后续步骤中使用这些内置用户,因此务必牢记前面设置的密码!
四、生成我们所需的证书
ca证书:我们需要PKCS#12类型的证书
*注意:这里说明一下 参数 --dns 是指定 为哪一个 节点 生成证书 --name 是 为生成的证书 指定名字*
第一条命令:bin/elasticsearch-certutil ca
第二条命令:bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --dns pc1
1、执行下面的第一条命令生成根证书,一路回车!会得到elastic-stack-ca.p12
2、执行第二条命令,一路回车!会得到节点 pc1 的节点证书 pc1.p12
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --dns pc1 --name pc1
同理:执行
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --dns pc2 --name pc2
会得到 pc2 节点的 证书 pc2.p12
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --dns pc3 --name pc3
会得到 pc3 节点的 证书 pc3.p12
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --dns logstash-node-1 --name logstash-node-1
会得到 logstash-node-1 节点的 证书 logstash-node-1.p12
重点1:
logstash 不能够直接使用 PKCS#12类型的证书!
logstash 不能够直接使用 PKCS#12类型的证书!
logstash 不能够直接使用 PKCS#12类型的证书!
所以我们需要 第三种命令,去 logstash-node-1.p12 的证书中提取 pem证书
openssl pkcs12 -in logstash-node-1.p12 -clcerts -nokeys -chain -out ca.pem
执行后会得到logstash使用的pem证书,名为 ca.pem
将各自节点的证书 放置在 es的 config 路径下,我这里是在每一个节点的 config/ 创建了 一个文件夹 叫 xp , 证书放置在 xp 文件夹下。
重点2
修改 证书 的 权限,确保 es 节点 可以访问 自己的 证书
chown -R es:es ./xp/
重点3
将logstash 所需 的 证书 ca.pem 放置在 logstash的安装目录中的 config 下 ,并修改 其权限为 600,也是为了保证logstash对其有操作权限,我这里 也是 在 config下 创建了 一个文件夹 叫 xp,将ca放到 xp 下。
chmod 600 ./ca.pem
五、配置es的 SSL/TLS (在各个es节点的 elasticsearch.yml 文件中)
es主节点 pc1 的配置: 用我们生成的 pc1 节点的 证书
#跨域 http.cors.enabled: true http.cors.allow-origin: "*" #开启权限认证后,es-head-master访问es 需要的配置 http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type #开启权限认证,上面我们配置过了 xpack.security.enabled: true # SSL/TLS 节点间通讯,xp 为 es的安装目录 config下 新建的一个文件夹 xpack.security.transport.ssl.enabled: true xpack.ssl.keystore.path: xp/pc1.p12 xpack.ssl.truststore.path: xp/pc1.p12 #mode设置为 certificate 当设置为 full的时候 会验证 dns 和 ip 没有设置dns和ip 会报错client did not trust this server’s certificate xpack.ssl.verification_mode: certificate xpack.ssl.client_authentication: required #用HTTPS方式访问es,即logstash 发送数据至 es 的 方式 xpack.security.http.ssl.enabled: true xpack.security.http.ssl.keystore.path: xp/pc1.p12 xpack.security.http.ssl.truststore.path: xp/pc1.p12 xpack.security.http.ssl.verification_mode: certificate
es从节点 pc2 的配置: 用我们生成的 pc2 节点的 证书
# SSL/TLS 节点间通讯,xp 为 es的安装目录 config下 新建的一个文件夹
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: xp/pc2.p12
xpack.security.transport.ssl.truststore.path: xp/pc2.p12
#用HTTPS方式访问es,即logstash 发送数据至 es 的 方式
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: xp/pc2.p12
xpack.security.http.ssl.truststore.path: xp/pc2.p12
xpack.security.http.ssl.verification_mode: certificate
es从节点 pc3 的配置: 用我们生成的 pc3 节点的 证书
# SSL/TLS 节点间通讯,xp 为 es的安装目录 config下 新建的一个文件夹
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: xp/pc3.p12
xpack.security.transport.ssl.truststore.path: xp/pc3.p12
#用HTTPS方式访问es,即logstash 发送数据至 es 的 方式
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: xp/pc3.p12
xpack.security.http.ssl.truststore.path: xp/pc3.p12
xpack.security.http.ssl.verification_mode: certificate
重启es集群后, 此时用 http请求去访问 es 将会失效,应改为https方式去访问:https://pc1:9200/_cat/nodes
如果可以看到 集群的所有节点信息,说明我们的 节点间通讯配置正确!
六、配置logstash
logstash的配置包括两部分:
1、logstash.yml
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.username: logstash_system
xpack.monitoring.elasticsearch.password: 你之前设置的password
#这里必须用 https 这里必须用 https 这里必须用 https
xpack.monitoring.elasticsearch.hosts: "https://pc1:9200"
#你的ca.pem 的所在路径
xpack.monitoring.elasticsearch.ssl.certificate_authority: "/opt/logstash-6.8.0/config/xp/ca.pem"
xpack.monitoring.elasticsearch.ssl.verification_mode: certificate
# 探嗅 es节点,设置为 false
xpack.monitoring.elasticsearch.sniffing: false
2、logstash.conf
output {
stdout {codec => rubydebug}
elasticsearch{
template_name => "xxx-alarm"
hosts => ["pc1:9200"]
#document_type => "alarm" 这里我为了测试方便,没有设置模板
#不配置模板 es 会自动分配 logstash 模板给用 ,这里只要能区分出来 数据是否流入 就可以了
#index => "<xxx-alarm-{now/d}>"
user => "logstash_system"
password => "你的密码"
ssl => true
#pem 证书的 所在路径
cacert => '/opt/logstash-6.8.0/config/xp/ca.pem'
}
}
七、开启x-pack后,es-head-master访问方式:
http://headIP:9100/?base_uri=https://ESIP:9200&auth_user=elastic&auth_password=yourPwd
上图:数据已经成功输出到 es
版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/LSY929981117/article/details/107714001
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。