1、介绍

官方宣布从6.8和7.1开始,免费提供多项安全功能。其中包括tls加密通信,基于角色访问控制等功能。

可以使用企业CA证书来完成这一步骤,但是一般情况下,我们可以通过elasticsearch自带的elasticsearch-certutil的命令生成证书。然后各节点通过该证书可以进行安全通信。

为节点创建证书

TLS:TLS协议要求Trusted Certificate Authority(CA)签发的X.509的证书

证书认证的不同级别

  • Certificate:节点加入集群需要使用想用CA签发的证书
  • Full Verfication:节点加入集群需要使用想用CA签发的证书,还需要验证Hostname或IP地址
  • No Verfication:任何节点都可以加入,开发环境用于诊断目的

先签发CA证书,然后基于这个CA证书,签发每一个节点的证书

2. 步骤

2.1 生成证书

搭建好了es集群,先拿第一个节点来操作,进入elasticsearch目录,然后执行以下命令。

cd /usr/share/elasticsearch  # 使用yum方式安装的可执行文件路径

# 生成CA证书
bin/elasticsearch-certutil ca (CA证书:elastic-stack-ca.p12) # 生成节点证书
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 (节点证书:elastic-certificates.p12) `# bin/elasticsearch-certutil cert -out /etc/elasticsearch/elastic-certificates.p12 -pass`# 生成证书到配置文件目录 (这一步暂不操作) 上面命令执行成功后,会在`/etc/elasticsearch/`文件夹下生成elastic-certificates.p12证书 注意:在本机生成的证书需要更改证书权限:`chmod 644 elastic-certificates.p12` (若是使用运行es程序的用户创建证书,则不用更改证书权限)
默认证书权限是600,运行elasticsearch程序的用户没有权限读取,会造成elasticsearch启动失败 ## 2.2 编辑配置文件,开启证书访问
编辑配置文件/etc/elasticsearch/elasticsearch.yml,取消掉下面几行的注释(注意证书路径)
```yml
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate # 证书认证级别
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

将上面步骤生成的elastic-certificates.p12证书复制到另外两个es节点上对应的/etc/elasticsearch/文件夹中,同时将上面

xpack.security.*配置选项也都复制到对应节点的elasticsearch.yml文件里

2.3 设置密码

启动三个节点,待节点启动完毕之后,进入第一个节点elasticsearch目录,执行以下命令,进行密码设置:

cd /usr/share/elasticsearch
bin/elasticsearch-setup-passwords interactive # 输出结果
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y # 输入y # 直接输入密码,然后再重复一遍密码,中括号里是账号
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]

为了方便后续使用,这里可以都设置成一样

password: elkstack123456

验证集群设置的账号和密码

打开浏览器访问这个地址,出现需要输入账号密码的界面证明设置成功,集群的一个节点

http://192.168.80.105:9200/_security/_authenticate?pretty

2.4 logstash增加访问es集群的用户及密码

logstash过滤数据之后往es中推送的时候,需要添加权限认证。增加访问es集群的用户及密码:

output {

  if [fields][log_source] == 'messages' {
elasticsearch {
hosts => ["http://192.168.80.104:9200", "http://192.168.80.105:9200","http://192.168.80.106:9200"]
index => "messages-%{+YYYY.MM.dd}"
user => "elastic" # 注意:这里演示使用超级账号,安全起见最好是使用自定义的账号,并授予该用户创建索引的权限,具体看下方地址
password => "elkstack123456" # 密码是上面步骤设置的
}
} if [fields][log_source] == "secure" {
elasticsearch {
hosts => ["http://192.168.80.104:9200", "http://192.168.80.105:9200","http://192.168.80.106:9200"]
index => "secure-%{+YYYY.MM.dd}"
user => "elastic" # 注意:这里演示使用超级账号,安全起见最好是使用自定义的账号,并授予该用户创建索引的权限,具体看下方地址
password => "elkstack123456"
}
} }

使用自定义的账号官方地址:https://www.elastic.co/cn/blog/configuring-ssl-tls-and-https-to-secure-elasticsearch-kibana-beats-and-logstash

2.5 elasticsearch-head访问es集群的用户及密码

elasticsearch-head插件此时再去访问有安全认证的es集群时,会发现无法进行查看,打开控制台可以看到报错:401 unauthorized

解决办法是修改elasticsearch.yml文件,增加以下配置。

http.cors.allow-headers: Authorization,content-type

修改三台es节点,然后重新启动,再次url+认证信息方式可以正常访问es集群。

http://192.168.80.104:9100/?auth_user=elkstack&auth_password=elkstack123456

2.6 Kibana组件访问带有安全认证的Elasticsearch集群

配置文件kibana.yml中需要加入以下配置

elasticsearch.username: "kibana"  # 注意:此处不用超级账号elastic,而是使用kibana跟es连接的账号kibana
elasticsearch.password: "elkstack123456"

然后重启kibana,再次访问的话就就需要输入上述账号密码才能登陆访问了

不一样的地方:

在Management下面的Kibana最后出现一个Security,有User和Role

方便kibana多用户创建及角色权限控制

对Elastic集群内部配置TLS加密通信及身份验证的更多相关文章

  1. Nginx集群之SSL证书的WebApi身份验证

    目录 1       大概思路... 1 2       Nginx集群之SSL证书的WebApi身份验证... 1 3       AuthorizeAttribute类... 2 4       ...

  2. Nginx集群之基于Redis的WebApi身份验证

    目录 1       大概思路... 1 2       Nginx集群之基于Redis的WebApi身份验证... 1 3       Redis数据库... 2 4       Visualbox ...

  3. elk 系列:Elasticsearch 7.2 集群部署+TLS 加密+认证登陆

    背景 2019年5月21日,Elastic官方发布消息: Elastic Stack 新版本6.8.0 和7.1.0的核心安全功能现免费提供. 这意味着用户现在能够对网络流量进行加密.创建和管理用户. ...

  4. 二进制方式部署Kubernetes 1.6.0集群(开启TLS)

    本节内容: Kubernetes简介 环境信息 创建TLS加密通信的证书和密钥 下载和配置 kubectl(kubecontrol) 命令行工具 创建 kubeconfig 文件 创建高可用 etcd ...

  5. linux运维、架构之路-Kubernetes集群部署TLS双向认证

    一.kubernetes的认证授权       Kubernetes集群的所有操作基本上都是通过kube-apiserver这个组件进行的,它提供HTTP RESTful形式的API供集群内外客户端调 ...

  6. 开源项目SMSS发开指南(四)——SSL/TLS加密通信详解

    本文将详细介绍如何在Java端.C++端和NodeJs端实现基于SSL/TLS的加密通信,重点分析Java端利用SocketChannel和SSLEngine从握手到数据发送/接收的完整过程.本文也涵 ...

  7. 开源项目SMSS发开指南(五)——SSL/TLS加密通信详解(下)

    继上一篇介绍如何在多种语言之间使用SSL加密通信,今天我们关注Java端的证书创建以及支持SSL的NioSocket服务端开发.完整源码 一.创建keystore文件 网上大多数是通过jdk命令创建秘 ...

  8. 用隧道协议实现不同dubbo集群间的透明通信

    用隧道协议实现不同dubbo集群间的透明通信 前言 笔者最近完成了一个非常有意思的隧道机制(已在产线运行),可以让注册到不同zookeeper之间的dubbo集群之间能够正常进行通信.如下图所示: 例 ...

  9. Nginx集群之SSL证书的WebApi令牌验证

    目录 1       大概思路... 1 2       Nginx集群之SSL证书的WebApi令牌验证... 1 3       Openssl生成SSL证书... 2 4       编写.NE ...

随机推荐

  1. Linux下测试CPU性能

    一.安装stress服务 1.下载stress_1.0.1.orig.tar.gz安装包 2.解压tar xvf stress_1.0.1.orig.tar.gz 3.进入解压目录执行./config ...

  2. Unity3D_(API)射线检测Raycast()

    Unity射线检测官方文档: 传送门 一.检测前方是否有游戏物体(射线无限长度) 二.检测前方是否有游戏物体(射线长度为1m) 三.检测前方游戏物体碰撞信息(射线无限长度): 四.指定检测碰撞Tag层 ...

  3. Unity3D_(游戏)双人3D坦克_简易版

    双人3D坦克实现 player1: WSAD控制上下左右 空格键发射炮弹 player2: IKJL可控制上下左右 B键发射炮弹 每个坦克只有100hp,子弹击中1次扣30hp,hp时时显示在坦克上 ...

  4. html5 代码画兰博基尼跑车,6不6你说的算!

    源代码下方 由于本人喜爱html5,无聊所画: 画图需要掌握; 1.画布,画笔,画圆,给画笔添加颜色.(注:掌握这几点,你就可以称霸画图界了.) 虽然没有画画天赋,但代码写的也是溜溜滴!(注:此图没有 ...

  5. sqli-libs(2)

    Lesson2:数字型注入我们先来测试一下 http://127.0.0.1/sql1/Less-2/?id=1%20and%201=1 发现未报错 这里知道我们的数字型注入是不需要 进行单引号闭合的 ...

  6. Java并发编程的艺术笔记(五)——Java中的锁

    一.Lock接口的几个功能: 显示的获取和释放锁 尝试非阻塞的获取锁 能被中断的获取锁 超时获取锁 使用方式: Lock lock = new ReentrantLock(); lock.lock() ...

  7. 用公共key实现无密码ssh

    1.在主服务器master下生成密钥 $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 2.将密钥放在 ~/.ssh/authorized_keys $ cat ~ ...

  8. Grunt打包Electron,生成exe的安装包

    在之前的博客:3.electron打包生成exe文件 我们已经得到了electron打包好的应用了,目录如下,但是我们如何整合成一个安装程序,发给客户使用呢? 我们可以使用grunt-electron ...

  9. 获取手机本地IP地址

    public String getLocalIpAddress() { try { for (Enumeration<NetworkInterface> en = NetworkInter ...

  10. Ubuntu下查找nginx日志

    使用awk检测nginx日志, 按小时计数 awk '{split($4,array,"[");if(array[2]>="29/May/2016:00:00:26 ...