ElasticSearch日志系统 对ELK进行安全性配置

目标:对 ElasticSearch 进行安全性配置。连接输入端(Logstash)和输出端(Kibana)都需要用户身份验证。Filebeat 连接 Logstash 使用 ssl 验证。

启用ElasticSearch安全功能

使用基本许可证时,默认情况下禁用 Elasticsearch 安全功能。启用 Elasticsearch 安全功能可启用基本身份验证,以便可以使用用户名和密码身份验证运行本地集群。

1. 如果 Kibana 和 Elasticsearch 正在运行,需要停止后再进行操作。

2. 将xpack.security.enabled设置添加到ElasticSearch安装目录下config/elasticsearch.yml文件,并将值设置为true:

xpack.security.enabled: true

3. 如果集群只有一个节点,请discovery.type在 ES_PATH_CONF/elasticsearch.yml文件中添加设置并将值设置为single-node. 此设置可确保节点不会无意中连接到可能在网络上运行的其他集群。

discovery.type: single-node

为内置用户创建密码

要与集群通信,您必须为内置用户配置用户名。除非启用匿名访问,否则所有不包含用户名和密码的请求都会被拒绝。

进入bin目录后,启动 Elasticsearch

./elasticsearch

在另一个终端窗口中,通过运行该elasticsearch-setup-passwords实用程序为内置用户设置密码,

使用auto参数将随机生成的密码输出到控制台,您可以稍后根据需要进行更改:

./elasticsearch-setup-passwords auto

如果要使用自己的密码,请使用interactive参数而不是参数运行命令 auto。使用以下模式可指导完成所有内置用户的密码配置

./elasticsearch-setup-passwords interactive

生成的密码,需要自行进行保存。

配置Kibana连接到ElasticSearch

启用 Elasticsearch 安全功能后,用户必须使用有效的用户名和密码登录 Kibana。配置 Kibana 以使用之前创建的内置kibana_system用户和密码。此帐户不适用于个人用户,并且无权从浏览器登录 Kibana。相反,我们将以elastic超级用户身份登录 Kibana 。

1. 将elasticsearch.username设置添加到Kibana安装路径下config/kibana.yml 文件并将值设置为kibana_system用户:

elasticsearch.username: "kibana_system"

2. 从安装 Kibana 的 bin 目录中,运行以下命令以创建 Kibana 密钥库并添加安全设置:

  a. 创建 Kibana 密钥库:

./kibana-keystore create

  b. 将kibana_system用户的密码添加到 Kibana 密钥库:

./kibana-keystore add elasticsearch.password

      出现提示时,输入kibana_system用户的密码。

最后,重启 Kibana 即可完成对 Kibana 的用户身份配置。

在重启 Kibana 后,访问 服务器外网ip:5605 ,显示登录页面:

使用超级用户 elastic 登录,即可进入Kibana首页。

配置Logstash连接到ElasticSearch

Logstash Elasticsearch 插件(输出、输入和过滤器)支持通过 HTTP 进行身份验证和加密。

若要将 Logstash 与安全集群一起使用,需要为 Logstash 配置身份验证凭据。如果身份验证失败,Logstash 会抛出异常并暂停处理管道。

首先需要在Logstash的配置文件中配置logstash的身份验证凭据。

进入 Logstash 安装目录下 /config,使用编辑器打开logstash.yml,加入以下内容:

xpack.monitoring.enabled: true

xpack.monitoring.elasticsearch.username: logstash_system

xpack.monitoring.elasticsearch.password: 对应的密码

xpack.monitoring.elasticsearch.hosts: ["http://ES服务器外网IP:9200"]

除了为 Logstash 配置身份验证凭据外,还需要授予授权用户访问 Logstash 索引的权限。

Logstash 需要能够管理索引模板、创建索引以及在它创建的索引中写入和删除文档。要为 Logstash 设置身份验证凭据。

1. 创建一个 logstash_writer 角色,具有 manage_index_templates 群权限,和 write,delete 和 create_index 权限的 Logstash indices。

  a. 可以从 Kibana 中的Management > Roles UI进行创建:

然后确认新建角色。

  b. 可以通过Dev tools 中控制台,通过role API创建角色。输入并运行以下代码:

POST _xpack/security/role/logstash_writer

{

  "cluster": ["manage_index_templates", "monitor"],

  "indices": [

    {

      "names": [ "logstash-*" ], 

      "privileges": ["write","delete","create_index"]

    }

  ]

}

     出现以下返回信息,则表示创建成功。

2. 创建 logstash_internal 用户,并为其分配logstash_writer角色。

  a. 可以从 Kibana 中的Management > Users UI 进行创建:

  b. 可以通过Dev tools 中控制台,通过user API创建角色。输入并运行以下代码:

POST /_xpack/security/user/logstash_internal

{

  "password" : "输入密码",

  "roles" : [ "logstash_writer"],

  "full_name" : "Internal Logstash User"

}

将 Logstash 配置为以刚创建的用户身份logstash_internal进行身份验证。

进入 Logstash 的输入输出配置文件 std.conf ,可以为每个 Elasticsearch 插件单独配置凭据。

