为ElasticSearch添加HTTP基本认证

news/2024/7/3 12:08:30

ES的HTTP连接没有提供任何的权限控制措施,一旦部署在公共网络就容易有数据泄露的风险,尤其是加上类似elasticsearch-head这样友好的前端界面,简直让你的数据瞬间裸奔在黑客的眼皮底下。项目上线前做十万伏特的防护当然不现实,但至少,我们不要裸奔,穿一套比基尼吧。而做一个简单的HTTP认证并不需要从头造轮子,elasticsearch-http-basic就提供了针对ES HTTP连接的IP白名单、密码权限和信任代理功能。

安装

elasticsearch-http-basic还不支持ES标准的bin/plugin install [github-name]/[repo-name]的安装方式,但作者有提供编译好的jar包,不需要下载源码重新编译。GitHub上目前的最新版本是对应ES的1.4.0版本,但验证过1.5.2也是同样可用的。

插件的安装步骤如下:

  • 从elasticsearch-http-basic的发布版下载对应版本的jar包
  • mkdir -p plugins/http-basic; mv elasticsearch-http-basic-x.x.x.jar plugins/http-basic注意文件夹的名称
  • 重启ES进程
  • 验证插件是否生效:curl localhost:9200/_nodes/[your-node-name]/plugins?pretty=true(如果看到plugins列表包含有http-basic-server-plugin就说明插件生效了)

配置

elasticsearch-http-basic和其他ES插件一样,在config/elasticsearch.yml中统一配置:

配置名 默认值 说明
http.basic.enabledtrue开关,开启会接管全部HTTP连接
http.basic.user"admin"账号
http.basic.password"admin_pw"密码
http.basic.ipwhitelist["localhost", "127.0.0.1"]白名单内的ip访问不需要通过账号和密码,支持ip和主机名,不支持ip区间或正则
http.basic.trusted_proxy_chains[]信任代理列表
http.basic.logfalse把无授权的访问事件添加到ES的日志
http.basic.xforward""记载代理路径的header字段名

测试

  • Shell
# 无账号密码,不可访问
>>> curl http://[your-node-name]:[your-port]/[your-index]/_count?pretty=true
Authentication Required
# 通过user选项带上账号密码,返回正常数据
>>> curl --user [your-admin]:[your-password] http://[your-node-name]:[your-port]/[your-index]/_count?pretty=true
{
  "count" : xxx,
  "_shards" : {
    "total" : xxx,
    "successful" : xxx,
    "failed" : 0
  }
}
  • 添加了HTTP基本认证后,elasticsearch-head同样会弹窗要求你先进行权限认证

Python

ES官方的Python客户端可以通过http_auth配置账号密码:

from elasticsearch import Elasticsearch
es = Elasticsearch(['localhost'], http_auth=('your-admin', 'your-password'), port=...)

http://segmentfault.com/a/1190000002803609


http://www.niftyadmin.cn/n/3301275.html

相关文章

CodeForces 631 C.Report(单调栈)

Description 给出一个长度为n的序列a,两种操作: 1 x:把前x个数升序排 2 x:把前x个数降序排 问m次操作后的序列 Input 第一行两个整数n和m分别表示序列长度和操作数,之后n个整数ai表示该序列,最后m行每…

优酷 YouTube Twitter及JustinTV视频网站架构设计笔记

本文是整理的关于优酷、YouTube、Twitter及JustinTV几个视频网站的架构或笔记,对于不管是视频网站、门户网站或者其它的网站,在架构上都有一定的参考意义,毕竟成功者的背后总有值得学习的地方,虽然有些文章的发表时间有点久了&…

GDI+中发生一般性错误的解决办法(转)

今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现“GDI中发生一般性错误”的异常。 于是开始“摆渡”,并寻找到了解决办法:赋予 NETWORK SERVICE…

Redis 下key的过期时间详解 :expire

memcached 和 redis 的set命令都有expire参数,可以设置key的过期时间。但是redis是一个可以对数据持久化的key-value database,它的key过期策略还是和memcached有所不同的。梳理,整理如下: redis通过expire命令来设置key的过期时间…

VC 复制移动删除重命名文件文件

说明:1.以下封装了4个函数_CopyFile,_DeleteFile,_MoveFile,_ReNameFile2.每个函数都先拷贝了原来的路径,保证了路径是以2个\0\0结尾。(如果不以2个\0\0结尾,往往会出错)3.对于文件或…

使用RunWith注解改变JUnit的默认执行类,并实现自已的Listener

使用RunWith注解改变JUnit的默认执行类,并实现自已的Listener在平时的单元测试,如果不使用RunWith注解,那么JUnit将会采用默认的执行类Suite执行,如下类:public class TestClass { Test public void t1(){}}JUnit允许…

CodeForces 632 A.Grandma Laura and Apples(水~)

Description 一个老人卖苹果,有n位顾客依次来买,每次每位顾客都会买一半数量的苹果,如果苹果数量x为奇数,老人会把剩下的半个苹果送个客人,也就是说客人只花了x/20.5个苹果的价钱买了x/21个苹果,老人记得送…

VC++中的CString、char、int类型转换

1、如何将CString类型的变量赋给char*类型的变量方法一:GetBuffer函数 使用CString::GetBuffer函数。 char *p; CString str"hello"; pstr.GetBuffer(str.GetLength()); str.ReleaseBuffer();将CString转换成char * 时 CString str("aaaaaaa");…