Elasticsearch的LDAP統(tǒng)一認(rèn)證服務(wù)集成
ldap(Light Directory Access Portocol)是基于X.500標(biāo)準(zhǔn)的輕量級(jí)目錄訪問協(xié)議。ldap協(xié)議使用了一種樹狀的數(shù)據(jù)形式,可以很方便的定義一個(gè)組織或者公司內(nèi)的用戶結(jié)構(gòu)?;陂_放的LDAP協(xié)議的LDAP服務(wù)(如Microsoft的Active Directory)可以提供用戶身份驗(yàn)證的能力。由于LDAP的開放性,它的使用非常廣泛。而elasticsearch服務(wù),通過使用Opendistro的security插件,可以加入Active Directory作為身份驗(yàn)證后端,無縫接入到已有的LDAP服務(wù)中。本文會(huì)講解elasticsearch接入LDAP認(rèn)證的基本方式,并會(huì)講解基本原理。
一、 security插件基礎(chǔ)
Opendistro的security插件實(shí)現(xiàn)了ES的安全功能,包含用戶的認(rèn)證的鑒權(quán)。它包含了六個(gè)配置文件:
config.yml
負(fù)責(zé)配置額外后端的認(rèn)證(與內(nèi)部認(rèn)證相對(duì)應(yīng))和授權(quán),如LDAP(下文會(huì)詳述)、Kerberos、JWT等。
internal_users.yml
負(fù)責(zé)配置內(nèi)部認(rèn)證的用戶和對(duì)應(yīng)的密碼.
roles.yml
負(fù)責(zé)配置角色和其對(duì)應(yīng)的操作權(quán)限。
roles_mapping.yml
負(fù)責(zé)配置角色、用戶和后端角色的映射關(guān)系。
action_groups.yml
負(fù)責(zé)配置各種不同的操作,包括集群級(jí)和索引級(jí)操作。
tenants.yml
負(fù)責(zé)配置租戶信息。
這其中,除了config.yml這個(gè)核心的認(rèn)證授權(quán)配置,其他配置都可以通過REST API或者Kibana頁面的方式修改。想要修改config.yml,必須通過插件提供的securityadmin.sh腳本來實(shí)現(xiàn):
# 將config.yml配置文件寫入索引并生效 securityadmin.sh -h {{ip}} -p 9300 -f ./config.yml -icl -nhnv -cacert root-ca.pem -cert kirk.all.pem -key kirk.all.pem -t config
這個(gè)腳本會(huì)將相應(yīng)的配置存在ES的特殊索引中,以實(shí)現(xiàn)節(jié)點(diǎn)間的共享。
也可以通過腳本來導(dǎo)出當(dāng)前的配置情況:
# 將當(dāng)前生效的六個(gè)配置文件導(dǎo)出到temp路徑下 securityadmin.sh -r -h {{ip}} -p 9300 -cd ./temp -icl -nhnv -cacert root-ca.pem -cert kirk.all.pem -key kirk.all.pem
二、LDAP集成
首先打開華為云控制臺(tái)創(chuàng)建一個(gè)Windows Server的ECS(Windows Server自帶支持LDAP協(xié)議的Active Directory服務(wù)),并且創(chuàng)建一個(gè)云搜索服務(wù)CSS,這里選擇7.1.1版本,并開啟安全模式(安全模式自帶Opendistro security插件)。登錄ECS開啟Active Directory服務(wù),新建域,本例為test.ldap.com。新建以下管理員、用戶和用戶組:
然后,修改config.yml:
# 省略 authc: # 省略 ldap: description: "Authenticate via LDAP or Active Directory" http_enabled: true transport_enabled: true order: 5 http_authenticator: type: "basic" challenge: false authentication_backend: type: "ldap" config: enable_ssl: false enable_start_tls: false enable_ssl_client_auth: false verify_hostnames: true hosts: - "10.0.0.115:389" bind_dn: "CN=adminAD,DC=test,DC=ldap,DC=com" password: "
配置文件主要分為兩個(gè)部分authc和authz,其中authc(authentication, 認(rèn)證)主要起到驗(yàn)證用戶是否是其宣稱的人(驗(yàn)證密碼),authz(authorization,授權(quán))主要起到判斷當(dāng)前用戶是否具有相應(yīng)權(quán)限的作用。
需要修改的為以下四項(xiàng):hosts、bind_dn、password、userbase
hosts為Active Directory服務(wù)的地址,端口為389
bind_dn相當(dāng)于LDAP的用戶名(Distinguished Name),以下為X.500目錄協(xié)議(包含LDAP)的相關(guān)定義:
CN = Common Name
OU = Organizational Unit
DC = Domain Component
必須按順序一一對(duì)應(yīng),否則無法認(rèn)證。
userbase為es連接上Active Directory之后獲取用戶所屬的DN,本例中就會(huì)同步所有ITDepartment目錄下的用戶
authz中沒有了userbase,變成了rolebase,獲取的對(duì)應(yīng)DN下的組,這個(gè)組會(huì)與es中的role一一對(duì)應(yīng),如下:
一個(gè)用戶通過認(rèn)證后通過AD查詢到所屬的group,再一一對(duì)應(yīng)es中的role,role則又對(duì)應(yīng)了action groups(如create、search等)
使用特性或者腳本將修改后的config.yml生效后,進(jìn)入kibana修改roles和role_mapping:
接下來進(jìn)行驗(yàn)證,
使用userGoogleInAD用戶創(chuàng)建google索引,創(chuàng)建失?。?/p>
使用admin用戶創(chuàng)建,創(chuàng)建成功:
使用userGoogleInAD用戶對(duì)google索引進(jìn)行查詢,查詢成功:
使用userTwitterInAD對(duì)google索引進(jìn)行查找,查找失敗:
注意到,如果用戶名密碼錯(cuò)誤(不滿足認(rèn)證)的話,返回與不滿足授權(quán)不同:
Elasticsearch 云搜索服務(wù) CSS
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。