X-Pack

X-Pack

一、X-Pack 概览

1.1、利用 X-Pack 拓展可能性。

X-Pack 是集成了多种便捷功能的单个插件 — security、alerting、monitoring、reporting、graph 探索和 machine learning — 您可以在 Elastic Stack 中放心地使用这些功能。
单就其自身而言,Elastic Stack 就是一款值得考虑的强大工具。X-Pack 将诸多强大功能集合到一个单独的程序包中,更将它带上了一个新的层次。
x-pack是elasticsearch的一个扩展包,将安全,警告,监视,图形和报告功能捆绑在一个易于安装的软件包中,虽然x-pack被设计为一个无缝的工作,但是你可以轻松的启用或者关闭一些功能。

1.2、X-Pack 功能介绍

X-Pack 提供以下几个级别保护elastic集群
1)用户验证
2)授权和基于角色的访问控制
3)节点/客户端认证和信道加密
4)审计

通俗讲解:
安全防护功能:访问验证。
实时监控功能:实时监控集群的CPU、磁盘等负载;
生成报告功能:图形化展示你的集群使用情况。
还有,机器学习等功能。
以上这些都是X-pack的核心功能点。

1.3、xpack演变:

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

安全部分免费之前,如何保证基础安全?

  • 场景一:全部“裸奔”,相信这在国内占据了非常大的比重。
    内网部署,不对外提供服务。或者ES作为业务基础支撑,不公网开放9200等常用端口,开放的是业务的服务端口。
    可能暴露问题:公司或团队内部开放9200、5601端口,基本head插件、kibana都能连接,极易导致线上索引或数据可能被误删。
  • 场景二:加了简单防护。
    一般使用Nginx身份认证+防火墙策略控制。
  • 场景三:整合使用了第三方安全认证方案。
    比如:SearchGuard、ReadonlyREST。
  • 场景四:付费购买了Elastic-Xpack黄金版或白金版服务。
    一般是银行等土豪大客户,对安全、预警、机器学习等付费功能需求迫切。

二、ES集群配置

2.1、生成证书(非集群可以跳过生成证书步骤)

以3台服务器的集群为例。在服务器1(任选一台服务器生成证书就行)bin目录下执行以下命令生成两个证书:

./elasticsearch-certutil ca
./elasticsearch-certutil cert --ca elastic-stack-ca.p12

两条命令一路回车即可,不需要给秘钥再添加密码。执行完以后会生成两个证书,证书在安装目录bin目录的上一级;
将两个证书移动到安装目录的config目录下(非config目录会报错);
将服务器1上的两个证书复制到另外两个ES服务器的config目录下;
其实生成证书这个步骤很好理解,ES集群之间需要进行数据同步,当给ES集群设置密码以后,ES集群的各服务器之间互相认可对方,证书就是这个作用。

2.2、修改elasticsearch.yml

elasticsearch.yml中新增如下配置:

xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
# 非集群不用增加下面三行
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /xxxx/xxxx/config/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /xxxx/xxxx/elasticsearch-7.6.2/config/elastic-certificates.p12

2.3、重启ES服务器

依次重启3台服务器,生产环境ES集群不能停止服务,所以采用每次重启一台,切不可全部停止。

2.4、设置ES账号密码

在服务器1(挑一台服务器执行即可,不需要每台服务器都执行)上ES的bin目录下执行如下命令设置密码:
ES内置elastic、apm_system、logstash_system、kibana等内置用户,需要分别为这些账户设置密码,密码中不要包含@符号,有坑。需要记住自己设置的密码,后续过程需要使用。

# interactiv手动设置密码
./elasticsearch-setup-passwords interactive

也可使用:

# 自动生成密码
./elasticsearch-setup-passwords auto

如果在设置密码的过程中报错,重新执行此命令再设置一次即可,不可跳过报错。
设置完账号密码以后,在命令行中执行如下命令验证一下账号密码是否设置成功:

curl -XGET -u elastic ‘http://${ip}:9200/_xpack/security/user?pretty’

若出现提示输入elastic账户的密码,则账号密码设置成功。

三、Kibana配置

3.1、修改kibana.yml

kibana.yml文件中新增配置:

xpack.reporting.encryptionKey: "a_random_string"
xpack.security.encryptionKey: "something_at_least_32_characters"
# 明文配置,则加上以下两行。推荐密文配置,参考步骤3.2
elasticsearch.username: "kibana"
elasticseacr.password: "kibana_passwd"

3.2、设置账户密码(密文配置)

在bin目录下执行:

./kibana-keystore create
./kibana-keystore add elasticsearch.username
# 输入1.4中设置的账户:elastic
./kibana-keystore add elasticsearch.password
# 输入1.4中设置的elastic账户的密码

3.3、重启Kibana

kibana进程查找命令:netstat -tunlp|grep 5601

启动命令:nohup ./kibana &

四、Logstash配置

4.1、修改logstash.yml

logstash.yml(位于安装目录config下)文件中新增如下配置:
logstash_system为ES的内置账户,只有监控权限,用于心跳检测ES服务器的状态。此账户权限非常小,所以这里密码采用明文写在配置文件也不要紧。

xpack.monitoring.enabled: true
# 账户logstash_system为ES的内置账户
xpack.monitoring.elasticsearch.username: logstash_system
# 设置的密码
xpack.monitoring.elasticsearch.password: yourPassword

4.2、设置账户密码

在bin目录下执行:

./logstash-keystore create
# 执行后 选Y
./logstash-keystore add ES_USER 
# 账户:elastic,这里不要使用logstash_system这个账号,这个账号没有增删改索引的权限
./logstash-keystore add ES_PWD
# elastic账户的密码

4.3修改conf文件

修改logstash的配置文件,一般是自己新增的配置文件,位于config文件夹下。
在output模块中新增账号,密码

output {
    elasticsearch {
      action => "%{[@metadata][action]}"
      hosts => ["ip1:9200", "ip2:9200", "ip3:9200"]
      index => "demo_index"
      document_id => "%{id}"
      # 新增如下两行:采用密文配置,要使用明文可自行查看官方文档
      user => ${ES_USER}
      password => ${ES_PWD}
    }
}

4.4、重启Logstash

重启后观察启动日志,有无ERROR报错,无ERROR即正常。或者验证数据有没有通过Logstash同步到ES上面。到这里ELK就全部配置完成。

五、验证集群状态

在服务器中执行如下命令,验证ES集群状态:

curl -XGET -u ${username}:${pwd} http://${ip}:9200/_cluster/health?pretty

集群状态为green就大功告成。如果为yellow就稍等一会,说明有副本分片还未恢复。如果集群状态为red,说明有主分片未恢复,需要去查看是否有ES服务器还未重启成功。

参考:

https://blog.csdn.net/web15286201346/article/details/123893428?spm=1001.2014.3001.5506

评论

暂无

添加新评论