专栏首页阿冬的运维技术栈Elastic Stack 7.5 X-Pack 安全功能部署

Elastic Stack 7.5 X-Pack 安全功能部署

场景

elasticsearch kibana 基本上是多人使用的, 所以进行权限控制是必然,以提高安全保障

在2019年5月21日,Elastic官方发布消息:Elastic Stack 新版本6.8.0 和7.1.0的核心安全功能现免费提供。

这意味着用户现在能够对网络流量进行加密、创建和管理用户、定义能够保护索引和集群级别访问权限的角色,并且使用 Spaces 为 Kibana提供全面保护。免费提供的核心安全功能如下:

1)TLS 功能。可对通信进行加密; 2)文件和原生 Realm。可用于创建和管理用户; 3)基于角色的访问控制。可用于控制用户对集群 API 和索引的访问权限; 通过针对 Kibana Spaces 的安全功能,还可允许在Kibana 中实现多租户。

官网权威指南

https://www.elastic.co/guide/en/elasticsearch/reference/7.5/encrypting-communications-hosts.html

1、x-pack演变

1,5.X版本之前:没有x-pack,是独立的:security安全,watch查看,alert警告等独立单元。 2,5.X版本:对原本的安全,警告,监视,图形和报告做了一个封装,形成了x-pack。 3,6.3 版本之前:需要额外安装。 4,6.3版本及之后:已经集成在一起发布,无需额外安装,基础安全属于付费黄金版内容。7 .1版本:基础安全免费。

2、安全部分免费之前,大家怎么保证基础安全?

场景一:全部“裸奔”,相信这在国内占据了非常大的比重。 内网部署,不对外提供服务。或者ES作为业务基础支撑,不公网开放9200等常用端口,开放的是业务的服务端口。 可能暴露问题:公司或团队内部开放9200、5601端口,基本head插件、kibana都能连接,极易导致线上索引或数据可能被误删。

场景二:加了简单防护。 一般使用Nginx身份认证+防火墙策略控制。

场景三:整合使用了第三方安全认证方案。 比如:SearchGuard、ReadonlyREST。

场景四:付费购买了Elastic-Xpack黄金版或白金版服务。 一般是银行等土豪大客户,对安全、预警、机器学习等付费功能需求迫切,如:宁波银行付费购买白金服务。

以上内容摘自:https://blog.csdn.net/laoyang360/article/details/90554761

本次配置的ELK软件版本

[root@elk-master ~]# rpm -qa elasticsearch logstash kibanaelasticsearch-7.5.0-1.x86_64logstash-7.5.0-1.noarchkibana-7.5.0-1.x86_64

环境

192.168.73.133 主节点 安装:elasticsearch、logstash、Kibana、java

192.168.73.135 node节点安装: elasticsearch、logstash

首先在Elasticsearch主节点进行配置

配置TLS和身份验证

创建证书

/usr/share/elasticsearch/bin/elasticsearch-certutil ca/usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12#两条命令均一路回车即可,不需要给秘钥再添加密码。#证书创建完成之后,默认在es的数据目录,这里统一放到etc下:ls elastic-*elastic-certificates.p12  elastic-stack-ca.p12mv elastic-* /etc/elasticsearch/#添加elasticsearch组权限chown elasticsearch.elasticsearch elastic*chgrp elasticsearch /etc/elasticsearch/elastic-certificates.p12 /etc/elasticsearch/elastic-stack-ca.p12#修改文件权限640chmod 640 /etc/elasticsearch/elastic-certificates.p12 /etc/elasticsearch/elastic-stack-ca.p12 

同样,将如上命令生成的两个证书文件拷贝到另外两台机器作为通信依据

elasticserch主节点配置文件如下

[root@elk-master ~]# egrep -v "*#|^$" /etc/elasticsearch/elasticsearch.ymlcluster.name: elk-clusternode.name: elk-1node.master: truenode.data: truepath.data: /var/lib/elasticsearchpath.logs: /var/log/elasticsearchbootstrap.memory_lock: falsenetwork.host: 192.168.73.133http.port: 9200discovery.zen.ping.unicast.hosts: ["192.168.73.133", "192.168.73.135"]discovery.zen.minimum_master_nodes: 1http.cors.enabled: truehttp.cors.allow-origin: "*"http.cors.allow-credentials: truehttp.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETEhttp.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Typexpack.security.enabled: truexpack.security.transport.ssl.enabled: truexpack.security.transport.ssl.verification_mode: certificatexpack.security.transport.ssl.keystore.path: /etc/elasticsearch/elastic-certificates.p12xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12

