ElasticSearch的安全配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch的安全配置相关的知识,希望对你有一定的参考价值。

参考技术A 根据安全的3A要求,ES的安全需求分为以下几点:

此外ES是一款在网络上提供服务的产品,其通讯流量同样需要进行加密。

PS:最近根据之前写的文档做了一遍,发现还是有很多缺失的部分,因此重新做了一下更新。

ES的x-pack套件提供了基础的账号认证功能,其功能称为Realm。根据付费情况不同,Realm模块提供不同的认证能力。

此外还有一些开源的解决方案,此处不做赘述。

Realm的开启方式:

在ES启动或者配置文件中进行配置:

bin/elasticsearch -E xxx -E xpack.security.enabled=true

需要注意的是,打开Realm后,需要根据后文的配置将集群内部通讯加密功能打开,否则进行下一步时会报错,目前我尝试的是7.4版本,其他版本:

这个后来我经过研究发现,如果是使用basic类型的license,那么如果开启了x-pack的安全功能,传输层的ssl加密功能是一定要开启的。但是,如果使用trial类型的license,那么可以选择只开启安全功能,但是不启用传输层加密。不知道这是一个实现上的bug还是故意为之。
开启方法:

设置默认的用户和组:

bin/elasticsearch-setup-passwords interactive

这个命令名称在7.4版本上似乎和有些资料中描述的不太一致。

控制台输出:

为kibana设置用户和密码,修改kibana.yml:

ES会提供一些默认账号供使用,使用者也可以自己创建账号,并为其赋予相应的权限。

我自己配置了以后,使用kibana账号登录kibana居然登录不上,后来换成了elastic账号才能够正常登入kibana,具体原因没有研究,后面有机会再看。

https://www.elastic.co/guide/en/elasticsearch/reference/7.x/built-in-users.html

ES的鉴权能力采用的是基于角色的访问控制的方法(RBAC)。下图是ES官方文档上的一张图,可以说明这种关系:

ES 提供了两种类型级别的权限,在这两种类别下又有更加细粒度的权限划分:

具体提供的权限列表可以从官方文档获取:

https://www.elastic.co/guide/en/elasticsearch/reference/7.x/security-privileges.html

在ES中,用户可以创建角色,并将各种类型的权限赋予角色。

定义角色的官方文档在:

https://www.elastic.co/guide/en/elasticsearch/reference/7.x/defining-roles.html

需要定义的内容分为5个部分:

用户和角色都可以在kibana页面上进行修改:

通讯流量加密包括集群内部的通讯流量加密以及集群与集群外的通讯流量加密。

集群内部通讯的流量加密需要通过对ES进行配置来完成。通过配置证书,使用ssl进行加密。

主要的目的是:1. 防止非法的ES节点加入集群,2. 防止通讯流量被监听。

首先需要制作一个证书,我在这里假设,你并没有预先获得一个CA,需要先生成一个:

这样,在ES的根目录下会产生一个证书文件,默认名称是 elastic-stack-ca.p12

然后使用这个ca生成证书和私钥:

默认情况下,会产生一个PKCS#12格式的文件: elastic-certificates.p12

将这个文件拷贝到预先创建的目录

修改elasticsearch.yml文件

需要注意一点经过实际操作,配置中的相对路径的基准是: $ES_HOME/config/ ,而非ES本身的根目录。这一点在配置后,启动ES节点会发现报错:

其中 verification_mode 会有3种模式:

certificate : 需要使用同样的证书才能加入集群

full : 除了验证证书以外,还需要检测hostname和ip

none : 不需要验证证书即可加入集群,一般在调试情况下使用。

至此,ES集群内部加密通讯配置完成。

参考文档: https://www.elastic.co/guide/en/elasticsearch/reference/7.x/configuring-tls.html#node-certificates

ES本身对外提供基于http的rest接口,需要对这个接口的通信进行加密,需要在elasticsearch.yml中配置

使用 kibana 和ES进行通讯,需要修改 kibana 的配置文件 kibana.yml

需要注意的是,ES集群如果是使用自签的证书的话,需要加入配置:

即使这样,kibana后台也有大量的报错:

同时 kibana 也需要设置自己的http服务为https:

参考文档:

https://www.elastic.co/guide/en/elasticsearch/reference/7.x/configuring-tls.html#tls-http

https://www.elastic.co/guide/en/kibana/7.x/using-kibana-with-security.html

https://www.elastic.co/guide/en/kibana/7.x/configuring-tls.html

开启ES的审计日志,需要在ES的配置文件 elasticsearch.yml 中添加配置:

完成配置后,需要重启节点生效。

参考文档:

https://www.elastic.co/guide/en/elasticsearch/reference/master/enable-audit-logging.html

除了开关之外,ES的配置文件中还有很多详细的设置,更多详情可以参考:

https://www.elastic.co/guide/en/elasticsearch/reference/master/auditing-settings.html

在审计功能开启后,相应节点的日志目录下,会有一个 xxx_audit.json 的文件,里面会有相关的安全事件记录其中。

以上是关于ElasticSearch的安全配置的主要内容,如果未能解决你的问题,请参考以下文章

elastic search 设置外网访问

无法将StormCrawler连接到安全的Elasticsearch

Logstash+elasticsearch+elastic+nignx

elastic

Elasticsearch:找回密码 - Password Recovery

Elasticsearch:找回密码 - Password Recovery