配置SSL
这里可以新生成ca证书,完成pki的创建,不需要与es的ca证书共用
使用es自带的证书生成工具
/usr/share/elasticsearch/bin/elasticsearch-certutil ca --pem
这里重新自定义了生成的文件名称,最终的路径为/usr/share/elasticsearch/logstash-stack-ca.zip
通过上面生成的自签名的ca证书创建客户端使用的ssl证书,进入zip文件中,使用生成的ca证书,执行以下命令
注意:ca证书的路径需要使用绝对路径
/usr/share/elasticsearch/bin/elasticsearch-certutil cert -name client -ca-cert /root/ca/ca.crt --ca-key /root/ca/ca.key --pem
同样的,需要再生成一个logstash使用的ssl证书
/usr/share/elasticsearch/bin/elasticsearch-certutil cert -name logstash -ca-cert /root/ca/ca.crt --ca-key /root/ca/ca.key --dns logstash.test.cn --ip 10.0.2.105 --pem
最后,转换生成的logstash的key为pkcs8格式,进入刚刚logstash的目录,转换命令如下
openssl pkcs8 -inform PEM -in logstash.key -topk8 -nocrypt -outform PEM -out logstash.pkcs8.key
将刚生成的所有证书信息,放到logstash所在的服务器中,我这里是放在/etc/logstash/pki
文件夹下的,如下
配置logstash
Fleet 提供更新Output设置以添加新的output,但是,更新output应该谨慎进行。最好保留es的output配置
当更改应用于一个或多个agent的策略中的output配置时,这些agent很可能会重新读取之前处理过的日志:
更改output将导致agent删除并重新创建与新output关联的所有现有集成,更改后的output会收到新的 UUID。
由于新生成的UUID,agent将重新传输它们
安装logstash
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
vim /etc/yum.repos.d/logstash.repo
在 /etc/yum.repos.d/logstash.repo
文件中输入
[logstash-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
使用命令sudo yum install logstash
安装
增加elastic-agent配置文件
vim /etc/logstash/conf.d/elastic_agent.conf
相关证书的生成教程见《配置SSL》
input {
elastic_agent {
port => 5044
#enrich => none # don't modify the events' schema at all
ssl_enabled => true
ssl_certificate_authorities => ["/etc/logstash/pki/ca/ca.crt"]
ssl_certificate => "/etc/logstash/pki/logstash/logstash.crt"
ssl_key => "/etc/logstash/pki/logstash/logstash.pkcs8.key"
ssl_client_authentication => "required"
}
}
output {
elasticsearch {
hosts => ["https://10.0.2.100:9200","https://10.0.2.101:9200","https://10.0.2.102:9200"]
data_stream => true
api_key => "trXL-5IB7q4d1tAWt549:dX6v7m_CQHu-KIdXWBouRg" # 这个key可以在fleet 管理界面生成
data_stream => true
ssl => true
cacert => "/etc/logstash/pki/es/ca.crt" #这个是之前创建es 证书的时候生成的,可以看看之前的文章
}
}
管理端生成logstash访问es的秘钥,即api_key的值
注意在配置新的output之前,Kibana要配置加密秘钥,在kibana.yml配置文件必须存在下面配置,该配置用于管理和保护存储在 Elasticsearch 中的敏感数据
xpack.encryptedSavedObjects:
encryptionKey: "min-32-byte-long-strong-encryption-key"
ca.crt一定要配置,否则logstash接受数据的时候会报bad_certificate错误
在 Logstash 配置目录中,打开
pipelines.yml
文件并添加以下配置。替换您文件的路径
- pipeline.id: elastic-agent-pipeline
path.config: "/etc/path/to/elastic-agent.conf"
证书文件权限修改
chown -R logstash:logstash /etc/logstash/pki/
启动logstash
systemctl restart logstash
即使配置了output为logstash,部分功能还是得依赖es,所以es还是得保存,只是不是默认的了
修改output全局默认值为logstash
改了无法启动Kibana
该配置不能直接在管理端进行操作,必须在Kibana配置文件中操作,如下
旧的配置
xpack.fleet.outputs: [{id: fleet-default-output, name: default, is_default: true, is_default_monitoring: true, type: elasticsearch, hosts: ['https://10.0.2.101:9200'], ca_trusted_fingerprint: f4260da774e8f05c6c37da75d83ca5a825a933fc00d4376c1a90f7fc561a7b85}]
修改为新的配置
ssl.certificate_authorities 这个字段在官方提供的文档中一直没有找到, 最后还是根据es的配置的CA指纹可选项配置推导出来的字段。 这个字段对于自签名的证书一定不能少,否则logstash接收数据的时候会报证书错误
xpack.fleet.outputs: [{id: fleet-default-output, name: default, is_default: true, is_default_monitoring: true, type: elasticsearch, hosts: ['https://10.0.2.101:9200'], ca_trusted_fingerprint: f4260da774e8f05c6c37da75d83ca5a825a933fc00d4376c1a90f7fc561a7b85},{id: fleet-logstash-output, name: 'preconfigured_logstash_output',is_default: false, is_default_monitoring: false, type: logstash, hosts: ["10.0.2.105:5044"], ssl.certificate: "-----BEGIN CERTIFICATE-----\n123\n-----END CERTIFICATE-----", secrets.ssl.key: "-----BEGIN RSA PRIVATE KEY-----\n123\n-----END RSA PRIVATE KEY-----", ssl.certificate_authorities: ["-----BEGIN CERTIFICATE-----\n\n-----END CERTIFICATE-----}]
再重启kibana之前需要将fleet策略中的输出全部手动指定到es输出,否则打开fleet页面会报错
或者根据策略指定输出到logstash
参考
https://www.elastic.co/guide/en/fleet/8.15/fleet-settings-changing-outputs.html
https://www.elastic.co/guide/en/fleet/8.15/secure-logstash-connections.html