重启elasticsearch 服务

systemctl    restart   elasticsearch

配置身份验证

elastic 提供两种方式创建身份验证

#系统自动生成密码/usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto#自定义密码usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive

将elasticsearch 密码添加至elasticsearch-keystore文件

/usr/share/elasticsearch/bin/elasticsearch-keystore  add xpack.security.transport.ssl.keystore.secure_password/usr/share/elasticsearch/bin/elasticsearch-keystore  add xpack.security.transport.ssl.truststore.secure_password

验证节点状态

[root@elk-master ~]# curl -u elastic:Goldwind@2019 http://192.168.73.133:9200/_cat/nodes?v       ip             heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name192.168.73.133           44          96   3    0.39    0.35     0.33 dilm      *      elk-1

其他Elasticsearch节点配置

elastic 节点之间交互需要通过证书,证书不一致会导致节点无法加入到集群,直接scp拷贝过去即可,节点加入到集群后用户验证是通过elasticsearch-keystore文件进行身份验证

拷贝证书文件和身份认证文件到其他elastic节点

[root@elk-node1 elasticsearch]# scp elastic-certificates.p12  elastic-stack-ca.p12  elasticsearch.keystore  root@192.168.73.135:/etc/elasticsearch/root@192.168.73.135's password:

elastic 配置文件

[root@elk-node1 elasticsearch]# egrep -v "*#|^$" /etc/elasticsearch/elasticsearch.ymlcluster.name: elk-clusternode.name: elk-2path.data: /var/lib/elasticsearchpath.logs: /var/log/elasticsearchnetwork.host: 192.168.73.135http.port: 9200discovery.zen.ping.unicast.hosts: ["192.168.73.133", "192.168.73.135"]discovery.zen.minimum_master_nodes: 1http.cors.enabled: truehttp.cors.allow-origin: "*"http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETEhttp.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length, X-User"xpack.security.enabled: truexpack.security.transport.ssl.enabled: truexpack.security.transport.ssl.verification_mode: certificatexpack.security.transport.ssl.keystore.path: /etc/elasticsearch/elastic-certificates.p12xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12

重启elasticsearch 服务

systemctl    restart   elasticsearch

查看elasticsearch集群状态

[root@elk-master ~]# curl -u elastic:Goldwind@2019 http://192.168.73.133:9200/_cat/nodes?v       ip             heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name192.168.73.133           44          96   3    0.39    0.35     0.33 dilm      *      elk-1192.168.73.135           25          96   2    0.02    0.08     0.09 dilm      -      elk-2

Kibana 配置文件如下

[root@elk-master ~]# egrep  -v "*#|^$" /etc/kibana/kibana.ymlserver.port: 5601server.host: "192.168.73.133"server.name: "192.168.73.133"elasticsearch.hosts: ["http://192.168.73.133:9200"]kibana.index: ".kibana"elasticsearch.username: "kibana"elasticsearch.password: "Goldwind@2019"logging.quiet: truei18n.locale: "zh-CN"

Logstash采集日志的配置(与之前没有变化)

[root@elk-master ~]# cat /etc/logstash/conf.d/elk.conf input {    file {        path => "/var/log/messages"        type => "system"        start_position => "beginning"    }     file {        path => "/var/log/secure"        type => "secure"        start_position => "beginning"    }
    file {        path => "/var/log/httpd/access_log"        type => "http"        start_position => "beginning"    }        file {        path => "/usr/local/nginx/logs/elk.access.log"        type => "nginx"        start_position => "beginning"    } } output {    if [type] == "http" {        redis {            host => "192.168.73.133"            password => 'root123'            port => "6379"            db => "2"            data_type => "list"            key => 'nagios_http'         }    }     if [type] == "nginx" {        redis {            host => "192.168.73.133"            password => 'root123'            port => "6379"            db => "2"            data_type => "list"            key => 'nagios_nginx'         }    }     if [type] == "secure" {        redis {            host => "192.168.73.133"            password => 'root123'            port => "6379"            db => "2"            data_type => "list"            key => 'nagios_secure'         }    }     if [type] == "system" {        redis {            host => "192.168.73.133"            password => 'root123'            port => "6379"            db => "2"            data_type => "list"            key => 'nagios_system'         }    }} 

Logstash传输日志的配置(需要新增加es的认证账号密码)

