干货 | Elasticsearch7.X X-Pack基础安全实操详解

1、调查:你的Elasticsearch怎么做的安全防护?

背景:大家知道elasticsearch早期版本安全部分收费(7.1 & 6.8 版本之前),实际中各个公司6.x,5.x,2.x,1.x都有在用,且非少数。

群随机投票结果如下:

通过留言发现,大家使用2的比较多,历史包袱重,真正升级7.X的企业还不太多。

Medcl在《给你 10 个升级到 Elastic Stack 7 的理由!》分享中提到升级到最新版本“更安全”的核心理由。

之前文章中也有过探讨:你的Elasitcsearch集群在裸奔吗

的确,安全问题已经成为公司使用Elasticsearch必须考虑的问题之一。

2、说到Elasticsearch安全,你想到的是什么?

首先想到的是“不安全”、“暴露”、“攻击”、“泄露”、“隐私”等负面的关键词。

的确,如果9200或者改成其他端口的ES暴露在公网,一旦被扫到,集群及数据会受到灾难式影响。

稍微了解网络安全的朋友都知道,通过nmap等扫描工具,可以非常快速扫描出开放的外网端口。

安全无小事,本文以Elasticsearch7.2+为示例,串讲:

  • 1)啥是X-Pack?基础免费版本哪些安全功能是免费?哪些收费呢?
  • 2)单节点X-Pack安全如何配置?
  • 3)多节点X-Pack安全如何配置?

非常基础但非常重要,希望对你有帮助。

3、啥是X-Pack?

X-Pack是Elastic Stack扩展功能,提供安全性,警报,监视,报告,机器学习和许多其他功能。 ES7.0+之后,默认情况下,当安装Elasticsearch时,会安装X-Pack,无需单独再安装。

自6.8以及7.1+版本之后,基础级安全永久免费。

基础版本安全功能列表如下:

4、单节点ES X-Pack安全如何配置?

4.1 安全配置

默认情况下,拥有安全免费许可证时,Elasticsearch安全功能被禁用。 要启用安全功能,需要设置xpack.security.enabled。

在节点的elasticsearch.yml配置文件中,新增:

1xpack.security.enabled: true

4.2 为节点间通信配置传输层安全性(TLS / SSL)

使用范围:配置传输层安全性适用于具有多个节点的集群以及需要外网通信访问的单节点ES。

使用环回地址127.0.0.1的单节点ES可以不用配置。

4.2.1 加密通信

Elasticsearch节点可能存储是机密的数据,而无处不在的网络攻击对这些数据垂涎欲滴。

网络攻击包括对数据的嗅探,对数据的操纵,以及试图获得对服务器的访问权限,进而访问存储数据的文件。

保护节点的安全有助于降低来自网络的攻击的风险

4.2.2 生成节点证书

1、证书实现加密通信的原理

TLS需要X.509证书(X.509 证书是一个数字证书,它使用 X.509 公有密钥基础设施标准将公有密钥与证书中包含的身份相关联。X.509 证书由一家名为证书颁发机构 (CA) 的可信实体颁发。CA 持有一个或多个名为 CA 证书的特殊证书,它使用这种证书来颁发 X.509 证书。只有证书颁发机构才有权访问 CA 证书)才能对与之通信的应用程序执行加密和身份验证。 为了使节点之间的通信真正安全,必须对证书进行验证

在Elasticsearch集群中验证证书真实性的推荐方法是信任签署证书的证书颁发机构(CA)。

这样,只需要使用由同一CA签名的证书,即可自动允许该节点加入集群。

2、借助elasticsearch-certutil命令生成证书

1bin/elasticsearch-certutil.bat ca -out config/elastic-certificates.p12 -pass ""
4.2.3 配置加密通信

启用安全功能后,必须使用TLS来确保节点之间的通信已加密。

在elasticsearch.yml中心新增配置如下:

