默认elasticsearch是使用netty作为http的容器,由于netty并没有权限模块,所以默认es没有任何的权限控制,直接通过http就可以进行任何操作,除非把http禁用。但如果你使用elasticsearch-jetty插件,就可以使用jetty自带的权限管理进行一些权限的控制,同时也可以支持通过https协议来访问es,还有就是支持gzip压缩响应信息。 

插件参数 





1.安装 

改插件地址:https://github.com/sonian/elasticsearch-jetty 

这个插件目前是支持0.20.2版本的es,新版本的es有些方法名变了,把源码下下来,把变了名的方法改过来从新编译打包就行。 

打包完后把project home/target/release里面的压缩文件放到es的plugins目录解压, 

修改es配置文件elasticsearch.yml,添加 

http.type: com.sonian.elasticsearch.http.jetty.JettyHttpServerTransportModule 

把项目根目录下的config文件夹里面的文件(除了elasticsearch.yml和logging.yml)复制到es的config目录下。 

启动es。 



2.验证插件是否安装成功 

(1) 

es控制台出现一下字样: 

[2013-04-14 08:45:11,658][INFO ][org.eclipse.jetty.server.Server] [Songbird] jet 

ty-8.1.4.v20120524 

[2013-04-14 08:45:11,845][INFO ][org.eclipse.jetty.server.AbstractConnector] [So 

ngbird] Started SelectChannelConnector@0.0.0.0:9200 

(2) 

随便发送一个请求,如$ curl -I "http://localhost:9200/" 

查看响应头,如果包含Server: Jetty(8.1.4.v20120524)就表示安装成功。 

HTTP/1.1 200 OK 

Content-Type: text/plain;charset=UTF-8 

Access-Control-Allow-Origin: * 

Content-Length: 0 

Server: Jetty(8.1.4.v20120524) 



3.配置ssl使其支持https请求 

配置在原有基础上加上 

sonian.elasticsearch.http.jetty: 

    config: jetty.xml,jetty-ssl.xml 

    ssl_port: 9443 

    keystore_password: "OBF:1nc01vuz1w8f1w1c1rbu1rac1w261w9b1vub1ndq" 





4.添加基本权限控制 

修改es配置文件,添加jetty-hash-auth.xml,jetty-restrict-writes.xml两个文件到config中 

http.type: com.sonian.elasticsearch.http.jetty.JettyHttpServerTransportModule 

sonian.elasticsearch.http.jetty: 

    config: jetty.xml,jetty-hash-auth.xml,jetty-restrict-writes.xml 

其中jetty-hash-auth.xml文件里面引用到realm.properties这个文件配置的权限信息。 

格式如下: 

username: password[,rolename ...] 

即:用户名:密码[,角色1,角色2...] 

可以看看例子: 

superuser: Adm1n,admin,readwrite 

user: Passw0rd,readwrite 

例如第二个就是用户名为user,密码为Passw0rd,角色为readwrite,即有读写的权限。这个权限角色是在jetty-restrict-writes.xml里面设置的。 

jetty-restrict-writes.xml这个文件对es集群的写操作进行了限制,即要通过鉴权才能进行写操作。具体设置可以查看这个文件。 



这时重新启动es,对es进行写入或删除删除操作,如果发现报403错误,就表示配置成功。 

这时就必须在请求头加上权限验证,格式如下: 

参数名:Authorization 

值:Basic + Base64(用户名:密码)    即对用户名和密码进行Base64加密 

如加密后的值为:Basic dXNlcjpQYXNzdzByZA== 

curl方式调用 

curl -v --user username:password http://localhost:9200 



5.日志记录请求 

设置es,把http.type设置成FilterHttpServerTransportModule 

http.type: com.sonian.elasticsearch.http.filter.FilterHttpServerTransportModule 

添加详细设置,该插件可以自由控制不同请求url的日志级别,如一些不是很重要的的请求(如查询集群健康和节点状态),我们把它设置成trace状态,如果是搜索或统计这些重要的查询,我们可以设置记录它的请求的body信息,配置如下。 

sonian.elasticsearch.http.filter: 

    http_filter_chain: ["logging"] 

    http_filter: 

        # Request logging filter 

        logging: 

            logger: request 

            format: text 

            type: com.sonian.elasticsearch.http.filter.logging.LoggingFilterHttpServerAdapter 

            level: INFO 

            log_body: false 

            loggers: 

                stats: 

                    path: ["/_cluster/health", "/_cluster/nodes", "/_cluster/state", "/_cluster/nodes/{node}/stats"] 

                    method: GET 

                    level: TRACE 

                searches: 

                    path: ["/_search", "/_search/scroll", "/_search/scroll/{scroll_id}", "/{index}/_search", 

                            "/{index}/{type}/_search", "/{index}/{type}/{id}/_mlt"] 

                    method: GET, POST 

                    log_body: true 

                count: 

                    path: ["/_count", "/{index}/_count", "/{index}/{type}/_count"] 

                    method: GET, POST 

                    log_body: true 

这样设置的话日志都是写进一个文件里,如果想每天对文件进行拆分,可以修改config里面的logging.yml文件,添加如下内容: 

logger: 

  ........ 

  request: INFO, request_log_file 



additivity: 

  request: false 