[root@elk-logstash ~]# cat /etc/logstash/conf.d/redis-out.conf input {    redis {        type => "system"        host => "192.168.73.133"        password => 'root123'        port => "6379"        db => "2"        data_type => "list"        key => 'nagios_system'     batch_count => 1     }        redis {        type => "http"        host => "192.168.73.133"        password => 'root123'        port => "6379"        db => "2"        data_type => "list"        key => 'nagios_http'     batch_count => 1     }     redis {        type => "nginx"        host => "192.168.73.133"        password => 'root123'        port => "6379"        db => "2"        data_type => "list"        key => 'nagios_nginx'    batch_count => 1     }        redis {        type => "secure"        host => "192.168.73.133"        password => 'root123'        port => "6379"        db => "2"        data_type => "list"        key => 'nagios_secure'     batch_count => 1    }}output {    if [type] == "system" {        elasticsearch {            hosts => ["192.168.73.133:9200"]            index => "nagios-system-%{+YYYY.MM.dd}"            user => "elastic"            password => "Goldwind@2019"                sniffing => false        }    }    if [type] == "secure" {        elasticsearch {            hosts => ["192.168.73.133:9200"]            index => "nagios-secure-%{+YYYY.MM.dd}"            user => "elastic"            password => "Goldwind@2019"                   sniffing => false        }    }    if [type] == "http" {        elasticsearch {            hosts => ["192.168.73.133:9200"]            index => "nagios-http-%{+YYYY.MM.dd}"            user => "elastic"            password => "Goldwind@2019"                   sniffing => false        }    }    if [type] == "nginx" {        elasticsearch {            hosts => ["192.168.73.133:9200"]            index => "nagios-nginx-%{+YYYY.MM.dd}"            user => "elastic"            password => "Goldwind@2019"                   sniffing => false        }    }}

配置head插件

elasticsearch安装x-pack插件之后,head插件就无法使用了,因为x-pack中加入了安全模块(security机制),这个时候需要在elasticseach.yml中再增加下面一行配置即可解决

elasticsearch配置文件

http.cors.enabled: truehttp.cors.allow-origin: "*"http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type

然后在每次使用head插件的时候,按照如下的格式输入,其中auth_user是es的用户名,auth_password是es的密码:

http://192.168.73.133:9100/?auth_user=elastic&auth_password=Goldwind@2019

Kibana Web

新建用户, 分配角色

2

本文分享自微信公众号 - 阿冬的运维技术栈(gh_fa71be5df518),作者:Double冬

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 快速搭建ELK7.5版本的日志分析系统--搭建篇

    ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部

    用户6641876
  • 跟我一步步二进制部署高可用kubernetes集群(下)

    在kube-public 空间里创建一个名字为nginx-dp 的 deployment ,,使用nginx 镜像

    用户6641876
  • UNIX系统上的抓包工具tcpdump常用命令说明

    tcpdump采用命令行方式对接口的数据包进行筛选抓取,其丰富特性表现在灵活的表达式上。 不带任何选项的tcpdump,默认会抓取第一个网络接口,且只有将tcp...

    用户6641876
  • 想玩API,这些套路我来告诉你!

    小伙伴是不是时常听说各种api接口的问题呢,可能许多人第一感觉:那是什么个玩意儿,那么多人回去研究它,今天思梦PHP小编就来为你揭开他的神秘的面纱,先看一下百度...

    思梦php
  • 一日一技:巧用or关键字实现多重条件判断

    在Python开发过程中,我们难免会遇到多重条件判断的情况的情况,此时除了用很多的 if...elif...else以外,还可以巧用 or关键字实现。

    青南
  • Hadoop离线数据分析平台实战——440DataApi后台架构搭建Hadoop离线数据分析平台实战——440DataApi后台架构搭建

    Hadoop离线数据分析平台实战——440DataApi后台架构搭建 项目进度 模块名称 完成情况 1. 程序后台框架搭建 未完成 2. 用户...

    Albert陈凯
  • Python黑魔法: 使用or关键字实现多重选择

    在Python开发过程中,我们难免会遇到多重条件判断的情况的情况,此时除了用很多的if...elif...else以外,还可以巧用or关键字实现。

    马哥Python
  • Django项目之Elasticsearch搜索引擎

    sudo docker image pull delron/elasticsearch-ik:2.4.6-1.0

    菲宇
  • ES初体验

    2、 将elasticsearch-workspace文件夹和software文件夹拷贝到linux系统根目录,如果已经存在则删除。

    小尘哥
  • ApiCloudApp开发-$api is undefined

    在apicloud文档中 关于数据储存的部分,可以支持我们h5开发常用到的localStore模块

    宣言言言

扫码关注云+社区

领取腾讯云代金券