全部產品
Search
文件中心

Elasticsearch:X-Pack整合LDAP認證最佳實務

更新時間:Jun 30, 2024

本文介紹如何基於Elasticsearch配置輕量目錄訪問協議LDAP(Lightweight Directory Access Protocol)認證,以實現相應角色的LDAP使用者訪問Elasticsearch。

前提條件

您已完成以下操作:

  • 建立Elasticsearch執行個體。本文以6.7版本為例。

    具體操作,請參見建立Elasticsearch執行個體

  • 準備和Elasticsearch同VPC下的LDAP服務和使用者資料,本文以OpenLDAP 2.4.44版本為例。

    具體操作,請參見LDAP官方文檔

注意事項

自2020年10月起,Elasticsearch對不同地區進行了網路架構的調整,對建立的執行個體有以下影響:

  • 舊網路架構下,如果需要訪問公網,可以直接使用SNAT功能或自建Nginx代理。

  • 新網路架構下,LDAP功能受到網路限制,您可以使用PrivateLink進行VPC網路打通,具體配置請參見配置執行個體私網串連。如果您需要訪問公網,則需要配置Nginx代理進行請求轉寄。

  • 舊網路架構下,Elasticsearch僅支援單可用性區域的LDAP認證。

說明

關於網路架構,請參見【通知】網路架構調整

操作流程

  1. 步驟一:擷取終端節點網域名稱(可選)

  2. 步驟二:配置LDAP認證

  3. 步驟三:為域帳號資訊映射角色

  4. 步驟四:驗證結果

步驟一:擷取終端節點網域名稱(可選)

如果您建立的Elasticsearch處於新網路架構下(2020年10月及之後建立的執行個體屬於新網路架構),需要藉助PrivateLink,打通使用者VPC與阿里雲服務帳號VPC,擷取終端網域名稱,為後續配置做準備。具體操作如下:

  1. 建立與Elasticsearch執行個體處於同一VPC下,且支援PrivateLink功能的Server Load Balancer執行個體。
  2. 配置Server Load Balancer執行個體。

    配置時,需要指定LDAP所在的伺服器為後端伺服器,監聽連接埠為389。

    具體操作,請參見配置執行個體私網串連

  3. 建立終端節點服務。

    具體操作,請參見步驟二:建立終端節點服務

  4. 配置Elasticsearch私網互連。
  5. 擷取終端節點網域名稱。

    具體操作,請參見配置執行個體私網串連

    說明 請先記錄擷取到的節點網域名稱,該網域名稱會在後續配置中使用。

步驟二:配置LDAP認證

目前,X-Pack整合LDAP認證支援通過以下兩種方式配置:

  • 使用者搜尋模式。

  • 帶有使用者DNs特定模板的模式。

其中,使用者搜尋模式是最常見的操作方式。在此模式中,具有搜尋LDAP目錄許可權的特定使用者,根據X-Pack提供的使用者名稱和LDAP屬性搜尋進行身分識別驗證的使用者的DN。一旦找到,X-Pack將使用找到的DN和提供的密碼,嘗試綁定到LDAP目錄來驗證使用者。詳細資料,請參見Configure an LDAP realm

