本文介紹如何基于阿里云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認證。
關于網絡架構,請參見【通知】網絡架構調整。
操作流程
步驟一:獲取終端節點域名(可選)
如果您創建的阿里云Elasticsearch處于新網絡架構下(2020年10月及之后創建的實例屬于新網絡架構),需要借助PrivateLink,打通用戶VPC與阿里云服務賬號VPC,獲取終端域名,為后續配置做準備。具體操作如下:
- 創建與阿里云Elasticsearch實例處于同一VPC下,且支持PrivateLink功能的負載均衡實例。
具體操作,請參見步驟一:創建并配置負載均衡實例。
配置負載均衡實例。
配置時,需要指定LDAP所在的服務器為后端服務器,監聽端口為389。
具體操作,請參見配置實例私網連接。
- 創建終端節點服務。
具體操作,請參見步驟二:創建終端節點服務。
- 配置阿里云Elasticsearch私網互通。
具體操作,請參見步驟三:配置阿里云Elasticsearch私網互通。
- 獲取終端節點域名。
具體操作,請參見配置實例私網連接。
說明 請先記錄獲取到的節點域名,該域名會在后續配置中使用。
步驟二:配置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。 重要 新網絡架構下需要配置為終端節點域名:端口,終端節點域名可在步驟一:獲取終端節點域名(可選)中獲取。本文以 |
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版本為例,其他版本操作可能略有差別,請以實際界面為準。
- 在左側導航欄,單擊Dev Tools。
在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控制臺。
- 在左側導航欄,單擊Dev Tools。
在Console中執行如下命令,驗證zhang*用戶是否有修改集群配置的權限。
PUT _cluster/settings { "persistent": { "action.auto_create_index": true } }
授權成功后,預期結果如下。