Elasticsearch的Shield插件

Shield是Elastic公司推出的商業權限管理插件,它能夠保護Elasticsearch中的數據,採用加密的通信密碼,基於角色的訪問控制,IP過濾和審計等。node

安裝

Shield是以Elasticsearch插件的形式存在的。安裝過程以下:數據庫

1) 在Elasticsearch中安裝Shield插件。安全

bin/plugin install license服務器

bin/plugin install shield網絡

2) 啓動Elasticsearch。app

bin/elasticsearchdom

3) 添加管理員帳號elasticsearch

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加密配置

一、首先要生成證書:

cd CONFIG_DIR/shield

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

二、在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

三、配置LDAPS協議指定的URL屬性和端口號。例如,url: ldaps://ldap.example.com:636。

四、重啓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公衆號進行關注。

相關文章
相關標籤/搜索