ELK 数据安全加固

ELK 安全问题

对于日常使用到的 ELK 组件的系统,默认在 ELK 部署的时候默认都是没有安装配置任何权限管控插件,这对于存储在 es 之中的数据无异于“裸奔”。没有任何防护的话,只要稍微会一点 ELK 知识,网络探测到暴露在域外的 es 数据库后,可以直接对数据进行“增删改查”,这是致命的安全问题。以下为例:

假设我已经知道 119.29.11.49 这台机器上安装有 elasticsearch.

那么,我可以查看它有哪些索引

我们直接浏览器访问,返回证书不受信任,因为证书是我们Elastic 签发生成的,并不是证书机构颁发,所以会出现以下告警。

修改 kibana 配置

ELK 中,kibana 也是比较重要的组件。有了 kibana 所有的操作就不需要通过 curl 执行了。所以 kibana 也需要配置相应的安全访问。

因为我们已经使用了自签名 CA,所以我们必须还使用之前生成的 kibana 证书,具体如下:

cp ../../temp/cert_blog/certs/kibana/* ../temp/cert_blog/certs/ca/ca.crt ./config/certs/

现在 Elasticsearch 集群上启用了安全特性,因此必须启用 Kibana 安全特性并配置为通过 HTTPS 向集群进行身份验证。在 Kibana 中创建 config/certs 目录,并将生成的客户端证书复制到目录中,并将以下行添加到我们的 kibana.yml 文件中,修改 kibana 的配置,并重启。用户名密码填写上一步生成的 kibana 账户。

#ensure https
{
    echo "server.name: "kibana"" 
    echo "server.host: \\"kibana.local\\"" 
    echo "server.ssl.enabled: true"
    echo "server.ssl.certificate: config/certs/kibana.crt"
    echo "server.ssl.key: config/certs/kibana.key" 
    echo "elasticsearch.hosts: [\\"https://node1.elastic.com:9200\\"]"
    echo "elasticsearch.username: \\"kibana\\"" 
    echo "elasticsearch.password: \\"xxxxxxx\\""
    echo "elasticsearch.ssl.certificateAuthorities: [ \\"/config/certs/ca.crt\\" ]"
} >> config/kibana.yml

修改以上配置,重启 kibana 之后再访问 kibana 地址,已经显示需要登陆。

输入用户名和密码,登陆 kibana

从 kibana 中我们可以监控集群的状态。

查看每个节点的内存,cpu 使用情况

查看节点的 gc 情况,等等,kibana 的监控基本上能满足大部分的集群监控需求

修改 logstash 配置

在数据采集写入过程中我们用到的是 logstash 组件,当我们启用了 https 访问时也需要修改 logstash 的配置,不然会报数据无法写入。

因为我们已经使用了自签名 CA,所以我们必须还使用之前生成的 logstash 证书。修改 logstash 配置,启用 x-pack 监控。

cp ../temp/cert_blog/certs/logstash/* ../temp/cert_blog/certs/ca/ca.crt ./config/certs/
node.name: logstash.local
# 启用 x-pack 监控
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.username: logstash_system
xpack.monitoring.elasticsearch.password: 'xxxx'
xpack.monitoring.elasticsearch.hosts: [ 'https://node1.elastic.com:9200' ]
xpack.monitoring.elasticsearch.ssl.certificate_authority: config/certs/ca.crt

同时还需要修改数据采集的 config 文件

vim conf/logstash.conf

output {
    elasticsearch {
      hosts => ["https://node1.elastic.com:9200","https://node2.elastic.com:9200"]
      index => "logstash-%{+yyyy.MM.dd}"
          user => elastic
          password => xxxxx
          cacert => 'config/certs/ca.crt'
    }
}

最后,启动 logstash,可以看到 logstash 已经启动起来并开始采集数据。

同时,我们还可以在 kibana 中监控我们的 logstash 数据采集状态。

用户角色管控

对于数据的访问,我们也需要加固访问权限,根据不同的用户角色设置不同类别的数据查询权限。

登陆 kibana,在左侧的 setting 栏目,设置用户角色。默认会生成好几种用户

  • apm,应用性能管理用户,可以查看更新相关应用性能索引
  • kibana dashboard user ,kibana 视图管理用户
  • logstash 用户,拥有读写 logstash 前缀索引权限
  • ... 等等其他的一些常用的用户,具体如下

这里可以设置用户角色能够访问的数据权限以及能够查看的面板。

同时,我们还可以新建低权用户,分配他所属的用户组,具体操作类似用户角色设置。

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
ELK 数据安全加固
对于日常使用到的 ELK 组件的系统,默认在 ELK 部署的时候默认都是没有安装配置任何权限管控插件,这对于存储在 es 之中的数据无异于“裸奔”。没有任何防护...
<<上一篇
下一篇>>