2019独角兽企业重金招聘Python工程师标准>>>

Shield是Elastic公司推出的商业权限管理插件,它可以保护Elasticsearch中的数据,采用加密的通讯密码,基于角色的访问控制,IP过滤和审计等。

安装

Shield是以Elasticsearch插件的形式存在的。安装过程如下:

1) 在Elasticsearch中安装Shield插件。

bin/plugin install license

bin/plugin install shield

2) 启动Elasticsearch。

bin/elasticsearch

3) 添加管理员账号

bin/shield/esusers useradd es_admin -r admin

4) 测试是否生效

在页面访问数据的时候,会显示如图9.4所示的界面:

图9.4 Shield登录页面

当输入正确的账户和密码的时候,才可以访问数据。

1.1.1 工作原理

Shield是Elasticsearch的一个插件,一旦安装完成,插件将会拦截所有API请求,然后对请求进行认证和授权的校验。该插件同时提供SSL安全协议来传输网络数据,该插件提供了审计日志记录的能力,用来进行验证和审计。

用户认证

Shield定义了一组已知的用户,以便对请求的用户进行身份验证。这些用户的集合被定义为一个抽象的领域。这个抽象的领域可以是数据库,本地文件,LDAP,活动目录或者KPI。

授权

Shield的访问授权的数据模型由以下几个因素构成:

l 资源,包括集群,索引,别名等。

l 权限,对资源的一个或者多个操作。

l 许可,对应安全资源的一个或者多个权限。有2种类型的许可:集群和索引。

l 角色,权限的集合。

l 用户,准许访问资源的对象。

节点认证和信道加密

Shield可以使用SSL / TLS包进行内部通信。当SSL / TLS启用,节点相互验证的证书,建立节点之间的信任,验证防止未经身份验证的节点加入集群,通过验证后,内部通信是经过加密的。

IP过滤

Shield提供基于IP的针对节点的访问控制。通过IP控制可以限制其他机器访问Elasticsearch服务器,可以设置白名单或者黑名单进行过滤,可以设置IP或者网段。

审计

安全审计功能提供了访问Elasticsearch特定事件或者活动的记录,包括登录,授权,拒绝访问等。

1.1.2 用户认证

用户认证方式

系统支持以下几种方式的用户认证:

Native:一个内置的本地认证系统,默认可用。

File:一种内置的基于文件的认证系统,默认可用。

LDAP:通过外部轻量级目录协议进行身份验证。

AD:通过外部活动目录服务的身份验证。

PKI:通过使用可信的X.509证书的认证。

native, file, LDAP, AD这四种方式是用用户密码进行认证的。系统也支持自定义用户认证方式,可以多种认证方式同时存在,它本质上是一个配置的认证方式的优先列表。列表的顺序决定了将要认证的顺序。在认证过程中,系统将尝试一次验证一个认证方式的请求。一旦一种认证方式认证成功,通过身份认证的用户将与请求相关联的(下一步继续授权阶段)。如果一个认证方式无法对请求进行身份验证,则将认证链中的下一个认证方式。如果链中所有服务器无法验证的要求,认证就失败了,将返回错误(HTTP状态代码401)。

例如下面的代码片段配置认证链包含文件认证和本地服务器认证,以及两个LDAP和Active Directory域服务器认证。

shield.authc:

realms:

native:

type: native

order: 0

file:

type: file

order: 1

ldap1:

type: ldap

order: 2

enabled: false

url: 'url_to_ldap1'

...

ldap2:

type: ldap

order: 3

url: 'url_to_ldap2'

...

ad1:

type: active_directory

order: 4

url: 'url_to_ad'

匿名用户访问

认证过程可以分为两个阶段:令牌提取和用户认证。在第一阶段(令牌提取阶段),配置的服务器将请求尝试从传入的请求中提取/解析身份验证令牌。找到身份验证的令牌,然后将令牌用于认证。在没有任何身份验证令牌的情况下,传入的请求被认为是匿名的。

默认情况下,匿名请求被拒绝,并返回一个身份验证错误码(状态代码401)。可以通过配置改变这种行为,可以通过在elasticsearch.yml文件中配置下面的内容:

shield.authc:

anonymous:

username: anonymous_user

roles: role1, role2

authz_exception: true

本地认证

本地认证配置如下:

shield:

authc:

realms:

native1:

type: native

order: 0

可以通过 Users API来完成本地认证用户的管理。

l 增加本地用户

POST /_shield/user/ironman

{

"password" : "j@rV1s",

"roles" : [ "admin", "other_role1" ],

"full_name" : "Tony Stark",

"email" : "tony@starkcorp.co",

"metadata" : {

"intelligence" : 7

}

}

l 查询本地用户列表

GET /_shield/user

返回的值:

{

"found" : true,

"users" : [

{

"username" : "ironman",

"roles" : [ "admin", "other_role1" ],

"full_name" : "Tony Stark",

"email" : "tony@starkcorp.co",

"metadata" : {

"intelligence" : 7

}

}

}

]

}

