07 | 集群身份验证与HTTPS 加密通信

逸兴
逸兴
逸兴
57
文章
25
评论
2020-04-0818:28:1422 4278字阅读14分15秒
摘要

ElasticSearch 7.6.1 配置X-PACK安全认证,并开启HTTPS。kibana 7.6.1 加密连接ElasticSearch

ElasticSearch 集群安装完成后,默认不提供任何安全防护,为了集群的数据安装,需要对集群配置安全认证。

数据安全的基本要求

  • 身份认证
    • 鉴定用户身份是否合法
  • 用户鉴权
    • 设置哪个用户可以访问哪些索引,具有哪些权限
  • 传输加密
  • 日志审计
    • 所有的操作记录需要有审计

对于安全方面,ElasticStack官方提供了 x-pack 组件,用于集群间的安全认证,不过这个组件的一些高级功能是收费的,只开放了一部分基本安全认证免费使用。

一些免费的解决方案:

  • 社区中有些免费的 Security 插件
    • Search Guard
    • Readonly REST
  • 设置nginx反向代理
    • 通过nginx的 auth_basic 模块做一些基本的认证
  • X-Pack 的 Basic 版
    • 重 ES 6.8 & ES 7.0 开始,Security 纳入 x-pack 的Basic版本中,免费使用一些基本的功能

X-Pack 中的认证服务称为 Realms, Realms 有两种类型

  • 内置 Realms(免费)
  • 外置 Realms (收费)
    • 连接 LDAP / Active Directroy / PKI / SAML / Kerberos 进行统一认证

X-PACK 使用 RBAC的方式进行用户授权

什么是RABC?

RABC 是将一组的权限,定义为一个角色,然后将这个角色分配给某个用户,这个用户就具备了这些权限。

分配的这些权限,包括 索引级 字段级 集群级

07 | 集群身份验证与HTTPS 加密通信

X-PACK 中内置了一些用户和角色

07 | 集群身份验证与HTTPS 加密通信

当打开Security 功能后,可以通过Security api 进行创建用户 和 角色

07 | 集群身份验证与HTTPS 加密通信

开启X-PACK 的认证与鉴权

修改es配置文件,打开认证与授权

docker exec -it es01 bash
# 为集群创建一个ca机构, 这里创建的ca证书用于后面部分的 《集群间安全通信使用》
elasticsearch-certutil ca 
依次输入回车(文件使用默认名),密码

# 通过这个ca颁发证书
elasticsearch-certutil cert --ca elastic-stack-ca.p12 
回车(文件使用默认名),密码上一步密码相同

elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
输入第一步输入的密码

elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
输入第一步输入的密码

# 可以看到生成了 两个证书文件

07 | 集群身份验证与HTTPS 加密通信

# 将生成的证书文件,移动到 config 目录下

cd /usr/share/elasticsearch/
chown elasticsearch elastic-certificates.p12
chown elasticsearch elastic-stack-ca.p12
mv elastic-certificates.p12 elastic-stack-ca.p12 ./config/

# 将证书文件连同elasticsearch.keystore 发送到其他节点的 config目录中

cd /data/docker/volumes/elkstack_es_conf01/_data/
cp elastic-certificates.p12 elastic-stack-ca.p12 elasticsearch.keystore /data/docker/volumes/elkstack_es_conf0{2,3}/_data/

修改 ElasticSearch.yml 配置文件

# 所有节点都要配置
# 开启 X-PACK 认证
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   # 证书文件

然后重启es

设置访问密码

07 | 集群身份验证与HTTPS 加密通信

这里设置的就是 X-PACK 中内置的一些账户的密码

07 | 集群身份验证与HTTPS 加密通信

访问es 集群进行下测试

07 | 集群身份验证与HTTPS 加密通信
07 | 集群身份验证与HTTPS 加密通信

配置完成后,在打开 cerebro 连接 es 就需要输入密码了

同时 cerebro 本身也可配置认证,认证方式有基本认证,和 ldap 认证

07 | 集群身份验证与HTTPS 加密通信

设置kibana 安全认证

编辑kibana 的配置文件,设置ElasticSearch 的账户密码,这里的kibana账户在x-pack 中默认存在的,上面也已经设置了密码,把密码写到这里就可以了

这个账户是专门用作kibana 和 es 连接使用的

07 | 集群身份验证与HTTPS 加密通信

然后重启kibana,访问测试,此时kibana 登录已经需要输入密码了

07 | 集群身份验证与HTTPS 加密通信

创建自读账户,并添加角色

首先创建一个 具有自读权限的角色

07 | 集群身份验证与HTTPS 加密通信

设置最movies 索引具有 自读 权限

07 | 集群身份验证与HTTPS 加密通信

还可以定制 kibana 的权限

07 | 集群身份验证与HTTPS 加密通信

已经可以搜索到创建的角色了,接下来要创建用户,并赋予 这个角色

07 | 集群身份验证与HTTPS 加密通信

创建用户,关联角色

07 | 集群身份验证与HTTPS 加密通信

然后注销elastic 测试movies_read

07 | 集群身份验证与HTTPS 加密通信

账户登录后的工作台,就是前面 创建角色 定制的

07 | 集群身份验证与HTTPS 加密通信
07 | 集群身份验证与HTTPS 加密通信

尝试删除时,便提示 拒绝

07 | 集群身份验证与HTTPS 加密通信

集群内部安全通信

ElasticSearch 集群间可设置通过ssl 加密通信,关于 证书认证有几个不同级别

  • Certificate --- 节点加入集群,需要使用相同CA 签发的证书
  • Full Verification --- 节点加入集群需要使用相同CA 签发的证书,同时需要验证 host name 或 IP 地址
  • No Verification --- 任何节点都可以加入

