隨著企業客戶上云進程的推進,有些客戶有自己的賬戶體系,而上云后這些體系如何平滑遷移到云上?如何避免大量賬號的注冊和多份用戶名密碼的管理?為解決這些問題,本文介紹如何在阿里云上完成對自建LDAP( 輕量目錄訪問協議)的對接過程。
背景信息
本文涉及到的產品如下:
應用身份服務:用于對接您自己的賬戶系統和阿里云的賬戶系統的產品。
LDAP輕型目錄訪問協議:用來保存賬戶信息,實現單點登錄。OpenLDAP是LDAP的開源實現。
對接原理
阿里云上完成對自建LDAP的對接的原理如下:
IDaaS添加LDAP對接配置,同步LDAP賬號進入IDaaS,密碼不同步。此時使用LDAP用戶名登錄需要在IDaaS中重新設置密碼(如果您不想使用多套密碼,可以使用以下SSO方式)。
IDaaS中添加應用:
應用需要通過訪問密鑰(AccessKey)對接RAM中有AliyunRAMFullAccess權限的子賬號,用于應用對RAM權限的操控。
應用與RAM中另外的一個Role或RAM賬號對接,用于賦權給LDAP中用于登錄的賬號。
應用需要導入IDaaS中已經導入阿里云系統的LDAP賬號,允許這些賬號使用本應用,權限為應用中對接的Role或RAM賬號權限。
配置IDaaS單點登錄對接的LDAP服務。
LDAP用戶通過SSO登錄阿里云平臺,獲取IDaaS中某應用里對接的Role或RAM賬號權限。
阿里云賬號在容器平臺進行PaaS層賦權。
步驟一:環境準備
模擬LDAP環境操作步驟如下。
執行以下命令搭建OpenLDAP。
搭建OpenLDAP來模擬LDAP數據源和LDAP的管理工具php-LDAP-admin。
執行以下命令復制庫代碼。
git clone https://github.com/lilongthinker/demo-base-code.git
預期輸出:
正克隆到 'demo-base-code'... remote: Enumerating objects: 12, done. remote: Counting objects: 100% (12/12), done. remote: Compressing objects: 100% (10/10), done. remote: Total 12 (delta 0), reused 9 (delta 0), pack-reused 0 展開對象中: 100% (12/12), 完成.
檢查目錄結構如下,并創建新的YAML文件如下。
cd demo-base-code/01_ldap 01_ldap git:(master) tree ./
./ ├── ingress-phpadmin.yaml ├── ldap-deploy.yaml ├── ldap-secret.yaml ├── ldap-service.yaml ├── phpldapadmin-deploy.yaml └── phpldapadmin-svc.yaml 0 directories, 6 files ################################################ apiVersion: networking.k8s.io/v1 kind: Ingress metadata: labels: ingress-controller: nginx name: ldap-ui namespace: public-service spec: ingressClassName: nginx rules: - host: phpldap.example.com # 需替換為您實際的域名。 http: paths: - backend: service: name: phpldapadmin port: number: 8080 path: / pathType: ImplementationSpecific ################################################
執行以下命令創建命名空間。
01_ldap git:(master) kubectl create ns public-service
預期輸出:
namespace/public-service created
執行以下命令部署應用。
01_ldap git:(master) kubectl apply -f ./
預期輸出:
ingress.extensions/ldap-ui created deployment.extensions/ldap created secret/ldap-secret created service/ldap-service created deployment.extensions/phpldapadmin created service/phpldapadmin created
初始化賬號。
登錄php-LDAP-admin。
執行以下命令獲取ingress域名和地址。
01_ldap_with_ui git:(master) ? kubectl get ing
NAME HOSTS ADDRESS PORTS AGE ldap-ui phpldap.example.com 121.xx.xxx.xxx 80 45s
拷貝上述獲取的ingress域名至瀏覽器中,然后用默認的DN和密碼登錄php-LDAP-admin控制臺頁面。
說明默認的DN:cn=admin,dc=example,dc=org。
默認的密碼:admin。
如果出現/var/lib/php/sessions無權限訪問的情況,需要通過chmod修改路徑權限。
創建組織和賬號。
在php-LDAP-admin控制臺左側導航欄,單擊Create new entry here,在Create Object頁面,單擊Generic: Organisational Unit,然后單擊Create Object。
輸入組織名稱,然后單擊Create Object。本文組織示例名稱為dev。
在php-LDAP-admin控制臺左側導航欄,單擊上步中創建的ou=dev,單擊Create a child entry,然后單擊Courier Mail:Account,配置創建用戶信息,然后單擊Create Object。
重要php-LDAP-admin的賬號默認生成的名字中間會有空格,請注意刪除空格。
步驟二:配置IDaaS
登錄應用身份管理控制臺,單擊免費創建實例。
在創建實例面板中,輸入實例描述,并勾選相應協議,然后單擊創建。
在實例列表中,選擇已創建的目標實例進入云身份服務快速入門頁面,然后單擊綁定 OpenLDAP。
在綁定 OpenLDAP的連接 LDAP頁面,設置LDAP的配置信息,然后單擊下一步。
關于綁定OpenLDAP的更多信息,請參見綁定OpenLDAP。
類別
配置項
說明
基礎信息
顯示名稱
自定義名稱。
服務器配置
服務器地址
此處為服務idap-service的External IP。獲取方法如下。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
找到名為idap-service的服務,并記錄其External IP。
LDAP域配置
管理員賬號
默認的管理員DN為:cn=admin,dc=example,dc=org。
管理員密碼
密碼為:admin。
在選擇場景頁面,設置場景信息,然后單擊完成創建。關于場景設置更多信息,請參見綁定OpenLDAP。
在字段映射頁面,配置字段映射,本例只需配置用戶名和郵箱兩個字段,然后單擊保存并同步。
說明字段映射時,如果映射規則為選擇字段,則需要根據使用需求靈活選擇IDaaS的字段,例如,本例中賬戶名對應OpenLDAP中的CN,也可根據需求選擇其他字段進行映射。
可以選擇一個字段設為標識。以某一字段作為映射的唯一標識時,如果兩側字段的值相同,且賬戶無綁定關系,則綁定賬戶并修改數據;如果值不相同,則創建并綁定賬戶。
以上信息保存同步后,在左側導航欄選擇賬戶 > 賬戶與組織,可看到OpenLDAP的組織和用戶信息都已成功同步。
在左側導航欄選擇登錄,在通用配置頁簽下設置登錄方式,本例設置PC和移動端的登錄方式均為ack-ldap。
步驟三:查看效果
在左側導航欄選擇身份提供方 > 委托認證,查看并復制委托鏈接,將其拷貝至瀏覽器,出現阿里云IDaaS的登錄頁面并成功登錄,說明IDaaS配置成功。