前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ELK通过TLS加密和基于角色的访问控制确保Elasticsearch的安全

ELK通过TLS加密和基于角色的访问控制确保Elasticsearch的安全

作者头像
OvO我是肉排菌呀
修改2021-03-14 17:12:40
1.3K0
修改2021-03-14 17:12:40
举报
文章被收录于专栏:Docker记录Docker记录

Elastic Stack在x-pack中提供了免费的TLS加密通信和基于角色的访问控制(RBAC)。前面两篇博客分别介绍了ELK的安装和脚本配置以及SSL自签名证书的生成。

这篇博客我们仅使用一个elasticsearch节点并采取nginx加x-pack的方式确保elasticsearch的安全。接着为Kibana启用安全功能以及配置基于角色的访问控制,来远程访问elasticsearch。最后配置logstash的远程连接功能。

配置elasticsearch节点

步骤一:elasticsearch上配置TLS

进入elasticsearch目录

如果是deb安装的elasticsearch,主目录在/usr/share/elasticsearch目录下,config目录就是/etc/elasticsearch;如果是tar.gz直接在解压后的目录下即可。

接着在elasticsearch目录下使用下列命令生成ssl证书:

代码语言:txt
复制
bin/elasticsearch-certutil cert -out 
config/elastic-certificates.p12 -pass ""

在config目录的elasticsearch.yml配置文件,在文件末尾黏贴下列代码:

代码语言:txt
复制
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

保存文件,然后就可以启动elasticsearch了

生成密码

在elasticsearch目录下使用下面的命令生成密码:

代码语言:txt
复制
bin/elasticsearch-setup-passwords auto

也可以将auto改为interactive自定义密码。

生成的密码形式如下:

代码语言:txt
复制
Changed password for user apm_system
PASSWORD apm_system = 

Changed password for user kibana
PASSWORD kibana = 

Changed password for user logstash_system
PASSWORD logstash_system = 

Changed password for user beats_system
PASSWORD beats_system = 

Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = 

Changed password for user elastic
PASSWORD elastic = 

记录上述密码。以上密码将是后续软件登录elasticsearch的重要凭证。

配置nginx

修改/etc/nginx/nginx.conf脚本

在http{}中加入下面代码:

代码语言:txt
复制
server {
        listen       你的PORT ssl http2;
        listen       [::]:你的PORT ssl http2;
        server_name  你的IP;
        root         /usr/share/nginx/html;
                access_log  /var/log/nginx/elasticsearch_access.log;
                error_log   /var/log/nginx/elasticsearch_error.log;
        
        ssl_certificate "/path/cert.crt";
        ssl_certificate_key "/path/cert.key";
        ssl_session_cache shared:SSL:1m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_session_timeout  10m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4!DHE;
        ssl_prefer_server_ciphers on;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
                proxy_pass http://127.0.0.1:9200;#访问你的端口时,会自动代理到127.0.0.1的9200端口
        }
    }

其中.crt和.key文件通过上一篇生成SSL证书的方法生成。

重启nginx
代码语言:txt
复制
systemctl restart nginx.service

配置kibana远程访问

之前的博客已经介绍过与elasticsearch处在同一节点的启动。为了减少对计算资源的占用,我将kibana放到了本地,仅在需要使用的时候开启kibana服务远程连接elasticsearch服务器。

打开kibana的config目录下的kibana.yml文件。将下面两行的注释取消:

代码语言:txt
复制
elasticsearch.username: "user"
elasticsearch.password: "pass"

将”user”改为”kibana”,将”password”改为刚才生成的用户kibana的密码”setup-passwords”。

修改该配置文件中的elasticsearch的host:

代码语言:txt
复制
elasticsearch.hosts: ["elasticsearch的IP:Port"]

接着取消下列注释,将值改为从full改为none,这样改的目的是不要验证我们自签名的证书,或者也可以配置ca证书的路径(这个方法我没试过,当然更安全一点^_^)

代码语言:txt
复制
elasticsearch.ssl.verificationMode: none

接着启动kibana,用户名密码是刚才生成的超级用户elastic和其对应的密码。

创建新角色的方法去查参考文献吧哈哈哈

::: tip

kibana必须和初次连接elasticsearch的kibana版本相同,最好kibana和elasticsearch的版本一直都相同。

:::

配置logstash远程连接elasticsearch

修改logstash.yml

cd到logstash文件夹打开config目录下的logstash.yml。取消X-Pack Settings中下面配置的注释并修改:

代码语言:txt
复制
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.username: logstash_system
xpack.monitoring.elasticsearch.password: setup-passwords
xpack.monitoring.elasticsearch.hosts: ["elasticsearch的IP:Port"]
xpack.monitoring.elasticsearch.ssl.certificate_authority: /path/ca.crt

上面的用户名密码是之前elasticsearch为logstash自动生成的。签名ca是自签名SSL时我们自己生成的ca

修改pipelines.conf

上一篇博客中我们以收集nginx日志为例,列出了详细的配置,这次我们在之前的脚本上添加了登陆elasticsearch的用户名和密码,以及访问elasticsearch时验证自签名证书的cacert:

代码语言:txt
复制
input {
    beats {
        port => "5044"
    }
}
# The filter part of this file is commented out to indicate that it is
# optional.
filter {
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}" }
    }
    geoip {
        source => "clientip"
    }
}
output {
    elasticsearch {
        hosts => [ "elasticsearch的IP:Port" ]
        index => "nginx-access-%{+YYYY.MM.dd}"
        cacert => '/path/ca.crt'
        user => "elastic"
        password => "setup-passwords"
    }
}

修改保存好后就可以启动logstash了。

logstash的后台命令如下:

代码语言:txt
复制
nohup /path/logstash-X.X.X/bin/logstash -f /path/logstash-X.X.X/nginx-pipelines.conf --config.reload.automatic &

配置filebeats

因为filebeats和logstash运行在同一主机下,所以filebeats的配置与上一篇博客相同。

这里介绍一下filebeats后台运行的方法。

使用nohup命令之后,关掉窗口的时候filebeats也会自动关闭,因此需要使用下面的办法:

代码语言:txt
复制
sudo apt-get install screen (或者 yum install screen)
screen
nohup /path/filebeat-X.X.X-linux-x86_64/filebeat -e -c /path/filebeat-X.X.X-linux-x86_64/filebeat.yml > /path/filebeat-X.X.X-linux-x86_64/filebeat.log &

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配置elasticsearch节点
    • 步骤一:elasticsearch上配置TLS
      • 生成密码
        • 配置nginx
          • 修改/etc/nginx/nginx.conf脚本
          • 重启nginx
      • 配置kibana远程访问
        • 配置logstash远程连接elasticsearch
          • 修改logstash.yml
          • 修改pipelines.conf
        • 配置filebeats
        相关产品与服务
        Elasticsearch Service
        腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档