ACK对接外部LDAP验证源

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

背景信息

本文涉及到的产品如下:

对接原理

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。

    1. 执行以下命令复制库代码。

      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), 完成.
    2. 检查目录结构如下,并创建新的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
      ################################################
    3. 执行以下命令创建命名空间。

      01_ldap git:(master) kubectl create ns public-service

      预期输出:

      namespace/public-service created
    4. 执行以下命令部署应用。

      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.example.com   121.xx.xxx.xxx   80      45s
      2. 拷贝上述获取的ingress域名至浏览器中,然后用默认的DN和密码登录php-LDAP-admin控制台页面。

        说明
        • 默认的DN:cn=admin,dc=example,dc=org。

        • 默认的密码:admin。

        • 如果出现/var/lib/php/sessions无权限访问的情况,需要通过chmod修改路径权限。

    2. 创建组织和账号。

      1. 在php-LDAP-admin控制台左侧导航栏,单击Create new entry here,在Create Object页面,单击Generic: Organisational Unit,然后单击Create Objectunit

      2. 输入组织名称,然后单击Create Object。本文组织示例名称为dev

      3. 在php-LDAP-admin控制台左侧导航栏,单击上步中创建的ou=dev,单击Create a child entry,然后单击Courier Mail:Account,配置创建用户信息,然后单击Create ObjectAccount

        重要

        php-LDAP-admin的账号默认生成的名字中间会有空格,请注意删除空格。

步骤二:配置IDaaS

  1. 登录应用身份管理控制台,单击免费创建实例

  2. 创建实例面板中,输入实例描述,并勾选相应协议,然后单击创建

  3. 在实例列表中,选择已创建的目标实例进入云身份服务快速入门页面,然后单击绑定 OpenLDAP

  4. 绑定 OpenLDAP连接 LDAP页面,设置LDAP的配置信息,然后单击下一步

    关于绑定OpenLDAP的更多信息,请参见绑定OpenLDAP

    类别

    配置项

    说明

    基础信息

    显示名称

    自定义名称。

    服务器配置

    服务器地址

    此处为服务idap-service的External IP。获取方法如下。

    1. 登录容器服务管理控制台,在左侧导航栏选择集群

    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择网络 > 服务

    3. 找到名为idap-service的服务,并记录其External IP。

    LDAP域配置

    管理员账号

    默认的管理员DN为:cn=admin,dc=example,dc=org。

    管理员密码

    密码为:admin。

  5. 选择场景页面,设置场景信息,然后单击完成创建。关于场景设置更多信息,请参见绑定OpenLDAP

  6. 字段映射页面,配置字段映射,本例只需配置用户名邮箱两个字段,然后单击保存并同步

    说明
    • 字段映射时,如果映射规则为选择字段,则需要根据使用需求灵活选择IDaaS的字段,例如,本例中账户名对应OpenLDAP中的CN,也可根据需求选择其他字段进行映射。

    • 可以选择一个字段设为标识。以某一字段作为映射的唯一标识时,如果两侧字段的值相同,且账户无绑定关系,则绑定账户并修改数据;如果值不相同,则创建并绑定账户。

  7. 以上信息保存同步后,在左侧导航栏选择账户 > 账户与组织,可看到OpenLDAP的组织和用户信息都已成功同步。

  8. 在左侧导航栏选择登录,在通用配置页签下设置登录方式,本例设置PC和移动端的登录方式均为ack-ldap。

步骤三:查看效果

在左侧导航栏选择身份提供方 > 委托认证,查看并复制委托链接,将其拷贝至浏览器,出现阿里云IDaaS的登录页面并成功登录,说明IDaaS配置成功。

相关操作

关于配置IDaaS账户单点登录的操作,请参见创建应用首次单点登录