1xpack.security.transport.ssl.enabled: true
2xpack.security.transport.ssl.verification_mode: certificate 
3xpack.security.transport.ssl.keystore.path: elastic-certificates.p12 
4xpack.security.transport.ssl.truststore.path: elastic-certificates.p12 

4.3 设置集群密码

借助:elasticsearch-setup-passwords 设置集群密码。

elasticsearch-setup-passwords 支持的参数如下:

1Commands
 2--------
 3auto - Uses randomly generated passwords
 4interactive - Uses passwords entered by a user
 5
 6Non-option arguments:
 7command
 8
 9Option         Description
10------         -----------
11-h, --help     show help
12-s, --silent   show minimal output
13-v, --verbose  show verbose output

核心: auto - 随机生成密码。 interactive - 自定义不同用户的密码。

注意:必须配置好xpack之后,才能设置密码。否则会报错。

自此:单节点安全配置完毕,访问9200会出现用户名和密码的提示窗口。

5、多节点集群X-Pack安全如何配置?

最简单的方法, 假定是初始部署集群阶段。

  • 步骤1:清空data文件(原因:防止冲突,该问题多次在社区被提问);
  • 步骤2:将配置好的带证书的文件copy到另一台机器;
  • 步骤3:根据集群配置ip、角色等信息即可。

6、小结

X-Pack安全配置的核心三步骤:

  • 第一:设置:xpack.security.enabled: true。
  • 第二:生成TLS证书。
  • 第三:配置加密通信。
  • 第四:设置密码。

这些对于安全来说只是皮毛,更多的角色、权限、Space需要借助Kibana实现。

你的Elasticsearch安全吗?欢迎留言交流。

参考: https://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/x509-certs.html https://www.elastic.co/cn/blog/getting-started-with-elasticsearch-security https://www.elastic.co/cn/blog/security-for-elasticsearch-is-now-free

本文分享自微信公众号 - 铭毅天下(gh_0475cf887cf7)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SSL证书以及https

SSL证书以及https对于网站安全的重要性

SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。

3300
来自专栏测试技术圈

Jenkins+Ansible+GitLab持续交付平台搭建-第1篇

过程大概这这样的:Jenkins首先从Gitlab去抓取我们写好的具体产品的playbook, 并使用virtualenv下的Ansible相关命令, 保证我们...

14730
来自专栏SH的全栈笔记

手把手教你从零开始搭建SpringBoot后端项目框架

打开IDE,点击File -> New Project。在左侧的列表中的选择Maven项目,点击Next。

9810
来自专栏python前行者

AttributeError: module 'lib' has no attribute 'X509_up_ref'

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

14030
来自专栏Tensorbytes

https加密协议流量劫持尝试

由越来越多的网页信息改为HTTPS 加密协议,传统的运营商基于DPI的数据获取和广告营销方式已经不可行,需要一种新的方式采集可用数据。

4620
来自专栏Tensorbytes

kubernetes dashboard 安装及介绍

然后将”k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1” 替换为 “mirrorgooglecontainers/k...

17920
来自专栏好好学java的技术栈

你一定要知道,关于https的五大误区

如今,https协议正在被广泛重视和使用。随着今年2月初,谷歌旗下Chrome浏览器宣布将所有http标示为不安全网站,许多网站都争相从http升级到了http...

8640
来自专栏CWIKIUS

jenkins 邮件发送错误

本文转载自:https://blog.ossez.com/archives/3096

5730
来自专栏java思维导图

面试官问:一个 TCP 连接可以发多少个 HTTP 请求?我懵了!

曾经有这么一道经典面试题:从 URL 在浏览器被被输入到页面展现的过程中发生了什么?

17510
来自专栏码客

Mac中使用Mitmproxy/Charles拦截移动设备网络请求

拦截http proxy的软件很多,如 Fiddler,Charles等,能够实现对http通信的拦截,可以查验Request和Response参数,特别是移动...

13010

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励