Elasticsearch的Shield插件

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值