elasticsearch基于RBAC认证和集群之间的TLS通讯
elasticsearch基于RBAC认证和集群之间的TLS通讯
一、背景
默认情况下,当我们搭建好es集群后,我们通过http://localhost:9200就可以直接访问到es集群的一些信息,这显然是不安全的。在同一个局域网中,如果我们启动了多个es节点,且集群的名字相同,那么他们可能会自动加入集群,这显然是不安全的。因此我们要想个办法来解决它。es自带的插件x-pack就可以解决上述的要求。在高版本的es中,x-pack插件是默认就集成了。
二、需要解决的问题
1、给es增加用户名和密码访问。
2、集群之间的通讯采用TLS通讯。
三、给es增加用户名和密码访问
1、修改config/elasticsearch.yml
# 1、修改 ES_HOME/config/elasticsearch.yml
# 增加如下配置
vim config/elasticsearch.yml
xpack.security.enabled: true
2、访问es集群

此时可以看到访问es集群就需要用户名和密码了,那么我们这个用户名和密码从哪里获取呢?
3、启用es集群内建的用户
1、让es自动设置初始化密码
./bin/elasticsearch-setup-passwords auto
如果执行上面这个语句,那么es会自动设置密码,我们需要自己把这个密码保存下来。
2、自动手动设置密码
./bin/elasticsearch-setup-passwords interactive

此处为了简单,将每个用户的用户名和密码都设置成 123456,生产环境需要设置成一个复杂的接口。
注意️:
当我们设置了elastic用户的密码后,就不可在执行elasticsearch-setup-passwords命令了。
3、重新访问es,输入用户名和密码

重新访问es集群,输入用户名和密码之后,就可以访问到集群的信息了。
四、kibana连接到es集群
1、设置kibana的用户名和密码
# 设置用户名和密码
elasticsearch.username: "kibana_system"
elasticsearch.password: "123456"
该用户名和密码,是由上一步设置好的。
2、访问kibana

此时可以看到,我们的kibana就需要用户名和密码访问了。
3、通过kibana创建用户和角色

五、配置es集群之间的TLS通讯
1、在es集群的生产模式中,节点之间的通讯必须要使用TLS通讯,否则集群无法启动。
2、配置集群以TLS通讯,还可以防止不受信任的节点加入es集群。

1、何为es的生产模式
集群之间的服务发现不可是 single-node discovery 服务发现。
节点之间可以使用非回环地址加入集群。
2、配置步骤
1、生成证书(CA)
# 生成证书
bin/elasticsearch-certutil ca

2、为每个节点签发证书
# --ca 指定证书的路径
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

3、查看证书的生成路径

4、为集群中的每个节点配置证书
# 1、将证书拷贝到每个节点的 config 目录下
mv elastic-certificates.p12 config
# 2、修改elasticsearch.yml文件,增加如下配置
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.client_authentication: required
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
5、重启es集群

6、重新加载集群的证书、密钥等信息

