ElasticSearch 集群安全
公号:码农充电站pro
主页:https://codeshellme.github.io
在安装完 ES 后,ES 默认是没有任何安全防护的。
ES 的安全管理主要包括以下内容:
这里有一些免费的安全方案:
- 设置 Nginx 方向代理。
- 安装免费的安全插件,比如:
- Search Guard:一个安全和报警的 ES 插件,分收费版和免费版。
- Readonly REST
- X-Pack 的 Basic 版:可参考这里。
1,身份认证
ES 中提供的认证叫做 Realms,有以下几种方式,可分为两类:
- 内部的:不需要与 ES 外部方通信。
- 外部的:需要与 ES 外部组件通信。
- ldap(收费)
- active_directory(收费)
- pki(收费)
- saml(收费)
- kerberos(收费)
2,用户鉴权
用户鉴权通过定义一个角色,并分配一组权限;然后将角色分配给用户,使得用户拥有这些权限。
ES 中的权限有不同的级别,包括集群级别(30 多种)和索引级别(不到 20 种)。
ES 中提供了很多内置角色(不到 30 种)可供使用。
ES 中提供了很多关于用户与角色的 API:
- 关于用户:
- Change passwords:修改密码。
- Create or update users:创建更新用户。
- Delete users:删除用户。
- Enable users:打开用户。
- Disable users:禁止用户。
- Get users:查看用户信息。
- 关于角色:
- Create or update roles:创建更新角色。
- Delete roles:删除角色。
- Get roles:查看角色信息。
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 集群安全的更多相关文章
- Ubuntu 14.04中Elasticsearch集群配置
Ubuntu 14.04中Elasticsearch集群配置 前言:本文可用于elasticsearch集群搭建参考.细分为elasticsearch.yml配置和系统配置 达到的目的:各台机器配置成 ...
- elasticsearch 集群
elasticsearch 集群 搭建elasticsearch的集群 现在假设我们有3台es机器,想要把他们搭建成为一个集群 基本配置 每个节点都要进行这样的配置: cluster.name: ba ...
- 我的ElasticSearch集群部署总结--大数据搜索引擎你不得不知
摘要:世上有三类书籍:1.介绍知识,2.阐述理论,3.工具书:世间也存在两类知识:1.技术,2.思想.以下是我在部署ElasticSearch集群时的经验总结,它们大体属于第一类知识“techknow ...
- Elasticsearch集群中处理大型日志流的几个常用概念
之前对于CDN的日志处理模型是从logstash agent==>>redis==>>logstash index==>>elasticsearch==>&g ...
- elasticsearch 集群配置
2015-10-10 09:56 by 轩脉刃, 999 阅读, 1 评论, 收藏, 编辑 elasticsearch 集群 搭建elasticsearch的集群 现在假设我们有3台es机器,想要把他 ...
- 翻译【ElasticSearch Server】第一章:开始使用ElasticSearch集群(5)
数据操作与REST API(Data manipulation with REST API) ElasticSearch REST API可用于各种任务.多亏了它,我们可以管理索引,更改实例参数,检查 ...
- Elasticsearch集群搭建
现有两部机器:192.168.31.86,192.168.31.87 参考以往博文对Elasticsearch进行配置完成:http://www.cnblogs.com/zhongshengzhe ...
- elasticsearch集群搭建实例
elasticsearch集群搭建实例 下个月又开始搞搜索了,几个月没动这块还好没有落下. 晚上在自己虚拟机上搭建了一个简易搜索集群,分享一下. 操作系统环境: Red Hat 4.8.2-16 el ...
- 解剖 Elasticsearch 集群 - 之三
解剖 Elasticsearch 集群 - 之三 本篇文章是一系列涵盖 Elasticsearch 底层架构和原型示例的其中一篇.在本篇文章中,我们会讨论 Elasticsearch 如何提供准实时搜 ...
- ES2:ElasticSearch 集群配置
ElasticSearch共有两个配置文件,都位于config目录下,分别是elasticsearch.yml和logging.yml,其中,elasticsearch.yml 用来配置Elastic ...
随机推荐
- [CERC2014]Virus synthesis【回文自动机+DP】
[CERC2014]Virus synthesis 初始有一个空串,利用下面的操作构造给定串 SS . 1.串开头或末尾加一个字符 2.串开头或末尾加一个该串的逆串 求最小化操作数, \(|S| \l ...
- HDU6504 Problem E. Split The Tree【dsu on tree】
Problem E. Split The Tree Problem Description You are given a tree with n vertices, numbered from 1 ...
- Codeforces 1355 C. Count Triangles
传送门:C - Count Triangles 题意:给你四个数A,B,C,D,求有多少个三边为x,y,z (A ≤ x ≤ B ≤ y ≤ C ≤ z ≤ D)的三角形. 题解:枚举 x=A~B, ...
- F - Count the Colors(线段树)
Painting some colored segments on a line, some previously painted segments may be covered by some th ...
- Codeforces Round #678 (Div. 2) C. Binary Search (二分,组合数)
题意:有长度\(n\)的序列,让你构造序列,使得二分查找能在\(pos\)位置找到值\(x\).问最多能构造出多少种排列? 题解:题目给出的\(pos\)是固定的,所以我们可以根据图中所给的代码来进行 ...
- 2020ICPC·小米 网络选拔赛第一场 A.Intelligent Warehouse (DP)
题意:给你一组数,选一些数出来组成一个排列,使得每个数都能被前一个数整除,求排列的最大元素. 题解:我们先用欧拉筛筛出\(1e7\)的质数,设\(dp[i]\)表示当前选的数都是\(i\)的约数且合法 ...
- 记录一些Python中不常用但非常好用的函数
zfill(): 方法返回指定长度的字符串,原字符串右对齐,前面填充0. print('Helloworld'.zfill(50))0000000000000000000000000000000000 ...
- VS Code 搭建合适的 markdown 文档编写环境
写在开头,之前我是使用Gitee与Github作为图床和Picgo搭配Typora使用的 ,但因为最近觉得这样还是稍微比较繁琐,然后因为VS Code是我的主要文本编辑器.Cpp,Python等均是在 ...
- Zabbix 监控 SNMP & JMX
Zabbix 配置清华源 # 安装清华源 yum 仓库 [root@db01 ~]# rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabb ...
- 【原创】Linux虚拟化KVM-Qemu分析(九)之virtio设备
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: KVM版本:5.9 ...