设为首页 收藏本站
查看: 671|回复: 0

[经验分享] elasticsearch使用jetty进行简单的权限控制

[复制链接]

尚未签到

发表于 2017-2-27 06:26:55 | 显示全部楼层 |阅读模式
默认elasticsearch是使用netty作为http的容器,由于netty并没有权限模块,所以默认es没有任何的权限控制,直接通过http就可以进行任何操作,除非把http禁用。但如果你使用elasticsearch-jetty插件,就可以使用jetty自带的权限管理进行一些权限的控制,同时也可以支持通过https协议来访问es,还有就是支持gzip压缩响应信息。
 
插件参数
参数名描述默认哪里用到config设置jetty的配置文件,可以设置多个jetty的配置文件jetty.xmlpluginserver_idJetty服务的IDESServerpluginportJetty http请求监听的端口http.port或9200-9300jetty.xmlbind_hostJetty绑定的地址
http.bind_host 或http.hostjetty.xmlpublish_hostJetty对外发布的地址
http.publish_hosthttp.hostjetty.xmlssl_portJetty SSL连接器监听的端口 jetty-ssl.xml 和jetty-strong-ssl.xmlssl_bind_hostJetty SSL连接器绑定的地址 jetty-ssl.xml 和jetty-strong-ssl.xmlkeystore_passwordSSL连接器的keystore的密码. 纯文本类型的密码可以使用。经过哈希加密过的密码不支持。 jetty-ssl.xml 和jetty-strong-ssl.xml
1.安装
该插件地址:https://github.com/sonian/elasticsearch-jetty
由于我试验是使用0.90.0BETA1版本的es,这个插件目前是支持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参数就行。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-347557-1-1.html 上篇帖子: Jetty用spring bean格式配置hotdeploy不生效 下篇帖子: Jetty对某个web应用启用安全认证
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表