生成节点证书--- 这一部分前面已经操作过了

# 为集群创建一个ca机构, 这里创建的ca证书用于后面部分的 《集群间安全通信使用》
elasticsearch-certutil ca 
依次输入回车(文件使用默认名),密码

# 通过这个ca颁发证书
elasticsearch-certutil cert --ca elastic-stack-ca.p12 
回车(文件使用默认名),密码上一步密码相同

elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
输入第一步输入的密码

elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
输入第一步输入的密码

# 将证书拷贝到config 目录中
elastic-certificates.p12 
elastic-stack-ca.p12
然后同elasticsearch.keystore 一同发送到集群内的其他节点,其中需要注意 \
文件的权限及属主

在ElasticSearch 中配置节点间通讯 修改 elasticsearch.yml --- 这部分前面也操作过了

# 下面的这几项 用于 集群间 加密通信
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   # 证书文件

然后重启节点即可。

集群与外部间的安全通信

07 | 集群身份验证与HTTPS 加密通信

ElasticSearch 配置 HTTPS

es 7.6.1 版本中集群配置https, 需要重新生成证书,如果选择pkcs模式,就可以使用前面TransportClient 的证书

已pkcs模式为例,需要做些设置

docker exec -it es01 bash

07 | 集群身份验证与HTTPS 加密通信
07 | 集群身份验证与HTTPS 加密通信

07 | 集群身份验证与HTTPS 加密通信
07 | 集群身份验证与HTTPS 加密通信
07 | 集群身份验证与HTTPS 加密通信
07 | 集群身份验证与HTTPS 加密通信
07 | 集群身份验证与HTTPS 加密通信
07 | 集群身份验证与HTTPS 加密通信
07 | 集群身份验证与HTTPS 加密通信
07 | 集群身份验证与HTTPS 加密通信
07 | 集群身份验证与HTTPS 加密通信
07 | 集群身份验证与HTTPS 加密通信
07 | 集群身份验证与HTTPS 加密通信
07 | 集群身份验证与HTTPS 加密通信
07 | 集群身份验证与HTTPS 加密通信

将 解压的elasticsearch目录中的http.p12 复制到config 目录下,并在elasticsearch.yml 中添加

07 | 集群身份验证与HTTPS 加密通信
unzip elasticsearch-ssl-http.zip
cd elasticsearch
cp http.p12 ../config/
echo "xpack.security.http.ssl.enabled: true"  >>../config/elasticsearch.yml
echo 'xpack.security.http.ssl.keystore.path: "http.p12"'  >>../config/elasticsearch.yml
每个都需要添加,然后重启集群即可

这时候http 已经无法访问了,需要使用https

07 | 集群身份验证与HTTPS 加密通信
07 | 集群身份验证与HTTPS 加密通信

配置kibana 连接 ES HTTPS

kibana 必须使用.pem 格式的证书才能正常工作,因此需要先通过openssl 命令转换一个 .pem 的证书

07 | 集群身份验证与HTTPS 加密通信
07 | 集群身份验证与HTTPS 加密通信

将生产的http.pem 证书拷贝到 kibana 的config目录

然后修改kibana.yml , 设置以下内容

07 | 集群身份验证与HTTPS 加密通信
elasticsearch.hosts: [ "https://172.21.0.1:9200" ]   # 修改原来的es的http 连接方式为https
elasticsearch.ssl.certificateAuthorities: [ "/usr/share/kibana/config/http.pem" ]   # 指定证书位置
elasticsearch.ssl.verificationMode: certificate  # 设置认证方式

然后重启kibana,登录kibana 进行查询测试

07 | 集群身份验证与HTTPS 加密通信

配置 HTTPS 连接 kibana

先为kibana 生成一个pem 的证书

07 | 集群身份验证与HTTPS 加密通信

将生成的文件解压,并拷贝到 kibana 的config 目录下

07 | 集群身份验证与HTTPS 加密通信

修改kibana.yml 文件, 添加以下配置,然后重启kibana

server.ssl.enabled: true
server.ssl.certificate: config/ca.crt
server.ssl.key: config/ca.key

通过kibana 日志可以发现,kibana 已经监听在了https上

07 | 集群身份验证与HTTPS 加密通信

通过浏览器访问测试下

此时通过http 已经无法访问,https 可以正常访问

07 | 集群身份验证与HTTPS 加密通信
07 | 集群身份验证与HTTPS 加密通信



https://www.hugbg.com/archives/2107.html
逸兴
  • 本文由 发表于 2020-04-0818:28:14
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
03 | 倒排索引 & 分词 Elastic Stack

03 | 倒排索引 & 分词

Elasticsearch 为什么搜索块,Elasticsearch 使用一种称为 倒排索引 的结构,它适用于快速的全文搜索。 本文简单介绍“倒排索引” 和 es内置分词器,以及中...
10 | 分片设计与管理 & 集群容量规划 Elastic Stack

10 | 分片设计与管理 & 集群容量规划

在旧版的ElasticSearch 中创建索引默认设置5个主分片,7.0 开始默认只有一个主分片。 单个分片的优点在于,查询算分聚合不准确的问题都可以避免,而其影响在于单个索引,单个分片,无法实现集群...
09 | Hot & Warm架构与 Shard Filtering Elastic Stack

09 | Hot & Warm架构与 Shard Filtering

01 Hot & Warm 架构概述 前面我们说到,应该设置单一节点单一角色的集群来充分利用硬件资源。其中Data Node 节点比价占用CPU RAM 还可以配备SSD。 其实也并非所有的D...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

评论:2   其中:访客  2   博主  0
    • 111 111 3

      logstash怎么连接ES https呢

      • nice nice 3

        nice不错