一:业务背景
- 线上集群版本
elasticsearch-5.6.15
- ES在默认安装后,不提供任何形式的安全防护,运维安全扫描发现漏洞,要求项目组进行修复
二:方案调研
-
设置Nginx反向代理,让用户在访问ES集群的时候需要提供用户验证信息,这个方法目前使用比较普遍。特别是针对ES低版本基础版、开源版;
-
安装免费的security插件,比如Search Guard、ReadOnly REST
-
ES的商业包 x-pack的Basic版 ,从ES6.8基础版开始免费使用一些基础的安全功能,比如身份验证、用户鉴权
基于要求:1. 既不修改 线上版本,2. 也不增加新组件如nginx
决定使用插件方式添加鉴权
xpack : 对于5.x免费支持不好
elasticsearch-http-basic: 已经很久没有维护
决定使用 ReadOnly REST
三:下载安装
-
选择对应的es版本,并填入有效邮箱,就可以收到下载链接
https://readonlyrest.com/download/
-
安装插件
[es目录]/bin/elasticsearch-plugin install file:///tmp/readonlyrest-X.Y.Z_esW.Q.U.zip
注意 file:// 后面跟下载文件绝对路径
- 创建配置文件
readonlyrest.yml
- 进入es的config文件夹(即elasticsearch.yml所在的文件夹)
在此示例中,配置ReadonlyREST对所有HTTP请求都要求基本身份验证,否则返回:401 Unauthorized
readonlyrest:
access_control_rules:
- name: "Require HTTP Basic Auth"
type: allow
auth_key: user:password
- es 6.4.0 以上还需要把X-Pack禁用,编辑
elasticsearch.yml
xpack.security.enabled: false
- 启动es
bin/elasticsearch -d
四:测试
api直连
ip与端口号与自己配置为准
curl -vvv -u user:password "http://10.128.123.45:9200/_cat/indices"
或者查看集群状态
curl -vvv -u user:password -XGET http://10.128.123.45:9200/_cat/health?v&ts=false
代码连接
代码连接需要增加两项配置
es.net.http.auth.user
基本身份验证用户名
es.net.http.auth.pass
基本身份验证密码