使用resource.reload.interval.high参数配置,默认是5s。
六、java client中basic认证的写法
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
/**
* @author huan.fu 2021/4/22 - 下午2:48
*/
public class AbstractEsApi {
protected final RestHighLevelClient client;
public AbstractEsApi() {
final CredentialsProvider credentialsProvider =
new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials("elastic", "123456"));
client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http"),
new HttpHost("localhost", 9201, "http"),
new HttpHost("localhost", 9202, "http")
)
.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider))
);
}
}
七、参考链接
elasticsearch基于RBAC认证和集群之间的TLS通讯的更多相关文章
- centos7.4安装高可用(haproxy+keepalived实现)kubernetes1.6.0集群(开启TLS认证)
目录 目录 前言 集群详情 环境说明 安装前准备 提醒 一.创建TLS证书和秘钥 安装CFSSL 创建 CA (Certificate Authority) 创建 CA 配置文件 创建 CA 证书签名 ...
- ElasticSearch入门 第二篇:集群配置
这是ElasticSearch 2.4 版本系列的第二篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
- 庐山真面目之十二微服务架构基于Docker搭建Consul集群、Ocelot网关集群和IdentityServer版本实现
庐山真面目之十二微服务架构基于Docker搭建Consul集群.Ocelot网关集群和IdentityServer版本实现 一.简介 在第七篇文章<庐山真面目之七微服务架构Consul ...
- ElasticSearch和Kibana 5.X集群的安装
ElasticSearch和Kibana 5.X集群的安装 1.准备工作 1.1.下载安装包 1.2.系统的准备 2.ElasticSearch集群的安装 2.1.修改 config/elastics ...
- mac 下搭建Elasticsearch 5.4.3分布式集群
一.集群角色 多机集群中的节点可以分为master nodes和data nodes,在配置文件中使用Zen发现(Zen discovery)机制来管理不同节点.Zen发现是ES自带的默认发现机制,使 ...
- ElasticSearch 深入理解 三:集群部署设计
ElasticSearch 深入理解 三:集群部署设计 ElasticSearch从名字中也可以知道,它的Elastic跟Search是同等重要的,甚至以Elastic为主要导向. Elastic即可 ...
- 基于docker安装pxc集群
基于docker安装pxc集群 一.PXC 集群的安装 PXC集群比较特殊,需要安装在 linux 或 Docker 之上.这里使用 Docker进行安装! Docker的镜像仓库中包含了 PXC数据 ...
- Elasticsearch 主从同步之跨集群复制
文章转载自:https://mp.weixin.qq.com/s/alHHxXont6XFm_m9PfsGfw 1.什么是跨集群复制? 跨集群复制(Cross-cluster replication, ...
- ElasticSearch 5学习(7)——分布式集群学习分享2
前面主要学习了ElasticSearch分布式集群的存储过程中集群.节点和分片的知识(ElasticSearch 5学习(6)--分布式集群学习分享1),下面主要分享应对故障的一些实践. 应对故障 前 ...
随机推荐
- 简说yuv
最近弄了一个读取y4m文件转成yuv的流的事情,记录一些yuv相关的细节 为什么会有yuv 因为我们目前的显示器显示的原理都是三原色,几乎所有的视频数据最后都要转为rgb格式才能渲染到显示屏上,而原始 ...
- 掌握基于AOP事务管理
一.手动管理和半自动工厂模式 二.AOP事务管理 1.表达式中,第一个※是返回值所有类型,service包下一个点意思是service包下的类,两个点意思是service包下的类和其子包下的类也包含, ...
- DHCP的原理和配置
前言 在大型企业网络中,会有大量的主机或设备需要获取IP地址等网络参数.如果采用手工配置,工作量大且不好管理,如果有用户擅自修改网络参数,还有可能会造成 IP地址冲突等问题.使用动态主机配置协议DHC ...
- 剑指offer计划16( 排序简单)---java
1.1.题目1 剑指 Offer 45. 把数组排成最小的数 1.2.解法 这题看的题解,发现自己思路错了. 这里直接拿大佬的题解来讲吧. 一开始这里就把创一个string的数组来存int数组 Str ...
- json包中的Marshal&Unmarshal 文档译本
Marshal func Marshal(v interface{})([]byte, error) Marshal returns the JSON encoding of v. Marshal返回 ...
- yield实现 coroutine协程案例
yield可以手工实现协程,但python为我们封装了一个greenlet,先看看yield实现,yield需要手工操作,无法实现IO操作时自动切换协程,greenlet是封装好的,能方便使用io切换 ...
- 【C++基础教程】第三课
上次的课后练习答案 练习一 第一题a=8 第二题8 第三题(int)(a+0.2) 提示:把浮点数转换为整数,用强制类型转换的方式.(int)(...)表示把...的内容强制转换为int类型,同理,( ...
- 最长公共前缀 js 实现代码
编写一个函数来查找字符串数组中的最长公共前缀: 输入 : ["abca","abc","abca","abc",&quo ...
- ecshop商品批量上传之EC助理1.28支持ECshop2.7.3方法
目前官方随着ECShop V2.73的发布也发布了相对应的EC助理1.30版.默认EC助理1.28也支持到ECShop V2.72,要想让EC助理1.28也支持到ECShop V2.73,那要了解EC ...
- Windows 10 64位操作系统 下安装、连接测试sqlite3 sql基本操作 增删改
一.下载sqlite安装包 1:详细下载安装版本可见官网:https://www.sqlite.org/download.html 2:百度盘分享连接:https://pan.baidu.com/s/ ...