本文介紹如何基於Elasticsearch配置輕量目錄訪問協議LDAP(Lightweight Directory Access Protocol)認證,以實現相應角色的LDAP使用者訪問Elasticsearch。
前提條件
您已完成以下操作:
建立Elasticsearch執行個體。本文以6.7版本為例。
具體操作,請參見建立Elasticsearch執行個體。
準備和Elasticsearch同VPC下的LDAP服務和使用者資料,本文以OpenLDAP 2.4.44版本為例。
具體操作,請參見LDAP官方文檔。
不支援組織單位(ou)的配置方式,支援cn和Group。
注意事項
自2020年10月起,Elasticsearch對不同地區進行了網路架構的調整,對建立的執行個體有以下影響:
舊網路架構下,如果需要訪問公網,可以直接使用SNAT功能或自建Nginx代理。
新網路架構下,LDAP功能受到網路限制,您可以使用PrivateLink進行VPC網路打通,具體配置請參見配置執行個體私網串連。如果您需要訪問公網,則需要配置Nginx代理進行請求轉寄。
舊網路架構下,Elasticsearch僅支援單可用性區域的LDAP認證。
關於網路架構,請參見【通知】網路架構調整。
操作流程
步驟一:擷取終端節點網域名稱(可選)
如果您建立的Elasticsearch處於新網路架構下(2020年10月及之後建立的執行個體屬於新網路架構),需要藉助PrivateLink,打通使用者VPC與阿里雲服務帳號VPC,擷取終端網域名稱,為後續配置做準備。具體操作如下:
- 建立與Elasticsearch執行個體處於同一VPC下,且支援PrivateLink功能的Server Load Balancer執行個體。
具體操作,請參見步驟一:建立並配置Server Load Balancer執行個體。
配置Server Load Balancer執行個體。
配置時,需要指定LDAP所在的伺服器為後端伺服器,監聽連接埠為389。
具體操作,請參見配置執行個體私網串連。
- 建立終端節點服務。
具體操作,請參見步驟二:建立終端節點服務。
- 配置Elasticsearch私網互連。
具體操作,請參見步驟三:配置阿里雲ES私網串連。
- 擷取終端節點網域名稱。
具體操作,請參見配置執行個體私網串連。
說明 請先記錄擷取到的節點網域名稱,該網域名稱會在後續配置中使用。
步驟二:配置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: "admin@yaobili.com" xpack.security.authc.realms.ldap1.bind_password: "yourPassword" xpack.security.authc.realms.ldap1.user_search.base_dn: "dc=yaobili,dc=com" xpack.security.authc.realms.ldap1.user_search.filter: "(cn={0})" xpack.security.authc.realms.ldap1.group_search.base_dn: "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: "admin@yaobili.com" xpack.security.authc.realms.ldap.ldap1.bind_password: "yourPassword" xpack.security.authc.realms.ldap.ldap1.user_search.base_dn: "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: "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。 重要 新網路架構下需要配置為終端節點網域名稱:連接埠,終端節點網域名稱可在步驟一:擷取終端節點網域名稱(可選)中擷取。本文以 |
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。
步驟三:為域帳號資訊映射角色
登入目標Elasticsearch執行個體的Kibana控制台,根據頁面提示進入Kibana首頁。
登入Kibana控制台的具體操作,請參見登入Kibana控制台。
說明本文以Elasticsearch 6.7.0版本為例,其他版本操作可能略有差別,請以實際介面為準。
在左側導覽列,單擊開發工具。
在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對應版本。
步驟四:驗證結果
使用已授權的zhang*帳號登入Elasticsearch的Kibana控制台。
在左側導覽列,單擊開發工具。
在Console中執行如下命令,驗證zhang*使用者是否有修改叢集配置的許可權。
PUT _cluster/settings { "persistent": { "action.auto_create_index": true } }
授權成功後,預期結果如下。