以下為LDAP管理DN的映射方式,需要在Elasticsearch的YML檔案中添加如下配置,具體操作請參見配置YML參數。Elasticsearch執行個體的版本不同,添加的配置也不同,具體如下:

  • 6.7版本

    xpack.security.authc.realms.ldap1.type: ldap
    xpack.security.authc.realms.ldap1.order: 2
    xpack.security.authc.realms.ldap1.url: "ldap://ep-bp1dhpobznlgjhj9****-cn-hangzhou-i.epsrv-bp1q8tcj2jjt5dwr****.cn-hangzhou.privatelink.aliyuncs.com:389"
    xpack.security.authc.realms.ldap1.bind_dn: "cn=zhang lei,ou=support,dc=yaobili,dc=com"
    xpack.security.authc.realms.ldap1.bind_password: "yourPassword"
    xpack.security.authc.realms.ldap1.user_search.base_dn: "ou=support,dc=yaobili,dc=com"
    xpack.security.authc.realms.ldap1.user_search.filter: "(cn={0})"
    xpack.security.authc.realms.ldap1.group_search.base_dn: "ou=support,dc=yaobili,dc=com"
    xpack.security.authc.realms.ldap1.unmapped_groups_as_roles: false
  • 7.10版本

    xpack.security.authc.realms.ldap.ldap1.order: 2
    xpack.security.authc.realms.ldap.ldap1.url: "ldap://ep-bp1dhpobznlgjhj9****-cn-hangzhou-i.epsrv-bp1q8tcj2jjt5dwr****.cn-hangzhou.privatelink.aliyuncs.com:389"
    xpack.security.authc.realms.ldap.ldap1.bind_dn: "cn=srd_artddffctory,ou=githab,ou=All Users,dc=motenta,dc=ai"
    xpack.security.authc.realms.ldap.ldap1.bind_password: "yourPassword"
    xpack.security.authc.realms.ldap.ldap1.user_search.base_dn: "ou=support,dc=yaobili,dc=com"
    xpack.security.authc.realms.ldap.ldap1.user_search.filter: "(cn={0})"
    xpack.security.authc.realms.ldap.ldap1.group_search.base_dn: "ou=support,dc=yaobili,dc=com"
    xpack.security.authc.realms.ldap.ldap1.unmapped_groups_as_roles: false

參數

說明

type

設定域。此處必須設定為ldap

order

域的優先順序,數值越小,優先順序越高。當配置中指定多個域時,建議配置此參數,系統會先訪問order值較小的域。

說明

8.x版本要求order數值唯一性,建議使用2。

url

指定LDAP伺服器的URL及連接埠。ldap協議表示使用普通串連,連接埠為389;ldaps表示使用SSL安全連線,連接埠為636。

重要

新網路架構下需要配置為終端節點網域名稱:連接埠終端節點網域名稱可在步驟一:擷取終端節點網域名稱(可選)中擷取。本文以ep-bp1dhpobznlgjhj9****-cn-hangzhou-i.epsrv-bp1q8tcj2jjt5dwr****.cn-hangzhou.privatelink.aliyuncs.com:389為例。

bind_dn

用於綁定到LDAP並執行搜尋的使用者的DN,僅適用於使用者搜尋模式。

bind_password

用於綁定到LDAP目錄的使用者的密碼。

user_search.base_dn

使用者搜尋的容器DN。

group_search.base_dn

用於搜尋使用者具有成員資格的容器DN。當此參數不存在時,Elasticsearch將搜尋user_group_attribute指定的屬性,來確定成員資格。

unmapped_groups_as_roles

預設false。如果設定為true,則任何未映射的LDAP組的名稱都將用作角色名稱分配給使用者。

更多參數的詳細資料,請參見Security settings in Elasticsearch

步驟三:為域帳號資訊映射角色

  1. 登入目標Elasticsearch執行個體的Kibana控制台,根據頁面提示進入Kibana首頁。
    登入Kibana控制台的具體操作,請參見登入Kibana控制台
    說明 本文以Elasticsearch 6.7.0版本為例,其他版本操作可能略有差別,請以實際介面為準。
  2. 在左側導覽列,單擊Dev Tools
  3. Console中執行如下命令,映射LDAP下的zhang*賬戶為管理員角色。

    8.x版本

    POST _security/role_mapping/ldap_super_user1?pretty
    {
      "roles": [ "superuser" ],
      "enabled": true,
      "rules": {
        "any": [
          {
            "field": {
              "username": "zhang*"
            }
          }
        ]
      }
    }

    其他版本

    POST _xpack/security/role_mapping/ldap_super_user1?pretty
    {
      "roles": [ "superuser" ],
      "enabled": true,
      "rules": {
        "any": [
          {
            "field": {
              "username": "zhang*"
            }
          }
        ]
      }
    }

    更多資訊,請參見elastic對應版本

步驟四:驗證結果

  1. 使用已授權的zhang*帳號登入Elasticsearch的Kibana控制台。

    登入Kibana

  2. 在左側導覽列,單擊Dev Tools
  3. Console中執行如下命令,驗證zhang*使用者是否有修改叢集配置的許可權。

    PUT _cluster/settings
    {
      "persistent": {
        "action.auto_create_index": true
      }
    }

    授權成功後,預期結果如下。返回結果