1、版本支持性

不同版本对 Security 的支持不同,

1.1 对于ES 6.x 或之前版本

对于 ES 6.8 及之前版本,需要手动安装 x-pack

bin/elasticsearch-plugin install x-pack
bin/kibana-plugin install x-pack

1.2 对于ES 7.x

ES 的安全策略需要 X-Pack 插件的支持,不过对于7.X以上版本 X-Pack 已经内置,所以不需要额外的操作。可通过以下指令查看当前已安装的插件:

对于ES 7.x 的版本,基本安全功能为免费,但是不包括单点登录、LDAP身份认证以及字段和文档级权限管理,参阅:

1.3 对于 ES 8.x 默认开启 Security

2、Minimal security(最低安全等级:单节点)

不同环境对集群安全的策略等级要求不同,主要区别在于你是开发环境还是生产集群环境。ES提供了三个不同等级的安全策略:最低安全等级、基本安全等级、基本安全 + HTTPS

2.1 概念

官方:最小化安全策略等级适用于本地开发,在当前模式下,可以对单节点服务设置密码来提供安全防护功能,但是对于本地集群环境,需要开启TLS,以保证节点之间通信安全。

就实际而言,在处于 ES 学习 或者本地开发模式下,是可以关闭 Security 功能的,因为如果是以学习为目的,不存在所谓的数据安全问题,因为数据即便被删除也是没关系的。而如果在学习或开发模式下也开启安全策略,意味着你需要频繁的跟密码较劲,实属没必要。

2.2 执行步骤

2.2.1 启用 Security

ES 7.x 版本默认禁用 Security,可通过以下配置启用 Security

xpack.security.enabled

2.2.2 创建用户密码

自动生成密码

./bin/elasticsearch-setup-passwords auto

指定密码

./bin/elasticsearch-setup-passwords interactive

2.2.3 配置Kibana的账号信息

3、Basic security(基本安全等级:集群Security)

3.1 适用范围和概念

最低安全配置仅适用于单节点服务,而不符合集群的最低安全要求。如果集群有多个节点,那么您必须在节点之间配置 TLS。如果您不启用 TLS,无法启动生产集群。

传输层依赖双向 TLS 对节点进行加密和认证。正确应用 TLS 可确保恶意节点无法加入集群并与其他节点交换数据。虽然在 HTTP 层实现用户名和密码身份验证对于保护本地集群很有用,但节点之间的通信安全需要 TLS。

Transport 协议是 Elasticsearch 节点用于相互通信的协议的名称。此名称特定于 Elasticsearch,用于区分传输端口(默认 9300)和 HTTP 端口(默认 9200)。节点使用传输端口相互通信,REST 客户端使用 HTTP 端口与 Elasticsearch 通信。

3.2 执行步骤

3.2.1 配置文件 elasticsearch.yml

启用 security安全认证

#开启security
xpack.security.enabled: true
#配置SSL证书
xpack.security.transport.ssl.enabled: true

设置验证模式为:certificate

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

3.2.2 生成密钥文件,生成:elastic-stack-ca.p12 文件。

bin/elasticsearch-certutil ca
  • 出现提示时,接受默认文件名,即 elastic-stack-ca.p12. 此文件包含 CA 的公共证书和用于为每个节点签署证书的私钥。
  • 输入 CA 的密码。如果不是用于生产环境,您可以选择将密码留空。

3.2.3 为节点颁发证书,生成: elastic-certificates.p12 证书

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

elastic-stack-ca.p12 是用于签署证书的 CA 文件的默认名称。

  • 此过程需要为CA 文件生成密码,如非生产环境,可以留空,直接按 Enter 即可
  • 为证书创建密码并接受默认文件名。输出文件是一个名为 elastic-certificates.p12. 此文件包含节点证书、节点密钥和 CA 证书。

3.2.4 把证书拷贝的每个节点(如果设置了certs/目录,此目录在config目录下),按照提示操作

scp elastic-certificates.p12 root@192.168.3.182:/usr/local/elasticsearch-7.13.0

把当前目录下的 elastic-certificates.p12 拷贝至 192.168.3.182 的 /usr/local/elasticsearch-7.13.0 目录下

3.2.5 启动所有节点(练习的时候记得清空data中的节点数据,考试不能)

3.2.6 设置集群密码

bin/elasticsearch-setup-passwords interactive

3.2.7 配置Kibana

4、Basic security plus secured HTTPS traffic(基本安全+HTTPS)

在生产环境中,如果没有基于HTTPS上启用 TLS,那么部分安全功能会无法使用,比如Token和API密钥,

4.1 前置条件

启用 HTTPS 必须要配置集群 Security,即基础集群安全策略。

4.2 配置 HTTPS

4.2.1 保证每个节点的服务处于停止状态

4.2.2 生成证书签名文件

. /bin/ elasticsearch - certutil http

此命令会生成一个 .zip文件,其中包含用于 Elasticsearch 和 Kibana 的证书和密钥。每个文件夹都包含一个 README.txt 解释如何使用这些文件。

  1. 当询问您是否要生成 CSR 时,请输入 n
  2. 当询问您是否要使用现有 CA 时,输入 y
  3. 输入您的 CA 的路径。elastic-stack-ca.p12这是您为集群生成 的文件的绝对路径。
  4. 输入您的 CA 的密码。
  5. 输入证书的到期值。您可以输入年、月或日的有效期。例如,输入 90D90 天。
  6. 当询问您是否要为每个节点生成一个证书时,输入 y.
    每个证书都有自己的私钥,并针对特定的主机名或 IP 地址颁发。
  7. 出现提示时,输入集群中第一个节点的名称。使用生成节点证书时使用的相同节点名称。
  8. 输入用于连接到您的第一个节点的所有主机名。这些主机名将作为 DNS 名称添加到证书的主题备用名称 (SAN) 字段中。
    列出用于通过 HTTPS 连接到集群的每个主机名和变体。
  9. 输入客户端可用于连接到您的节点的 IP 地址。
  10. 对集群中的每个其他节点重复这些步骤。

4.2.3 设置私钥密码。

4.2.4 解压 elasticsearch-ssl-http.zip文件

/elasticsearch
|_ README.txt
|_ http.p12
|_ sample-elasticsearch.yml
/kibana
|_ README**.txt
|_ elasticsearch-ca.pem
|_ sample-kibana.yml

4.2.5 在集群中的每个节点上

  • 将相关 http.p12证书复制到 $ES_PATH_CONF目录中

  • 配置 elasticsearch.yml 文件启用 HTTPS 并且指定 http.p12 安全证书的位置

    xpack.security.http.ssl.enabled: true
    xpack.security.http.ssl.keystore.path: http.p12
    
  • 把私钥密码添加到 Elasticsearch 的安全设置中

  • 启动每个节点

QQ + 微信