elasticsearch-7.x使用xpack进行安全认证_xpack.security.transport.ssl.enabled-程序员宅基地

2019年5月21日,Elastic官方发布消息: Elastic Stack 新版本6.8.0 和7.1.0的核心安全功能现免费提供。
这意味着用户现在能够对网络流量进行加密、创建和管理用户、定义能够保护索引和集群级别访问权限的角色,并且使用 Spaces 为 Kibana提供全面保护。 免费提供的核心安全功能如下:

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

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

既然新版本的es已经提供了基础的用户认证,那么多一层总比没有要强,因此接下来就实际配置一下单机版的elk和集群版的认证,两个稍微有一些不同,因此区分对待。

因为主要体现在es与kibana的认证,因此这里就只展现这两者的配置,其他logstash方面的,后续再完善。

3,单机版elk认证

本次实验elk全系版本都是基于7.4.0进行。

安装过程略过,直接来到配置阶段。

$ cat elasticsearch.yml
cluster.name: eryajf-search
node.name: es-node1
path.data: /data/elasticsearch7/data
path.logs: /data/elasticsearch7/log
network.host: 0.0.0.0
http.port: 9200
xpack.security.enabled: true # 这条配置表示开启xpack认证机制
xpack.security.transport.ssl.enabled: true
cluster.initial_master_nodes: ["es-node1"]
  • xpack.security.enabled:表示开启xpack认证机制。
  • xpack.security.transport.ssl.enabled:这条如果不配,es将起不来,会报如下错误:Transport SSL must be enabled if security is enabled on a [basic] license. Please set [xpack.security.transport.ssl.enabled] to [true] or disable security by setting [xpack.security.enabled] to [false]

配置完成,记得创建配置中涉及到的目录并授权,然后启动es。启动成功之后,再次访问es,就需要基于用户来访问了,但是在这之前,需要先给对应的用户创建密码才行。

2,为内置账号添加密码

ES中内置了几个管理其他集成组件的账号即:apm_systembeats_systemelastickibanalogstash_systemremote_monitoring_user,使用之前,首先需要添加一下密码。

$ /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]
  • interactive:给用户一一设置密码。
  • auto:自动生成密码。

如果这个地方报如下错误:

Failed to determine the health of the cluster running at http://192.168.3.42:9200
Unexpected response code [503] from calling GET http://192.168.3.42:9200/_cluster/health?pretty
Cause: master_not_discovered_exception
It is recommended that you resolve the issues with your cluster before running elasticsearch-setup-passwords.
It is very likely that the password changes will fail when run against an unhealthy cluster.
Do you want to continue with the password setup process [y/N]y

可能是有脏数据导致,此时可以停掉es,删除 data 数据目录,然后重新启动在进行操作。

配置完毕之后,可以通过如下方式访问es服务:

curl -XGET -u elastic 'localhost:9200/_xpack/security/user?pretty'
curl 127.0.0.1:9200 -u elastic

3,配置kibana连接。

开启了安全认证之后,kibana连接es以及访问es都需要认证。

变更kibana的配置,一共有两种方法,一种明文的,一种密文的。

1,明文配置

server.port: 5601
server.host: "0.0.0.0"
server.name: "es-node1"
elasticsearch.hosts: ["http://192.168.3.42:9200"]
kibana.index: ".kibana"
i18n.locale: "zh-CN"
elasticsearch.username: "kibana"
elasticsearch.password: "kibana_passwd"
xpack.reporting.encryptionKey: "a_random_string"
xpack.security.encryptionKey: "something_at_least_32_characters"
  • elasticsearch.username:连接es的用户名。
  • elasticsearch.password:连接es的密码。
  • xpack.reporting.encryptionKey:如果不添加这条配置,将会报错 Generating a random key for xpack.reporting.encryptionKey. To prevent pending reports from failing on restart, please set xpack.reporting.encryptionKey in kibana.yml
  • xpack.security.encryptionKey:如果不配置这条,将会报错 Generating a random key for xpack.security.encryptionKey. To prevent sessions from being invalidated on restart, please set xpack.security.encryptionKey in kibana.yml

2,密文配置

当然肯定推荐使用这种密文的方式进行认证,认证之前,需要首先将用户名密码保存到内置的ketstore里。

