`
wbj0110
  • 浏览: 1610166 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

elasticsearch使用jetty进行简单的权限控制

阅读更多

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

 
插件参数
参数名 描述 默认 哪里用到
config 设置jetty的配置文件,可以设置多个jetty的配置文件 jetty.xml plugin
server_id Jetty服务的ID ESServer plugin
port Jetty http请求监听的端口 http.port9200-9300 jetty.xml
bind_host
Jetty绑定的地址
http.bind_host 或http.host jetty.xml
publish_host
Jetty对外发布的地址
http.publish_hosthttp.host jetty.xml
ssl_port Jetty SSL连接器监听的端口   jetty-ssl.xml 和jetty-strong-ssl.xml
ssl_bind_host Jetty SSL连接器绑定的地址   jetty-ssl.xml 和jetty-strong-ssl.xml
keystore_password SSL连接器的keystore的密码. 纯文本类型的密码可以使用。经过哈希加密过的密码不支持。   jetty-ssl.xml 和jetty-strong-ssl.xml

1.安装
由于我试验是使用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参数就行。
分享到:
评论

相关推荐

    Elasticsearch-linux

    - **设置权限**:由于Elasticsearch不允许root用户直接启动,因此需要创建一个新的用户(如`elsearch`)来运行Elasticsearch,并将`elasticsearch`文件夹的属主和属组改为该用户。 - **启动Elasticsearch**:切换到...

    基于springboot+mybatis+elasticsearch的仿牛客网题库后台系统.zip

    该项目是一个使用Spring Boot、MyBatis和Elasticsearch技术栈构建的仿牛客网题库后台系统。在深入了解这个系统之前,我们先分别探讨这三个关键组件。 **Spring Boot** Spring Boot是Spring框架的一个子项目,它旨在...

    基于SSH和MySql的社团管理系统

    同时,系统可能还需要考虑性能优化,如使用缓存技术(如Redis)提高数据访问速度,使用搜索引擎(如Elasticsearch)进行全文搜索等。 总结来说,基于SSH和MySql的社团管理系统是一个综合运用多种技术,实现学生社团...

    java基于SpringBoot的在线文档管理系统的设计与实现

    - 可以使用Elasticsearch或Solr进行全文搜索,提高文档检索效率。 7. **用户界面**: - 创建响应式前端页面,可使用Bootstrap、Vue.js或React等现代前端框架,确保在不同设备上的良好展示。 - 使用Ajax实现异步...

    synergy spring boot cloud架子,包含了前后端功能,有完善的用户权限功能

    5. 监控与日志:集成 Spring Boot Actuator 进行健康检查、指标监控,结合 ELK (Elasticsearch, Logstash, Kibana) 或 ELK Stack (Elasticsearch, Logstash, Kibana, Beats) 进行日志收集和分析。 四、实践应用 在...

    一个仿淘宝的Java Web项目(商家、买家、后台管理).zip

    后台通常有更高级别的权限控制和复杂的业务逻辑处理,可能用到Spring Security进行权限控制,以及Elasticsearch或Solr进行全文搜索。 【文件名称列表】中的"557sdsadasdfsdgfd"看似是一个错误的文件名,无法提供...

    Java项目--新闻发布系统

    这可能涉及到对数据库查询优化和全文搜索技术,如Solr或Elasticsearch。 5. **评论互动**:用户可以对新闻进行评论,形成社区互动。这部分可能需要处理并发访问和实时更新,可以使用WebSocket或AJAX技术实现动态...

    使用SSM技术开发的一个图书管理系统,包含数据库文件

    同时,考虑到性能监控、日志收集、故障恢复等运维需求,可能还会采用Docker容器化部署,配合Nginx反向代理和负载均衡,以及ELK(Elasticsearch、Logstash、Kibana)日志分析等工具。 以上就是关于"使用SSM技术开发...

    定时任务调度

    日志监控还可以结合ELK(Elasticsearch、Logstash、Kibana)堆栈,实现日志的实时搜索、分析和可视化。 **权限管理**是系统安全的关键部分,确保只有授权的用户或服务能执行特定的操作。在SpringBoot中,可以利用...

    java宜家酒店后台管理系统.zip

    14. **Elasticsearch搜索**:如果系统支持快速检索功能,可能使用Elasticsearch进行全文搜索,提升用户体验。 15. **Apache Tomcat或Jetty服务器**:作为Java应用服务器,用于运行和部署该后台管理系统。 综上所述...

    java食品公司管理系统.rar

    监控和日志分析工具如ELK(Elasticsearch、Logstash、Kibana)可以用于系统性能监控和问题排查。 总之,Java食品公司管理系统是一个集成了多种Java技术和最佳实践的复杂项目,涵盖了软件开发的多个层面,包括后端开发...

    基于ssm+web的微博网站.zip

    搜索功能可能使用Lucene或Elasticsearch提供全文检索能力。关注和粉丝机制是社交网络的重要组成部分,涉及到用户关系的建立和维护。 微信小程序部分,开发者需要熟悉微信开发者工具,使用其提供的API进行小程序的...

    基于Spring Boot的社区论坛项目.zip

    在实际项目中,通常还会有其他组件和框架的集成,如MyBatis或Hibernate作为ORM工具,Redis作为缓存,MongoDB或MySQL作为数据库,Elasticsearch进行全文搜索,以及使用Swagger进行API文档的生成和测试等。此外,日志...

    springboot459客户管理系统--论文pf.zip

    - 日志管理:日志收集和分析,例如使用Logback或Log4j,结合ELK Stack(Elasticsearch、Logstash、Kibana)进行日志分析。 - 安全性:遵循OWASP(开放网络应用安全项目)的安全最佳实践。 这个压缩包中的...

    《安全参考》HACKCTO-201503-27

    2. **ElasticSearch Groovy脚本远程代码执行漏洞分析(CVE-2015-1427)**:讨论了ElasticSearch中的一个远程代码执行漏洞。 3. **Jetty web server远程共享缓冲区泄漏分析(CVE-2015-2080)**:解释了Jetty Web...

    alading.zip_burstd71

    为了监控系统性能和故障排查,Alading可能集成了监控工具如Prometheus和Grafana,以及日志收集和分析系统如ELK(Elasticsearch, Logstash, Kibana)堆栈。 总结起来,"alading.zip_burstd71"是一个全面的JavaWeb...

    诗词鉴赏平台管理系统

    7. **搜索与推荐**:系统可能提供诗词搜索功能,支持按关键词、作者、朝代等条件查找,利用Lucene或Elasticsearch等搜索引擎技术提高查询效率。同时,基于用户喜好或热门度进行诗词推荐也是提升用户体验的重要手段。...

    基于springboot+ vue 的小区疫情防控平台源码.zip

    此外,Elasticsearch和Logstash可能用于日志收集和分析,Prometheus和Grafana用于系统性能监控。 为了运行这个项目,你需要先解压文件,然后在命令行中定位到`springboot_vue-master`目录。使用Maven或Gradle构建...

    新奥家电连锁网络系统.zip

    此外,安全方面,可能使用了Spring Security或Shiro框架进行权限控制,防止未授权访问,保护用户数据的安全。 系统设计上,可能遵循了SOA(Service-Oriented Architecture)服务化思想,将各个功能模块封装为独立的...

    Java项目之springboot在线外卖系统(源码)

    5. **搜索模块**:实现商品的模糊搜索和推荐功能,可能使用Elasticsearch进行高效检索。 6. **后台管理系统**:管理员进行系统设置、用户管理、订单审核等,提供数据统计和报表功能。 五、项目实践与学习价值 本...

Global site tag (gtag.js) - Google Analytics