公号:码农充电站pro

主页:https://codeshellme.github.io

在安装完 ES 后,ES 默认是没有任何安全防护的。

ES 的安全管理主要包括以下内容:

这里有一些免费的安全方案:

  • 设置 Nginx 方向代理。
  • 安装免费的安全插件,比如:
  • X-Pack 的 Basic 版:可参考这里。

1,身份认证

ES 中提供的认证叫做 Realms,有以下几种方式,可分为两类:

  • 内部的:不需要与 ES 外部方通信。

    • file(免费):用户名和密码保存在 ES 索引中。
    • native(免费):用户名和密码保存在 ES 索引中。
  • 外部的:需要与 ES 外部组件通信。

2,用户鉴权

用户鉴权通过定义一个角色,并分配一组权限;然后将角色分配给用户,使得用户拥有这些权限。

ES 中的权限有不同的级别,包括集群级别(30 多种)和索引级别(不到 20 种)。

ES 中提供了很多内置角色(不到 30 种)可供使用。

ES 中提供了很多关于用户与角色的 API:

3,启动 ES 安全功能

下面演示如何使用 ES 的安全功能。

启动 ES 并通过 xpack.security.enabled 参数打开安全功能:

bin\elasticsearch -E node.name=node0 -E cluster.name=mycluster -E path.data=node0_data -E http.port=9200 -E xpack.security.enabled=true

使用 elasticsearch-setup-passwords 命令启用 ES内置用户及初始 6 位密码(需要手动输入,比如是 111111):

bin\elasticsearch-setup-passwords interactive

该命令会启用下面这些用户:

  • elastic:超级用户。
  • kibana:用于 ES 与 Kibana 之间的通信。
  • kibana_system:用于 ES 与 Kibana 之间的通信。
  • apm_system
  • logstash_system
  • beats_system
  • remote_monitoring_user

启用 ES 的安全功能后,访问 ES 就需要输入用户名和密码:

也可以通过 curl 命令(并指定用户)来访问 ES:

curl -u elastic 'localhost:9200'

更多内容可参考这里。

4,启动 Kibana 安全功能

打开 Kibana 的配置文件 kibana.yml,写入下面内容:

elasticsearch.username: "kibana_system"  # 用户名
elasticsearch.password: "111111" # 密码

然后使用 bin\kibana 命令启动 Kibana。

访问 Kibana 也需要用户和密码(这里使用的是超级用户):

5,使用 Kibana 创建角色和用户

下面演示如何使用 Kibana 创建角色和用户。登录 Kibana 之后进行如下操作:

点击 Stack Management 后进入下面页面:

5.1,创建角色

点击 Create role 创建角色:

创建角色需要填写如下内容:

  • 角色名称
  • 角色对哪些索引有权限及索引的权限级别
  • 添加一个 Kibana 权限
  • 最后创建角色

经过上面的操作,创建的角色名为 test_role,该角色对 test_index 索引有只读权限;如果进行超越范围的操作,将发生错误。

5.2,创建用户

进入到创建用户的界面,点击 Create user 创建用户:

填写用户名和密码,并将角色 test_role 赋予该用户。

5.3,使用用户

使用新创建的用户登录 Kibana:

该用户只对 test_index 索引有只读权限;如果进行超越范围的操作,将发生错误。

6,传输加密

传输加密指的是在数据的传输过程中,对数据进行加密(可防止数据被抓包)。

传输加密分为集群内加密和集群间加密:

  • 集群内加密指的是 ES 集群内部各节点之间的数据传输时的加密。

    • 通过 TLS 协议完成。
  • 集群间加密指的是外部客户访问 ES 时,数据传输的加密。
    • 通过 HTTPS 协议完成。

更多的内容可参考这里。

6.1,集群内部传输加密

在 ES 中可以使用 TLS 协议对数据进行加密,需要进行以下步骤:

  • 创建 CA
  • 为 ES 节点创建证书和私钥
  • 配置证书
1,创建 CA 证书

使用如下命令创建 CA:

bin\elasticsearch-certutil ca

成功后,可以看到当前文件夹下多了一个文件:

elastic-stack-ca.p12
2,生成证书和私钥

使用如下命令为 ES 中的节点生成证书和私钥

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

成功后,可以看到当前文件夹下多了一个文件:

elastic-certificates.p12
3,配置证书

将创建好的证书 elastic-certificates.p12 放在 config/certs 目录下。

