前言 |
ES 作为一款当下非常流行的轻量级存储搜索引擎, 其安全性也变得日益重要. 否则就会非常容易造成敏感数据泄露的严重问题. 主要是因为使用者并没有将 ES 的安全功能打开. 那么出现这种问题产生的原因是什么呢? 原因大致如下:
1,ES 在默认安装后, 不提供任何形式的安全防护;
2, 错误的配置信息导致公网可以访问 ES 集群;
---- 在 Elasticsearch.YAML 的配置文件中, server.host 被错误的配置为 0.0.0.0
一, 数据安全性的基本需求
1, 身份验证: 鉴定用户是否合法;
2, 用户鉴权: 指定哪个用户可以访问哪个索引
3, 传输加密
4, 日志审计
二, 那么怎么满足这类安全需求呢?
方案大致可以如下几种:
1, 设置 Nginx 反向代理, 让用户在访问 ES 集群的时候需要提供用户验证信息, 这个方法目前使用比较普遍. 特别是针对 ES 低版本基础版, 开源版;
2, 安装免费的 security 插件, 比如 Search Guard,ReadOnly REST
3,ES 的商业包 x-pack 的 Basic 版 , 从 ES6.8 基础版开始免费使用一些基础的安全功能, 比如身份验证, 用户鉴权
三, Authentication - 身份认证
认证体系的几种类型:
提供用户名, 密码
提供秘钥, kerberos 票据
在 ES 中提供的这种认证服务我们称之为 Realms, 它分为两种, 一种收费, 一种免费
内置的 Realms(免费)
在这种情况下, 用户名和密码都保存在 Elasticsearch 的索引中
外部的 Realms(收费)
如果 ES 的安全机制需要与企业内的其它服务器应用安全集成的话, 比如 AD/LDAP/PKI/kerberos. 需要购买专用的 ES 安全服务
四, RBAC - 用户鉴权
什么是 RBAC? Role Based Access Control. 定义一个角色, 并分配一组权限. 权限包括索引级, 字段级, 集群级的不同操作. 然后通过将角色分配给用户, 使得用户拥有这些权限.
在 ES 中定义的这些权限有哪些呢?
1, 集群权限 Cluster Privileges
all/monitor/manager/manager_index/manage_index_template/manage_rollup
2, 索引权限 indices Privileges
all/create/create_index/delete/delete_index/index/manage/read/write/view_index_metadata
五, 开启并配置 X-Pack 的认证与鉴权
其实, 在前面的章节中, 我也讲到了这块的部署应用, 那么今天再来实操验证此安全功能. 我将以一台 CVM 多进程的方式论证一下这个逻辑. 步骤如下:(以 ES 6.8.2 为列)
1, 修改配置文件 , 打开认证, 授权功能
只需要开启此命令即可 xpack.security.enabled:"true"
2, 创建默认的用户和分组 ES 默认提供了多个用户以及组权限, 需要设置密码
/bin/Elasticsearch-password interactive
3, 当集群开始身份验证后, 配置 Kibana, 创建不同的用户测试
闲话少说, 接下来, 上实际部署过程. 启动 3 个 es 进程模拟 3 个节点
进程 1
进程 2
进程 3
接下来, 给集群的默认用户创建密码
给用户设定密码
那么我们为每一个默认的用户都确定一个密码, 然后按回车. 依次类推直到完成.
为 elastic 创建密码
使用 curl 命令验证一下: 确认是可以的.
Curl 验证
接下来, 设置 Kibana, 让 Kibana 也具备用户鉴权的功能.
kibana.conf 配置文件中, 改一下如下信息, 这个 Kibana 用户是专门用来与 ES 进行连接使用的.
kibana 用户密码设置
然后我们启动 Kibana 服务, 并登录访问. 用超级用户 elastic 登录
登录 Kibana
在 kibana 界面菜单栏 -- 点击 management--Security, 点击打开: 如下
Security 界面
先创建 Roles. 选择 Roles---->create role, role name 自己定义, 这里比如 card-onlyread
创建角色
接下来, 只允许这个角色在 kibana 操作, 对索引 index_test 只允许读该索引. 配置如下
另外, 我们还得允许该角色对 kibana 进行访问, 所以还要给它读得权限
然后点击 create role 即可
好, 那么我们将创建了一个角色, 解析来, 再创建一个用户, 将该用户加入该角色进行测试, 点击 users- create new user 创建用户, 点击完成即可
将用户加入该 roles 组
最后一步: 验证结果, 退出当前得用户, 用新创建得用户登录, 实现对索引得操作, 看能否实现?
kibana, 开发工具里输入如下命令:
首先, 查询一下 GET test_index/_search 可以执行
其次, 删除索引, 看能否执行? DELETE test_index 不能执行, 报以下错误. 因为没有权限.
无法删除索引
其次, 那咱们再改一下用户所属组得权限. 增加一个 delete 权限, 再来验证.
Delete test_index
删除成功
六, 总结
那么本节中我给大家介绍了安全对于数据得重要性以及搭建一个安全的 ES 集群环境 --- 如何在 Elasticsearch 中通过 x-pack 的安全功能保护的企业真实数据, 好的, 今天就讲到这里. 你 GET 了吗?
来源: https://www.qcloud.com/developer/article/1620806