随着企业客户上云进程的推进,有些客户有自己的账户体系,而上云后这些体系如何平滑迁移到云上?如何避免大量账号的注册和多份用户名密码的管理?为解决这些问题,本文介绍如何在阿里云上完成对自建LDAP( 轻量目录访问协议)的对接过程。

背景信息

本文涉及到的产品如下:

对接原理

阿里云上完成对自建LDAP的对接的原理如下:

  1. IDaaS添加LDAP对接配置,同步LDAP账号进入IDaaS,密码不同步。此时使用LDAP用户名登录需要在IDaaS中重新设置密码(如果您不想使用多套密码,可以使用以下SSO方式)。
  2. IDaaS中添加应用:
    • 应用需要通过访问密钥(AccessKey)对接RAM中有AliyunRAMFullAccess权限的子账号,用于应用对RAM权限的操控。
    • 应用与RAM中另外的一个Role或RAM子账号对接,用于赋权给LDAP中用于登录的账号。
    • 应用需要导入IDaaS中已经导入阿里云系统的LDAP账号,允许这些账号使用本应用,权限为应用中对接的Role或RAM子账号权限。
  3. 配置IDaaS单点登录对接的LDAP服务。
  4. LDAP用户通过SSO登录阿里云平台,获取IDaaS中某应用里对接的Role或RAM子账号权限。
  5. 主账号在容器平台进行PaaS层赋权。

步骤一:环境准备

模拟LDAP环境操作步骤如下。

  1. 执行以下命令搭建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), 完成.
    tmp 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: extensions/v1beta1
    kind: Ingress
    metadata:
      name: ldap-ui
      namespace: public-service
    spec:
      rules:
      - host: phpldap.c26a7ab225d1544088735677ed906xxxx.cn-beijing.alicontainer.com #需要按照您的集群信息修改域名。
        http:
          paths:
          - backend:
              serviceName: phpldapadmin
              servicePort: 8080
    ##需要使用vim命令修改上述host的内容为自己集群的域名。
    ################################################
    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
  2. 初始化账号。
    1. 登录php-LDAP-admin。
      1. 执行以下命令获取ingress域名和地址。
        01_ldap_with_ui git:(master) ✗ kubectl get ing
        NAME      HOSTS                                                                   ADDRESS          PORTS   AGE
        ldap-ui   phpldap.c26a7ab225d1544088735677ed906xxxx.cn-beijing.alicontainer.com   121.xx.xxx.xxx   80      45s
      2. 拷贝上述获取的ingress域名至浏览器中,然后用默认的DN和密码登录php-LDAP-admin控制台页面。
        说明
        • 默认的DN:cn=admin,dc=example,dc=org
        • 默认的密码:admin
    2. 创建组织和账号。
      1. 在php-LDAP-admin控制台左侧导航栏,单击Create new entry here,在Create Object页面,单击Generic: Organisational Unit,然后单击Create Objectunit
      2. 输入组织名称,然后单击Create Oject。本文组织示例名称为dev
      3. 在php-LDAP-admin控制台左侧导航栏,单击上步中创建的ou=dev,单击Create a child entry,然后单击Courier Mail:Account,配置创建用户信息,然后单击Create ObjectAccount
        注意 php-LDAP-admin的账号默认生成的名字中间会有空格,请注意删除空格。

步骤二:配置IDaaS