4,启动集群
# 启动第一个节点
bin\elasticsearch
-E node.name=node0
-E cluster.name=mycluster
-E path.data=node0_data
-E http.port=9200
-E xpack.security.enabled=true
-E xpack.security.transport.ssl.enabled=true
-E xpack.security.transport.ssl.verification_mode=certificate
-E xpack.security.transport.ssl.keystore.path=certs\elastic-certificates.p12
-E xpack.security.transport.ssl.truststore.path=certs\elastic-certificates.p12 # 启动第二个节点
bin\elasticsearch
-E node.name=node1
-E cluster.name=mycluster
-E path.data=node1_data
-E http.port=9201
-E xpack.security.enabled=true
-E xpack.security.transport.ssl.enabled=true
-E xpack.security.transport.ssl.verification_mode=certificate
-E xpack.security.transport.ssl.keystore.path=certs\elastic-certificates.p12
-E xpack.security.transport.ssl.truststore.path=certs\elastic-certificates.p12

不提供证书的节点将无法加入集群:

bin\elasticsearch
-E node.name=node2
-E cluster.name=mycluster
-E path.data=node2_data
-E http.port=9202
-E xpack.security.enabled=true
-E xpack.security.transport.ssl.enabled=true
-E xpack.security.transport.ssl.verification_mode=certificate
# 加入失败

也可以将配置写在配置文件 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

6.2,集群外部传输加密

通过配置如下三个参数,使得 ES 支持 HTTPS:

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

在命令行启动:

bin\elasticsearch
-E node.name=node0
-E cluster.name=mycluster
-E path.data=node0_data
-E http.port=9200
-E xpack.security.enabled=true
-E xpack.security.transport.ssl.enabled=true
-E xpack.security.transport.ssl.verification_mode=certificate
-E xpack.security.transport.ssl.keystore.path=certs\elastic-certificates.p12
-E xpack.security.transport.ssl.truststore.path=certs\elastic-certificates.p12
-E xpack.security.http.ssl.enabled=true
-E xpack.security.http.ssl.keystore.path=certs\elastic-certificates.p12
-E xpack.security.http.ssl.truststore.path=certs\elastic-certificates.p12

启动成功后,可以通过 HTTPS 协议访问 ES:

https://localhost:5601/

6.3,配置 Kibana 链接 ES HTTPS

1,为 Kibana 生成 pem 文件

首先用 openssl 为 kibana 生成 pem:

openssl pkcs12 -in elastic-certificates.p12 -cacerts -nokeys -out elastic-ca.pem

成功后会生成如下文件:

elastic-ca.pem

将该文件放在 config\certs 目录下。

2,配置 kibana.yml

在 Kibana 的配置文件 kibana.yml 中配置如下参数:

elasticsearch.hosts: ["https://localhost:9200"]
elasticsearch.ssl.certificateAuthorities: ["C:\\elasticsearch-7.10.1\\config\\certs\\elastic-ca.pem"]
elasticsearch.ssl.verificationMode: certificate
3,运行 Kibana
bin\kibana

6.4,配置 Kibana 支持 HTTPS

1,为 Kibana 生成 pem
bin/elasticsearch-certutil ca --pem

上面命令执行成功后会生成如下 zip 文件:

elastic-stack-ca.zip

将该文件解压,会有两个文件:

ca.crt
ca.key

将这两个文件放到 Kibana 的配置文件目录 config\certs。

2,配置 kibana.yml

在 Kibana 的配置文件 kibana.yml 中配置如下参数:

server.ssl.enabled: true
server.ssl.certificate: config\\certs\\ca.crt
server.ssl.key: config\\certs\\ca.key
3,运行 Kibana
bin\kibana

启动成功后,可以通过 HTTPS 协议访问 Kibana:

https://localhost:5601/

(本节完。)


推荐阅读:

ElasticSearch 搜索模板与建议

ElasticSearch 聚合分析

ElasticSearch 中的 Mapping

ElasticSearch 数据建模

ElasticSearch 分布式集群


欢迎关注作者公众号,获取更多技术干货。