/usr/share/kibana/bin/kibana-keystore --allow-root create
/usr/share/kibana/bin/kibana-keystore --allow-root add elasticsearch.username
/usr/share/kibana/bin/kibana-keystore --allow-root add elasticsearch.password

原封不动执行如上三条命令,用户名的时候输入kibana,密码写入对应密码,接着调整kibana的配置:

server.port: 5601
server.host: "0.0.0.0"
server.name: "es-node1"
elasticsearch.hosts: ["http://192.168.3.42:9200"]
kibana.index: ".kibana"
i18n.locale: "zh-CN"
xpack.reporting.encryptionKey: "a_random_string"
xpack.security.encryptionKey: "something_at_least_32_characters"

然后重启kibana即可访问,访问的时候使用elastic的用户密码登入,将是全局管理权限,如果需要创建kibana的只读用户,则可以通过管理–用户–新建用户,对用户进行角色授权即可。

3,logstash配置认证。

打开自定义的logstash的配置文件logstash.conf,在output中增加elasticsearch的用户名和密码

[root@ELK1 ~]# vim /home/elk/logstash-7.2.1/config/logstash.conf
input {
  beats {
    port => 5044
  }
}
output {
  stdout {
    codec => rubydebug
  }
  elasticsearch {
    hosts => ["192.168.3.42:9200"]
    user => "elastic"
    password => "123456"
  }
}

 

4,集群配置。

在我配置过程中,发现集群认证需要首先配置秘钥才行,否则在给内置用户创建秘钥的时候将会报错。

1,证书。

如下操作在其中一个node节点执行即可,生成完证书传到集群其他节点即可。

/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.p12
mv elastic-* /etc/elasticsearch/
chown elasticsearch.elasticsearch elastic*

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

2,配置。

三台机器配置文件如下:

cluster.name: test-search
node.name: es-node-1
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/log
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["192.168.3.3:9300","192.168.3.4:9300","192.168.3.5:9300"]
cluster.initial_master_nodes: ["192.168.3.3:9300","192.168.3.4:9300","192.168.3.5:9300"]
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12

除了node.name使用各自主机名之外,其他配置都一样。

如上配置无误,则可以启动es。

3,为内置账号添加密码

ES中内置了几个管理其他集成组件的账号即:apm_systembeats_systemelastickibanalogstash_systemremote_monitoring_user,使用之前,首先需要添加一下密码。

$ /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]
  • interactive:给用户一一设置密码。
  • auto:自动生成密码。

配置完毕之后,可以通过如下方式访问es服务:

curl -XGET -u elastic 'localhost:9200/_xpack/security/user?pretty'
curl 127.0.0.1:9200 -u elastic

剩下的就是与上边的使用方式一致了,kibana的认证,logstash的认证等等。

其中kibana通过密文认证之后,配置如下:

server.port: 5601
server.host: "0.0.0.0"
server.name: "es-node3"
elasticsearch.hosts: ["http://192.168.3.3:9208"]
kibana.index: ".kibana"
i18n.locale: "zh-CN"

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_20143059/article/details/112992016

智能推荐

5.2 创建个人中心页面-前端部分_个人中心前端代码-程序员宅基地

文章浏览阅读7.3k次,点赞10次,收藏22次。5.2 创建个人中心页面-前端部分_个人中心前端代码

使用virtualenv新建虚拟环境出现:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd3 in position 319-程序员宅基地

文章浏览阅读647次。报错如图所示:找到该文件,更改为如图所示:成功解决:_unicodedecodeerror: 'utf-8' codec can't decode byte 0xd3 in position 0: inva

c语言十六实验答案,《C语言》上机实验题及参考答案-程序员宅基地

文章浏览阅读1.6k次。C语言编程题精选1、 编程实现对键盘输入的英文名句子进行加密。用加密方法为,当内容为英文字母时其在26字母中的其后三个字母代替该字母,若为其它字符时不变。 2、 编程实现将任意的十进制整数转换成R进制数(R在2-16之间)。3、 从键盘输入一指定金额(以元为单位,如345.78),然后显示支付该金额的各种面额人民币数量,要求显示100元、50元、10元、5元、2元、1元、5角、1角、5分、1分各多..._istudy c语言 实验16课内实践16-综合练习

PhD English Research —— Writing_phd english class 研究-程序员宅基地

文章浏览阅读137次。English Research Writing_phd english class 研究