output {

  elasticsearch {

    ...

    user => logstash_internal

    password => 输入密码

  }

}

完成配置文件的编写后,重启Logstash,运行无报错则成功连接到ElasticSearch。

Filebeat与Logstash配置ssl加密通信

为了保证应用日志数据的传输安全,我们可以使用SSL相互身份验证来保护Filebeat和Logstash之间的连接。这可以确保Filebeat仅将加密数据发送到受信任的Logstash服务器,并确保Logstash服务器仅从受信任的Filebeat客户端接收数据。

下面就讲述一下配置Filebeat与Logstash之间进行加密通信的方法。需要一个自签的CA证书,以及使用该CA证书签署的两份数据证书。一份是给Logstash作为server端验证自己身份时使用,一份是提供给Filebeat客户端验证自己身份时使用。

步骤

使用 Elasticsearch 提供的数字证书工具 elasticsearch-certutil 来制作需要的证书:

制作自签名 CA 证书,并为证书设置访问口令,进入 ElasticSearch 安装目录下/bin 中,创建 ssl 文件夹存放验证相关文件 ,默认输出文件名为elastic-stack-ca.p12:

./elasticsearch-certutil ca --out /home/elsearch/ELK/elasticsearch-7.13.4/ssl/elastic-stack-ca.p12

根据证书文件导出一份 CA 公钥文件,用于后续各配置文件中引用 CA 公钥时使用,进入刚创建的ssl文件夹执行:

openssl pkcs12 -clcerts -nokeys -in elastic-stack-ca.p12 -out ca.pem

使用自签名的CA签署生成一份logstash使用的数字证书,名字 logstash100(自定义,Logstash运行机为100代号):

./elasticsearch-certutil cert --ca /home/elsearch/ELK/elasticsearch-7.13.4/ssl/elastic-stack-ca.p12 --name logstash100 --dns logstash --ip Logstash运行机IP --pem --out /home/elsearch/ELK/elasticsearch-7.13.4/ssl/logstash100.zip 

其中

  • name为制作的证书名称
  • dns为hosts文件解析后的地址
  • ip为logstash程序所在主机ip

解压,解压后会各有一个.key和.crt后缀的文件,logstash 与 beats 启动 ssl 加密通信时,仅支持使用 PKCS8 的密钥格式 ,所以针对beats输入插件,将logstash.key转换为pkcs#8格式

unzip logstash100.zip

cd logstash100

openssl pkcs8 -in logstash100.key -topk8 -nocrypt -out logstash100.p8  #使用openssl转换生成PKCS8格式的密钥文件

对于制作的logstash.crt的证书,可以通过以下命令查看证书中的信息:

openssl x509 -in logstash100.crt -text

将证书文件部署到 Logstash 安装目录下。创建目录ssl用于存放证书,并把包括 logstash 证书和 ca 证书在内的文件部署于此:

创建文件夹后,将证书文件复制粘贴,包括ca.pem  logstash100.crt  logstash100.key  logstash100.p8,该过程省略

安全起见,将以上文件权限调整为600

chmod 600 *

以上述同样的步骤为 Filebeat 服务生成数字证书

进入 ElasticSearch 安装目录下/bin 中

./elasticsearch-certutil cert --ca /home/elsearch/ELK/elasticsearch-7.13.4/ssl/elastic-stack-ca.p12 --name filebeats100 --dns filebeats --ip Logstash运行机IP --pem --out /home/elsearch/ELK/elasticsearch-7.13.4/ssl/filebeats100.zip 

unzip filebeat100.zip

将证书文件部署到 Filebeat 安装目录下。创建目录ssl用于存放证书,并把包括 filebeat 证书和 ca 证书在内的文件部署于此:

创建文件夹后,将证书文件复制粘贴,包括ca.pem  filebeat100.crt  filebeat100.key,该过程省略

安全起见,将以上文件权限调整为600

chmod 600 *

配置 logstash和filebeat 使用 SSL

在 Logstash 配置文件std.conf的input内,加入以下内容:

beats {

        port => "5045"

        ssl => true

        ssl_certificate_authorities => ["/root/elk7/logstash-7.13.4/ssl/ca.pem"]

        ssl_key => "/root/elk7/logstash-7.13.4/ssl/logstash100.p8"

        ssl_certificate => "/root/elk7/logstash-7.13.4/ssl/logstash100.crt"

        ssl_verify_mode => "force_peer"

}

在 Filebeat 配置文件filebeat.yml中output处,加入以下内容:(原文件有该内容,解除注释后更改路径即可)

  ssl.certificate_authorities: ["/home/resin2/elk/filebeat/ssl/ca.pem"]

  ssl.certificate: "/home/resin2/elk/filebeat/ssl/filebeats100.crt"

  ssl.key: "/home/resin2/elk/filebeat/ssl/filebeats100.key"

最后分别重启程序,无报错则配置成功。

本文章功能参考以下链接实现:

https://www.elastic.co/guide/en/elasticsearch/reference/7.13/security-minimal-setup.html

https://www.elastic.co/guide/en/elasticsearch/reference/7.13/security-basic-setup.html

https://www.elastic.co/guide/en/x-pack/5.0/logstash.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值