l 删除本地用户

DELETE /_shield/user/ironman

本文由赛克 蓝德(secisland)原创,转载请标明作者和出处。

LDAP认证

可以通过配置使用目录访问协议(LDAP)进行用户认证。需要配置LDAP域和指定LDAP的角色在角色映射文件中。为了保护密码,和LDAP服务器之间的通信必须使用SSL / TLS加密。客户节点通过SSL / TLS连接到LDAP服务器需要LDAP服务器的证书或服务器的根CA证书安装在自己的密钥库和信任存储区中。在elasticsearch.yml中添加shield.authc.realms命名空间来进行配置,例如,下面的代码片段显示了在LDAP中配置用户认证:

shield:

authc:

realms:

ldap1:

type: ldap

order: 0

url: "ldaps://ldap.example.com:636"

bind_dn: "cn=ldapuser, ou=users, o=services, dc=example, dc=com"

bind_password: changeme

user_search:

base_dn: "dc=example,dc=com"

attribute: cn

group_search:

base_dn: "dc=example,dc=com"

files:

role_mapping: "CONFIG_DIR/shield/role_mapping.yml"

unmapped_groups_as_roles: false

配置用户DN模板来进行LDAP认证

如果你的LDAP环境使用一些特定的标准命名条件的用户,可以使用用户DN模板来配置。这种方法的优点是搜索不一定是要找出用户的DN。但多个绑定操作可能需要找到正确的用户DN。例如:

shield:

authc:

realms:

ldap1:

type: ldap

order: 0

url: "ldaps://ldap.example.com:636"

user_dn_templates:

- "cn={0}, ou=users, o=marketing, dc=example, dc=com"

- "cn={0}, ou=users, o=engineering, dc=example, dc=com"

group_search:

base_dn: "dc=example,dc=com"

files:

role_mapping: "/mnt/elasticsearch/group_to_role_mapping.yml"

unmapped_groups_as_roles: false

配置LDAP组

存储在每个节点的角色映射文件指定了LDAP组。当一个用户使用LDAP认证时,用户所属的组的角色定义了用户的权限。例如,下面的映射配置指定了LDAP管理员组和普通用户组:

monitoring:

- "cn=admins,dc=example,dc=com"

user:

- "cn=users,dc=example,dc=com"

- "cn=admins,dc=example,dc=com"

SSL / TLS加密配置

1、首先要生成证书:

cd CONFIG_DIR/shield

keytool -importcert -keystore node01.jks -file cacert.pem -alias ldap_ca

2、在elasticsearch.yml配置文件中配置SSL / TLS加密:

shield.ssl.keystore.path:          /home/es/config/shield/node01.jks

shield.ssl.keystore.password:      myPass

shield.ssl.keystore.key_password:  myKeyPass

3、配置LDAPS协议指定的URL属性和端口号。例如,url: ldaps://ldap.example.com:636。

4、重启Elasticsearch使elasticsearch.yml生效。

AD认证

可以通过配置使用活动目录(LDAP)进行用户认证。需要配置LDAP域和指定LDAP的角色在角色映射文件中。为了保护密码,和LDAP服务器之间的通信必须使用SSL / TLS加密。客户节点通过SSL / TLS连接到LDAP服务器需要LDAP服务器的证书或服务器的根CA证书安装在自己的密钥库和信任存储区中。在elasticsearch.yml中添加shield.authc.realms命名空间来进行配置,例如,下面的代码片段显示了在AD中配置用户认证

shield:

authc:

realms:

active_directory:

type: active_directory

order: 0

domain_name: ad.example.com

url: ldaps://ad.example.com:636

unmapped_groups_as_roles: true

AD认证的很多内容和上一节的LDAP基本一样,其他内容请参考上一节。

PKI身份认证

您以配置使用公共密钥基础设施(PKI)证书对用户进行身份验证。这要求客户提供X.509证书。可以结合使用PKI认证和用户名/密码认证。例如,可以启用SSL / TLS在传输层上使用一个PKI验证的X.509证书,同时还验证HTTP协议使用的用户名和密码。还可以设置shield.transport.ssl.client.auth允许客户无证书认证等。在elasticsearch.yml中添加shield.authc.realms命名空间来进行配置,例如:

shield:

authc:

realms:

pki1:

type: pki

为PKI用户分配角色

分配给PKI用户的角色映射文件存储在每个节点。在证书中可以区分不同的用户。例如,下面的映射配置指定John Doe的用户角色:

user:

- "cn=John Doe,ou=example,o=com"

基于文件的授权

可以管理和认证基于文件的认证,它是系统内容的认证方式,可以通过esusers控制台命令来增加和删除用户,分配用户角色,管理用户密码。在elasticsearch.yml中添加shield.authc.realms命名空间来进行配置,例如:

shield:

authc:

realms:

file1:

type: file

order: 0

用户管理命令在ES_HOME/bin/shield目录下:

