说说Elasticsearch那点事

ElasticSearch的安全配置

2020-02-19  本文已影响0人  饿虎嗷呜

ElasticSearch的安全配置

安全需求

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

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

账号认证

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

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

Realm的开启方式:

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

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

设置默认的用户和组:

bin/elasticsearch-password interactice

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

elasticsearch.username: "kibana"
elasticsearch.password: "xxxxxx"

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

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

账号鉴权

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

authorization.png

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

{
  "run_as": [ ... ], 
  "cluster": [ ... ], 
  "global": { ... }, 
  "indices": [ ... ], 
  "applications": [ ... ] 
}

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

通讯加密

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

集群内部通讯

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

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

首先需要制作一个证书:

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

然后需要对ElasticSearch进行设置,修改elasticsearch.yml文件

xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate 
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12 
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12 

其中verification_mode会有3种模式:

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

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

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

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

集群对外通讯

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

xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: certs/elastic-certificates.p12 
xpack.security.http.ssl.truststore.path: certs/elastic-certificates.p12 

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

elasticsearch.username: "kibana"
elasticsearch.password: "kibanapassword"

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

server.ssl.enabled: true
server.ssl.certificate: "/path/to/kibana-server.crt"
server.ssl.key: "/path/to/kibana-server.key"

参考文档:

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

上一篇 下一篇

猜你喜欢

热点阅读