appender: 

  ......... 

  request_log_file: 

      type: dailyRollingFile 

      file: ${path.logs}/${cluster.name}_requests.log 

      datePattern: "'.'yyyy-MM-dd" 

      layout: 

        type: pattern 

        conversionPattern: "[%d{ABSOLUTE}] %m%n" 



6.开启GZip压缩响应信息 

只需把jetty-gzip.xml加到config参数就行。

elasticsearch使用jetty进行简单的权限控制的更多相关文章

  1. **CodeIgniter通过hook的方式实现简单的权限控制

    根据自己的实际情况,需要两个文件,一个是权限控制类,Acl,另外一个是权限配置的文件acl.php放在了config这个目录下. Acl这个类放在了application/hook/acl.php.通 ...

  2. JavaWeb项目:Shiro实现简单的权限控制(整合SSM)

    该demo整合Shiro的相关配置参考开涛的博客 数据库表格相关设计  表格设计得比较简单,导航栏直接由角色表auth_role的角色描述vRoleDesc(父结点)和角色相关权限中的权限描述(标记为 ...

  3. [PHP] 最简单的权限控制设计

    假设url部分我们只有action和method , 某个控制器下的某个方法 , 比如:log/loginlog   查看日志下的登陆日志, action就是log , method就是loginlo ...

  4. webapi框架搭建-安全机制(三)-简单的基于角色的权限控制

    webapi框架搭建系列博客 上一篇已经完成了“身份验证”,如果只是想简单的实现基于角色的权限管理,我们基本上不用写代码,微软已经提供了authorize特性,直接用就行. Authorize特性的使 ...

  5. ThinkPHP框架下基于RBAC的权限控制模式详解

    这几天因为要做一个项目,需要可以对Web应用中通用功能进行封装,其中一个很重要的涉及到了对用户.角色和权限部分的灵活管理.所以基于TP框架自己封装了一个对操作权限和菜单权限进行灵活配置的可控制模式. ...

  6. WPF wpf中按钮操作权限控制

    权限控制我们有很多种方式可以实现. 这次项目中做个简单的权限控制,我们在所有按钮触发前判断,有权限则可执行. 我们自定义一个命令类. public class DelegateCommand : IC ...

  7. React+DvaJS 之 hook 路由权限控制

    博客 学院 下载 GitChat TinyMind 论坛 APP 问答 商城 VIP 活动 招聘 ITeye 写博客 发Chat 登录注册 原 React+DvaJS 之 hook 路由权限控制 20 ...

  8. RABC权限控制(二级菜单实现)

    目前大部分系统由于用户体验,基本上菜单不会做的很深,以二级菜单为例,做了一个简单的权限控制实现,可精确到按钮级别(基于django),下面具体看看实现 1.表结构的设计 无论开发什么都需要先梳理清楚需 ...

  9. 两种RBAC权限控制模型详解

    序言 由于最近一直卡在权限控制这个坎上,原来设计的比较简单的权限控制思路已经无法满足比较复杂一些的场景,因此一直在探索一种在大部分场景下比较通用的权限模型. 首先,这里说明一下两种RBAC权限模型分别 ...

随机推荐

  1. java对数计算

    Java对数函数的计算方法非常有问题,然而在API中却有惊人的误差.但是假如运用了以下的方法,用Java处理数字所碰到的小麻烦就可以轻而易举的解决了. Sun的J2SE提供了一个单一的Java对数方法 ...

  2. ios中获取当前屏幕尺寸的方法

    //获取当前屏幕尺寸 CGRect screenFrame = [UIScreen mainScreen].bounds; int screenWidth = screenFrame.size.wid ...

  3. Android Binder机制原理(史上最强理解,没有之一)(转)

    原文地址: http://blog.csdn.net/universus/article/details/6211589 Binder是Android系统进程间通信(IPC)方式之一.Linux已经拥 ...

  4. oracle 序列介绍

    序列介绍 序列是一个计数器,它并不会与特定的表关联.通过创建Oracle序列和触发器实现表的主键自增. 序列的用途一般用来填充主键和计数. 序列使用 1.创建序列 ORACLE序列的语法格式为: CR ...

  5. 入门级(python)

    1.素数,求1-100之间的素数(想在代码中写中文注释,加一句#coding=utf-8,注意等号左右没空格) def isPrime(n): if(n == 1): return False els ...

  6. java链表实现快排

    链表文件 package sort; public class SqList {    public int LIST_INIT_SIZE = 8;//链表的原始大小    private int I ...

  7. json格式数据,将数据库中查询的结果转换为json, 然后调用接口的方式返回json(方式一)

    调用接口,无非也就是打开链接 读取流 将结果以流的形式输出 将查询结果以json返回,无非就是将查询到的结果转换成jsonObject ================================ ...

  8. LeetCode OJ 141. Linked List Cycle

    Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using ext ...

  9. IT人为什么难以拿到高薪?【转帖】

    最近在论坛里看到很多人发牢骚,说薪水少,可在我看来,你们这样的人拿得到高薪才怪! 我先问一句:这里有多少人是本科的?有多少人是正规本科的(不算自考,成考和专升本)?有多少人是有学位的?有多少有学位的是 ...

  10. 几种访问其他域swf文件,或本地浏览器运行环境【安全沙箱】冲突解决方法

    声明: 几种方法都源自网络,我只负责汇总一下子,因为来自多方转载,也找不到初始出处了,需要的可以随意收藏,物尽其用,蛮好^_^ 对于类似的出错信息:SecurityError: Error #2148 ...