随着企业客户上云进程的推进,有些客户有自己的账户体系,而上云后这些体系如何平滑迁移到云上?如何避免大量账号的注册和多份用户名密码的管理?为解决这些问题,本文介绍如何在阿里云上完成对自建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配置成功。