l 增加用户

增加用户:esusers useradd <username>

增加用户同时设置密码:esusers useradd <username> -p <secret>

增加用户同时设置角色:esusers useradd <username> -r <comma-separated list of role names>

l 查询用户

esusers list

l 管理密码

esusers passwd <username> -p <password>

l 用户分配角色

用-a增加角色,-r删除角色。

esusers roles <username> -a <commma-separate list of roles> -r <commma-separate list of roles>

l 删除用户

userdel <username>

赛克蓝德(secisland)后续会逐步对Elasticsearch的最新版本的各项功能进行分析,近请期待。也欢迎加入secisland公众号进行关注。

转载于:https://my.oschina.net/secisland/blog/736929

Elasticsearch的Shield插件相关推荐

  1. Elasticsearch及相关插件的安装

    Elasticsearch及相关插件的安装 1.安装Elasticsearch并启动服务 2.安装第三方插件 2.1.Head插件 是Elasticsearch的一个集群管理工具,可以通过它来查看和搜 ...

  2. Elasticsearch安装X-Pack插件

    Elasticsearch安装X-Pack插件, 基于已经安装好的6.2.2版本的Elasticsearch, 安装6.2.2版本的X-Pack插件. 1.下载x-pack的zip包到本地 https ...

  3. 【Elasticsearch】es 插件类型

    1.概述 Elasticseaarch提供插件的方式来让更多的开发者来增强Elasticsearch的功能 插件类型 Elasticsearch提供了如下几种插件类型 类型 概述 ActionPlug ...

  4. ES | CentOS下基于ElasticSearch的head插件安装

    文章目录: ▶ 环境要求 ▶ node下载 ▶ node安装 ▶ head插件下载 ▶ head插件安装 ▶ 启动ElasticSearch-head ▶ 访问验证ElasticSearch-head ...

  5. ELK日志分析平台(一)—elasticsearch安装及配置、elasticsearch图形化插件安装

    1.elasticsearch简介 elastic官网 2.安装及配置 官方下载网站 本次实验版本用7.6 [root@foundation50 ~]# cd /mnt/pub/docs/elk/7. ...

  6. 在windows上配置elasticsearch和river-mongodb插件

    安装ElasticSearch 1. 下载elasticsearch安装包. 下载地址 https://www.elastic.co/downloads/elasticsearch 2. 解压elas ...

  7. 分布式搜索引擎ElasticSearch+Kibana (Marvel插件安装详解)

    在安装插件的过程中,尤其是安装Marvel插件遇到了很多问题,要下载license.Marvel-agent,又要下载安装Kibana 版本需求 Java 7 or later Elasticsear ...

  8. 【ElasticSearch】ElasticSearch-SQL插件

    ElasticSearch-SQL插件 image2017-10-27_11-10-53.png (1067×738)elastic SQL_百度搜索Druid SQL 解析器的解析过程 - bean ...

  9. ElasticSearch安装拼音插件(pinyin)

    环境介绍 集群环境如下: Ubuntu14.04 ElasticSearch 2.3.1(3节点) JDK1.8.0_60 开发环境: Windows10 JDK 1.8.0_66 Maven 3.3 ...

最新文章

  1. 滁州布局创新链服务链~农业大健康·万祥军:谋定功能性农业
  2. 如何使用Data Lake Analytics创建分区表
  3. 比紫书优化,14行代码AC——例题 5-7 丑数(Ugly Numbers,UVa 136)——解题报告
  4. 程序员如何与人打交道
  5. sql查询字段的值不为空
  6. 函数实现不放在头文件的原因,及何时可以放头文件的情况【转】
  7. python中import问题
  8. CentOS 6.2 中文
  9. 三年经验前端vue面试记录
  10. 9月9日资讯 星期四 农历八月(小) 初三
  11. 14个创意lut电影大片级别调色预设
  12. SQL16号统计1~15号数据,1号统计上月15~月底数据
  13. 添加域后如何将域用户加入本地管理员组
  14. 【新知实验室】TRTC
  15. The supplied data appears to be in the Office 2007+ XML问题解决
  16. 安卓手机屏幕共享给电脑操作的几款软件
  17. 豆瓣2018年度电影榜单
  18. 微软2007日语输入法
  19. Anaconda详细安装使用教程
  20. siki学院unity初级案例炸弹人取空位置点的Bug

热门文章

  1. SparkStreaming读取Socket数据
  2. 数据算法——Spark的TopN实现
  3. iOS高级面试之NSRunLoop须知
  4. matlab处理图片建系,求MATLAB处理一张图片,把图片放入坐标系,建立类似于经纬度的网格...
  5. history linux 日志服务器_Linux日志分析
  6. vue 打印 canvas 显示空白
  7. React router 4 获取路由参数,跨页面参数
  8. 移动端popstate的怪异行为
  9. 【POJ】1026.Cipher
  10. Hadoop学习笔记-关于Hadoop你不得不知道的12个事实