计算机学校有什么课程设计,局域网课程设计怎么做?-程序员宅基地

文章浏览阅读294次。校园网规划摘要 : 本文通过对校园园区局域网(以下简称校园园区网)规划思想过程的论述,对就如何建立一个高效,安全的校园网提供设计思想和组网步骤依据。关键词:网络需求,规划实施计划0. 引言信息技术日新月异的今天,网络技术发展迅猛,信息传输已经不仅仅局限于单纯文本数据,数字数据的传输,随之而来的是视频,音频等多媒体技术的广泛运用。随着技术的发展,网络设备性能和传输介质容量有了极大的提高,但是由于用户..._计算机的课设咋做嘛?

C++数据结构-高效排序算法_c++如何对数组值进行排序效率最高-程序员宅基地

文章浏览阅读817次。对于基本的几种排序方法:插入,选择,冒泡。他们的复杂度均为O(n2)。算法运行所需时间增加的速度通常比数组本身增加的速度要快。希尔排序通过将原数组分为及几个子数组,先分别将这几个子数组排序,再把排序好的子数组进行排序,可以大大提高效率,排序方法可使用任意简单排序,这里使用插入排序用伪代码来表示对于h的值的把控,是需要思考的问题。如果h过大,子数组就会过多,即使子数组已经排序好,也无法显著提高效率;反之,如果h过小,子数组的元素就会过多,算法效率也会降低。_c++如何对数组值进行排序效率最高

随便推点

弹出修改模态框_如何通过操作窗口改变模态对话框内容-程序员宅基地

文章浏览阅读1.7k次。开发工具与关键技术:Visual Studio 2015作者:杨镇虹撰写时间:2019.04.20一、 html设置的一个按钮button布局 图11、给这个按钮一个onclick点击事件,里面给一个元素openUpdateModal就是用来修改模态框打开的这个按钮点击到这个元素图12、首选拿到这个按钮给的点击事件的这个元素openUpdateModal(open)打开(Update..._如何通过操作窗口改变模态对话框内容

【Web前端】Ajax超详解_前端ajax-程序员宅基地

文章浏览阅读1.8k次,点赞4次,收藏15次。本文共计两万四千字,详细的介绍了前后端交互的内容,以及Ajax的实现方式,包括XHR、Fetch和Axios。_前端ajax

为JSF定做的应用程序框架(一)-程序员宅基地

文章浏览阅读142次。JavaServer Faces (JSF) 是用于 Java Web 应用程序的第一个标准化的用户界面框架。 而 Seam 是一个扩展 JSF 的强大的应用程序框架。在这个由三部分组成的新系列中的第一篇文章中,发现这两种框架之间的互补性。Dan Allen 介绍了 Seam 对 JSF 生命周期的增强,包括上下文状态管理、 RESTful URL、Ajax remoting、适当的异常..._jsf界面框架颜色怎么弄

Django在根据models生成数据库表时报 __init__() missing 1 required positional argument: 'on_delete'...-程序员宅基地

文章浏览阅读115次。code: 1 #encoding=utf-8 2 from django.db import models 3 # Create your models here. 4 class BookInfo(models.Model): #创建书本信息类,继承models.Model 5 booktitle=models.CharField(max_length=20)..._book = models.foreignkey(oenpageinfo) typeerror: __init__() missing 1 requir

Please use a locale setting which supports utf-8_python can't change the filesystem locale after lo-程序员宅基地

文章浏览阅读5.1k次,点赞3次,收藏8次。原地址:https://wiki.yoctoproject.org/wiki/TipsAndTricks/ResolvingLocaleIssuesWhat to do when bitbake says " Sad Locale, Need UTF-8"If bitbake says:Please use a locale setting which supports utf-8..._python can't change the filesystem locale after loading so we need a utf-8 w

在bochs虚拟机中安装WindowsXP (学习)_bochs xp-程序员宅基地

文章浏览阅读9.2k次。好吧话不多说,开始安装 WIndowsXP1、下载安装bochs……(这步不会的下面可以不用看了……)2、在Bochs安装目录中创建一个WinXP文件夹(同上面的括号)3、创建虚拟硬盘用于存放WinXP镜像具体步骤:进入命令提示符,使用bximage工具生成image需要回答几个问题一:生成硬盘还是软盘二:镜像类型 flat sparse or growing三_bochs xp