配置IDaaS,导入组织和账号数据的步骤如下。

  1. 登录应用身份管理控制台
  2. 在实例列表中,单击目标实例名称。
  3. 在左侧导航栏中,选择账号 > 机构及组
  4. 查看详情区域,单击配置LDAP
  5. LDAP配置面板中,单击新建配置
  6. 填写LDAP配置的相关信息。有关配置项的详细信息,请参见LDAP账户同步配置
    LDAP部分配置信息说明如下表。
    • 服务器链接
      参数 描述
      AD/LDAP名称 自定义名称。
      服务器地址 LDAP服务对外的服务地址(非web页面地址)。
      端口号 LDAP服务对外的服务端口号,设置为389
      Base DN 设置LDAP的同步目录。
      管理员DN 有LDAP管理权限的管理员账号。
      密码 LDAP管理员密码。
      类型 设置为Windows ADOpenLDAP
      LDAP同步至本系统 需设置为启用
      本系统同步至LDAP 可设置为禁用启用
    • 字段匹配规则
      参数 描述
      用户名 LDAP中的用户名定义,一般为CN。
      外部ID
      • 如果是Windows AD,设置为objectGUID
      • 如果是OpenLdap,设置为uid
      密码字段
      • 如果是Windows AD,设置为unicodePwd
      • 如果是OpenLdap,设置为userPassword
      用户唯一标识
      • 如果是Windows AD,设置为DistinguishedName
      • 如果是OpenLdap,设置为EntryDN
      邮箱 填写字段名,如mail
      手机号 填写字段名,如telephoneNumber
      昵称 在IDaaS中账户的显示名称。
      默认密码 定时从AD或者LDAP同步账户到IDaaS系统时的默认密码。
    说明

    LDAP配置说明如下:

    • LDAP配置中账号区域的管理员DN密码为:
      • 管理员DN:cn=admin,dc=example,dc=org
      • 密码:admin
    • 服务器链接和字段匹配规则配置完后,需分别单击测试连接,然后单击保存
    • 如果您只想同步部分的账号到阿里云,可以在Base DN处填写需要同步的根目录即可;如果是多个非同一个根目录的部门需要同步,重复进行LDAP配置可以设置多个数据源。
  7. 导入组织与账号。具体操作步骤请参见从AD导入账户及组织机构

步骤三:配置IDaaS单点登录

  1. 创建应用。
    1. 在实例详情页左侧导航栏,选择应用 > 添加应用
    2. 添加应用页面的应用ID列下,选择plugin_aliyun_role ,然后单击其右侧的添加应用
    3. 在弹出的面板中,单击添加SigningKey,填写相关信息,然后单击提交
    4. 单击目标应用右侧的选择进行LDAP配置。
      说明 此处的AK信息填写为创建有AliyunRAMFullAccess权限的RAM子账户信息。
    5. 单击提交
  2. 按照组织授权应用。
    1. 在实例详情页左侧导航栏,选择授权 > 应用授权
    2. 按应用授权组织机构/组页签,单击目标应用和目标组织机构。
    3. 在实例详情页左侧导航栏,选择应用 > 应用列表,然后单击应用右侧的详情,在应用信息区域,单击查看详情
    4. 应用详情面板中,单击导出IDaaS SAML元配置文件
    5. RAM控制台左侧导航栏,单击SSO管理,然后在角色SSO页签,单击新建身份提供商
    6. 新建身份提供商面板,填写提供商名称,单击上传文件上传元配置文件,然后单击确定SSO
    7. 创建RAM角色为身份提供商并赋权。具体步骤请参见创建可信实体为身份提供商的RAM角色
    8. 应用身份管理控制台左侧导航栏,选择应用 > 应用列表,在目标应用右侧,单击详情,然后在账户信息 - 子账户区域,单击查看应用子账户
    9. 子账户页面,单击添加账号关联
    10. 添加账号关联面板,填写主账户和子账户信息,然后单击保存
      说明

      主账号为机构及组页面的账户页签中导入的LDAP用户的名称。

      子账号登录后的权限,可通过绑定role或者账号获得,可通过文件批量设置子账号对应角色授权ACK的fullAccess权限。

步骤四:为单点登录配置认证源IDaaS

  1. 应用身份管理控制台左侧导航栏,选择认证 > 认证源
  2. 认证源页面右上角,单击添加认证源
  3. 选择LDAP认证源并单击右侧的添加认证源
  4. 填写配置信息,然后单击提交
    注意 选中 是否显示,否则认证源不会在登录框部分显示。有关更多配置信息,请参见 LDAP认证登录

步骤五:查看效果

通过单点登录页面的链接查看效果。

  1. 应用身份管理控制台左侧导航栏,选择目标实例。
  2. 将目标实例右侧的用户登录页地址拷贝至浏览器,然后单击LDAP认证源。
    有关LDAP认证登录的更多信息,请参见 LDAP认证登录