浅析ES的安全模块

前言

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。

本文作者:卜玉凯(点融黑帮),目前就职于点融网支付组、典型软件工程师,专注于支付业务。爱好:夜跑、羽毛球。

小礼物

来源: https://www.jianshu.com/p/8ab4c955badc