ElasticSearch 集群安全的更多相关文章

  1. Ubuntu 14.04中Elasticsearch集群配置

    Ubuntu 14.04中Elasticsearch集群配置 前言:本文可用于elasticsearch集群搭建参考.细分为elasticsearch.yml配置和系统配置 达到的目的:各台机器配置成 ...

  2. elasticsearch 集群

    elasticsearch 集群 搭建elasticsearch的集群 现在假设我们有3台es机器,想要把他们搭建成为一个集群 基本配置 每个节点都要进行这样的配置: cluster.name: ba ...

  3. 我的ElasticSearch集群部署总结--大数据搜索引擎你不得不知

    摘要:世上有三类书籍:1.介绍知识,2.阐述理论,3.工具书:世间也存在两类知识:1.技术,2.思想.以下是我在部署ElasticSearch集群时的经验总结,它们大体属于第一类知识“techknow ...

  4. Elasticsearch集群中处理大型日志流的几个常用概念

    之前对于CDN的日志处理模型是从logstash agent==>>redis==>>logstash index==>>elasticsearch==>&g ...

  5. elasticsearch 集群配置

    2015-10-10 09:56 by 轩脉刃, 999 阅读, 1 评论, 收藏, 编辑 elasticsearch 集群 搭建elasticsearch的集群 现在假设我们有3台es机器,想要把他 ...

  6. 翻译【ElasticSearch Server】第一章:开始使用ElasticSearch集群(5)

    数据操作与REST API(Data manipulation with REST API) ElasticSearch REST API可用于各种任务.多亏了它,我们可以管理索引,更改实例参数,检查 ...

  7. Elasticsearch集群搭建

    现有两部机器:192.168.31.86,192.168.31.87   参考以往博文对Elasticsearch进行配置完成:http://www.cnblogs.com/zhongshengzhe ...

  8. elasticsearch集群搭建实例

    elasticsearch集群搭建实例 下个月又开始搞搜索了,几个月没动这块还好没有落下. 晚上在自己虚拟机上搭建了一个简易搜索集群,分享一下. 操作系统环境: Red Hat 4.8.2-16 el ...

  9. 解剖 Elasticsearch 集群 - 之三

    解剖 Elasticsearch 集群 - 之三 本篇文章是一系列涵盖 Elasticsearch 底层架构和原型示例的其中一篇.在本篇文章中,我们会讨论 Elasticsearch 如何提供准实时搜 ...

  10. ES2:ElasticSearch 集群配置

    ElasticSearch共有两个配置文件,都位于config目录下,分别是elasticsearch.yml和logging.yml,其中,elasticsearch.yml 用来配置Elastic ...

随机推荐

  1. Codeforces Global Round 9 E. Inversion SwapSort

    题目链接:https://codeforces.com/contest/1375/problem/E 题意 给出一个大小为 $n$ 的数组 $a$,对数组中的所有逆序对进行排序,要求按照排序后的顺序交 ...

  2. Codeforces Round #628 (Div. 2) A. EhAb AnD gCd(LCM & GCD)

    题意: GCD(a,b) + LCM(a,b) = n,已知 n ,求 a,b. 思路: 设 gcd(a, b) = k, a = xk, b = yk , k + ab / k = n xy = n ...

  3. Codeforces Round #648 (Div. 2) E. Maximum Subsequence Value(鸽巢原理)

    题目链接:https://codeforces.com/problemset/problem/1365/E 题意 有 $n$ 个元素,定义大小为 $k$ 的集合值为 $\sum2^i$,其中,若集合内 ...

  4. Linux core dump使用

    什么是 core dump? core dump是一个当进程意外终止时包含进程内存内容的文件.当程序崩溃的时候,core dump由kernel触发.core dump可以作为程序崩溃时的事后快照(p ...

  5. EF Core数据访问入门

    重要概念 Entity Framework (EF) Core 是轻量化.可扩展.开源和跨平台的数据访问技术,它还是一 种对象关系映射器 (ORM),它使 .NET 开发人员能够使用面向对象的思想处理 ...

  6. ssh原理及加密传输

    1.ssh??(保证过程中是加密的,即安全的)ssh 是 Secure Shell 的缩写,是一个建立在应用层上的安全远程管理协议.ssh 是目前较为可靠的传输协议,专为远程登录会话和其他网络服务提供 ...

  7. OpenStack Train版-5.安装nova计算服务(控制节点)

    nova计算服务需要在 控制节点 和 计算节点 都安装 控制节点主要安装 ​ nova-api(nova主服务)​ nova-scheduler(nova调度服务)​ nova-conductor(n ...

  8. Gitlab 快速部署及日常维护 (一)

    一.GitLab简介GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务 二.GitLab系统架构git用户的主目录通常是/home/git(~ ...

  9. Leetcode(25)- k个一组翻转链表

    给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度.如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序. 示例 : 给定这个链表: ...

  10. codeforces - 978D【思维】

    D. Almost Arithmetic Progression time limit per test 1 second memory limit per test 256 megabytes in ...