前言
Elasticsearch(以下简称ES)广泛应用于互联网企业(Github,Netflix,DigitalOcean...),ES并未提供免费的安全插件来守护ES集群,对于一家商业公司这么做无可厚非,但这更说明ES安全模块的重要性。本文将简单介绍ES、ES的插件体系并着重介绍ES安全模块的实现。
ES 简介
ElasticSearch 是一个分布式,实时,全文搜索引擎。底层实现基于Lucene全文搜索引擎并提供了RESTful接口实现,数据以JSON文档的格式存储索引,不需要预先规定范式。
通用的应用场景包括:搜索引擎、NOSQL存储、ELK。
ES除了充分利用的Lucene提供的全文搜索功能还扩展了以下功能:
可搜索的分布式文件存储
实时分析的分布式搜索引擎
横向扩展非常容易,可处理PB级数据
ES 插件体系
和很多系统一样,ES也通过插件来增强系统核心功能。ES主要支持两种类型的插件:
Java插件 (Shield,SearchGuard)
该类型插件只包含Jar文件,通过拦截请求实现功能,且须安装在集群中的每个节点上并且需要重新启动后才能生效。
Site插件 (kopf,marvel)
site插件主要包含WEB资源文件,如Js、HTML、CSS,通过ES内嵌的服务器,可直接访问http://es-cluster:9200/_plugin/plugin 来查看相应的插件。
基于插件的安全实现
根据ES提供的插件机制,我们可以通过插件拦截请求实现以下安全控制:
拦截、认证HTTP、Transport请求
用户权限验证
审计功能
节点通信证书加密
SearchGuard简介
Search Guard 2(以下简称SG2)是一个提供了加密、认证、授权功能的ES开源插件(依赖Search Guard SSL插件)并且提供了细粒度到文档、字段级别的权限控制,是商业版Shield插件的开源替代。SG和Shield的实现大同小异,通过分析SG即可了解ES的安全模块的设计与实现 。另:SG1版已废弃,不推荐使用。
下面简单介绍集成配置和关键源码(伪代码)简析。
配置
安装SG、SG-SSL插件
bin/plugin install -b com.floragunn/search-guard-ssl/version
bin/plugin install -b com.floragunn/search-guard-2/version
证书文件可自行提供或根据seaerch_guard_ssl提供的example-pki-scripts脚本文件生成。
ES配置
更新权限管理信息
生成新密码并替换sg_internal_users.yml
plugins/search-guard-2/tools/hasher.sh -p mycleartextpassword
启动ES,在sgconfig目录下设置好角色、用户权限,运行脚本将信息写入ES集群
plugins/search-guard-2/tools/sgadmin.sh -cd plugins/search-guard-2/sgconfig/ -ks plugins/search-guard-2/sgconfig/keystore.jks -ts plugins/search-guard-2/sgconfig/truststore.jks -nhnv
关键源码简析
元数据
SG元数据在ES中的存储位置: searchguard.[ config | roles | rolesmapping | internalusers | actiongroups ]
用户认证
Transport认证
SG插件启动时注册SearchGuardFilter,并设置在filter chain中的执行顺序(from lowest order to highest)为Integer.MIN_VALUE,即第一个被执行,保证所有请求都会被SG拦截验证。
HTTP认证
BackendRegistry中注册REST请求预处理器-SearchGuardRestFilter拦截处理REST请求
权限管理
YAML格式权限配置文件,支持通配符和action group设置权限
过滤掉只能由admin和internal user等可以访问的索引,然后再角色的权限设置(有通配符和无通配符的权限会分开处理)对普通用户的action进行权限验证
审计
记录用户在ES集群中的操作日志并存储到ES中,以单独的插件提供审计模块,若需要审计功能则需要集将其加到SG2的依赖中。
总结
本文简单介绍了ES、ES插件体系以及基于该插件机制的SG的特性、配置以及关键源码的简单分析,还有一些特性值得我们去研究,比如DLS、FLS级别的控制,更多样的认证方式,与kibana、logstash的集成等,希望大家能够以更安全、方便的使用ES。
本文作者:卜玉凯(点融黑帮),目前就职于点融网支付组、典型软件工程师,专注于支付业务。爱好:夜跑、羽毛球。