云原生AI套件通过对接外部LDAP(Lightweight Directory Access Protocol),借助企业内部账号体系登录云原生AI运维控制台,无需通过RAM账号密码登录。本文介绍云如何通过对接外部LDAP登录云原生AI控制台。

前提条件

基础概念

  • LDAP(Lightweight Directory Access Protocol):账号管理及访问协议,有以下两种主流的实现方式:
    • AD(Active Directory):Microsoft出品,支持LDAP 2.0和3.0。
    • Open LDAP:Open source LDAP,支持LDAP 2.0和LDAP 3.0。

    更多信息,请参见LDAP

  • IDaaS(Alibaba Cloud Identity as a Service):应用身份服务IDaaS是阿里云为企业用户提供的一套集中式身份、权限、应用管理服务,帮助您整合部署在本地或云端的内部办公系统、业务系统及三方SaaS系统的所有身份,实现一个账号打通所有应用服务。提供接入第三方认证源(IdP)以及数据的交换同步。
  • RAM(Resource Access Management):阿里云资源访问控制,提供用户、角色、权限管理以及SSO能力。
  • SSO(Single-Sign On):单点登录,也称为身份联合登录。在多个应用系统中,您只需要登录一次,就可以访问所有相互信任的应用系统。
  • OAuth2.0(Authoration Protocol):授权访问用户资源的协议。更多信息,请参见OAuth2.0
  • OIDC(OpenID Connect):基于OAuth的ID交换协议。
  • SAML(Security assertion markup language):实现企业级用户身份认证的标准协议,它是SP和IdP之间实现沟通技术的实现方式之一。SAML 2.0已经是目前实现企业级SSO的一种事实标准。
    • SP(Service Provider): 即业务提供方,SP会使用IdP提供的用户信息。一些非SAML协议的身份系统(例如:OpenID Connect),也把服务提供商称作IdP的信赖方。
    • IdP(Identity Provider):登录时的身份提供方,认证源。

    SAML同时支持由IdP发起和SP发起的登录, 即在登录IdP后,可以跳转到任意一个应用。也可以从一个应用发起登录,跳转到IdP,登录认证后,再跳转回这个应用,继续SSO。

  • SCIM(System for Cross-domain Identity Management):主要用于多用户的云应用身份管理。阿里云通过SCIM标准协议,结合OAuth应用的安全授权,可以将企业内部系统中的账号数据同步到阿里云访问控制(RAM)中。更多信息,请参见SCIM

实现原理

云原生AI运维控制台对接的是阿里云访问控制(RAM)的用户单点登录(SSO),非角色SSO。而用户SSO需要同步LDAP用户信息(不包含密码)到RAM作为RAM子账号(RAM用户),同步之后配置RAM第三方SSO认证源,即可在登录RAM的时候,跳转至第三方IdP做登录认证。

共涉及三种角色:

  • 云原生AI套件安装者:拥有集群操作权限,安装者默认是第一个管理员且不可删除。
  • 云原生AI套件管理员(Admin):拥有AI运维控制台登录、操作权限。
  • 云原生AI套件研发人员(Researcher):拥有AI开发控制台登录、操作权限。

实现原理的整体流程如下:

  1. 云原生AI安装者同步LDAP用户信息到RAM,具体操作,请参见步骤一: 同步LDAP账号到RAM
  2. 安装云原生AI套件。具体操作,请参见安装云原生AI套件
  3. 云原生AI管理员创建管理员或者研发人员,具体操作,请参见步骤二:在AI运维控制台新建管理员
  4. 管理员登录AI运维控制台,具体操作,请参见步骤三:LDAP用户登录AI运维控制台
    说明 研发人员登录AI开发控制台与管理员登录AI运维控制台流程相同。

下图为实现管理员登录云原生AI运维控制台的具体交互流程:

22

步骤一: 同步LDAP账号到RAM

说明 同步LDAP账号到RAM的方法有手动同步和自动自动同步两种,您可以根据实际情况选择相应的同步方式:
  • 如果企业账号较少,您可以通过手动同步,为每个用户创建RAM子账号。
  • 如果企业账号较多,您可以借助IDaaS自动全量或增量同步。

方法一:手动同步LDAP账号到RAM

  1. 登录 RAM 控制台
  2. 在RAM控制台左侧导航栏中,选择人员管理 > 用户
  3. 用户页面,单击创建用户
  4. 创建用户页面,输入登录名称显示名称,单击确定
    说明 登录名称与LDAP中的用户名需保持一致。

方法二:通过IDaaS同步LDAP账号到RAM

  1. 创建具有AliyunRAMFullAccess权限的RAM账号(即RAM用户)。具体操作,请参见RAM账号准备
    说明
    • 如果您已经有AliyunRAMFullAccess权限的RAM账号,该步骤可跳过。
    • 将生成的AccessKey ID和AccessKey Secret安全保存到本地。
  2. IDaaS添加阿里云控制台。具体操作, 请参见IDaaS添加阿里云控制台
    111
    • 上图红框中的参数配置需要用到步骤一中的AccessKey ID和AccessKey Secret。
    • 如果在配置完成后,您需要修改阿里云控制台应用的信息,在应用列表页面,关闭应用状态开关,然后单击修改应用即可。22
  3. 同步LDAP账号到IDaaS。
    1. 新建LDAP对接配置。
      1. 登录云盾IDaaS管理平台
      2. 在应用身份管理控制台的左侧导航栏中,单击EIAM实例列表
      3. 实例列表中,单击目标IDaaS实例右侧操作列下的管理
      4. 在IDaaS实例详情的左侧导航中,选择账户 > 机构及组
      5. 查看详情的右侧区域,单击配置LDAP12
      6. LDAP配置面板,单击新建配置,配置相关参数。具体操作和相关参数说明,请参见新建LDAP配置步骤二:配置IDaaS
      7. 参数配置完成后,在LDAP配置面板您可以看到刚新建的LDAP。13
    2. 从AD导入账户及组织机构。具体操作,请参见从AD导入账户及组织机构
      结果验证
      机构及组页面,单击下图dev,您可以在右侧查看详情区域的账户页签,查看到从LDAP同步到IDaaS的账号。
      说明 从LDAP同步用户到IDaaS时,如果有用户已同步,您可以一键移除处理。
      3
  4. 从IDaaS同步账号到RAM。
    说明 通过上述3个操作步骤,LDAP中的用户信息已经同步到IDaaS的阿里云RAM-用户SSO应用中,您还需要通过SCIM协议把IDaaS应用中的用户,同步到RAM即可。
    1. 配置SCIM同步。
      11
      相关参数配置获取方法:
      • SCIM同步地址=IDaaS实例域名+用户获取API。例如,IDaaS实例域名为pvfjoa****.login.aliyunidaas.com,用户获取API为/api/application/plugin_aliyun/scim/account/fdeba622128415bb6da37e0915341d46AEklnKK****,则SCIM同步地址为pvfjoa****.login.aliyunidaas.com/api/application/plugin_aliyun/scim/account/fdeba622128415bb6da37e0915341d46AEklnKK****
        • 登录云盾IDaaS管理平台,获取当前IDaaS实例域名。55
        • 用户获取API的获取方法如下:
          1. 在IDaaS实例详情的左侧导航中,选择应用 > 应用列表
          2. 单击应用名称为阿里云RAM-用户SSO右侧操作列下的详情
          3. 应用信息区域,单击查看详情。在应用详情(阿里云RAM-用户SSO)面板中,账户同步地址即为用户获取API。
      • 用户账户同步接口认证的client_idclient_secret
        API区域,打开API开关,分别单击API KeyAPI Secret,将API Key和API Secret安全保存到本地。66
    2. 对新应用授权。
      1. 在IDaaS实例详情的左侧导航栏中,选择授权 > 应用授权
      2. 应用授权页面,单击组织机构页签,选中目标应用和目标组织机构,单击保存14
      3. 系统提示对话框功能,单击确定
    3. 同步IDaaS用户信息到RAM。
      1. 在IDaaS实例详情的左侧导航中,选择账户 > 机构及组
      2. 机构及组页面,单击dev,您可以在右侧查看详情区域的账户页签。
      3. 单击步骤3中从LDAP同步到IDaaS的用户右侧操作列下的账户同步
      4. 账户同步面板,单击同步
        说明 您也可以配置自动同步,这样每次从LDAP导入用户到IDaaS时,IDaaS会自动同步用户到RAM。
    结果验证
    1. 登录 RAM 控制台
    2. 在RAM控制台左侧导航栏中,选择人员管理 > 用户
    3. 用户页面,如果能查看到步骤3中从LDAP同步到IDaaS的用户信息,则说明您已成功从IDaaS同步用户信息到RAM。反之,则说明失败。

步骤二:在AI运维控制台新建管理员

同步LDAP用户信息到RAM后,您可以在AI运维控制台看到对应的用户信息。

  1. 登录AI运维控制台。具体操作,请参见访问AI运维控制台
  2. 在AI运维控制台的左侧导航栏,选择用户 > 用户列表。在创建用户页面下拉选择需要作为管理员的用户,并授权为管理员用户。
  3. 用户列表页面,单击添加
  4. 新建用户对话框中:
    • 用户下拉列表中,选择目标用户作为管理员用户
    • 用户类型下拉列表中,选择admin
  5. 单击保存
    说明 添加完成后,该用户即可作为管理员身份操作AI运维控制台。具体操作,请参见管理用户

步骤三:LDAP用户登录AI运维控制台

说明 同步LDAP用户信息到RAM,并在AI运维控制台创建完用户后,您只需要通过配置RAM的用户SSO认证源,就能达到通过LDAP登录到AI运维控制台的目的:
  • 通过IDaaS接入第三方LDAP认证源。
  • 通过RAM对接支持SAML协议的IdP登录。
  • 通过RAM对接OpenLDAP登录。

方法一:LDAP用户通过IDaaS接入第三方LDAP认证源登录AI运维控制台

  1. 用IDaaS SSO接管RAM SSO。具体操作,请参见阿里云控制台中配置SSO单点登录从IDaaS单点登录到阿里云控制台的步骤1~4
    说明 SAML元数据配置metadata.xml文件需从应用详情(阿里云RAM-用户SSO)面板中的IDaaS IdentityId参数位置下载。
  2. 通过IDaaS接入第三方LDAP认证源,具体操作,请参见LDAP认证登录的步骤1~3
    注意认证源页面,请确保LDAP的状态是打开

    认证源详情(LDAP)面板中的相关参数说明如下:

    • LDAP URL:需要用到LDAP配置面板中的服务器地址端口号,具体格式为:ldap://<服务器地址>:<端口号>/
    • LDAP Base:即为LDAP配置面板中的Base DN参数值。
    • LDAP账户:即为LDAP配置面板中的管理员DN参数值。
    • 过滤条件cn=$username$
    • LDAP加密方式:MD5。
    • 显示:选中。
    结果验证
    1. 获取且访问AI运维控制台链接。相关操作,请参见访问AI运维控制台
    2. 输入RAM用户登录名,单击下一步
    3. 单击下图中LDAP认证源图标。8
    4. 输入LDAP账户名、密码和验证码,单击提交
      说明 如果不能成功登录,请参见常见问题排查处理。

方法二:LDAP用户通过RAM对接支持SAML协议的IdP登录AI运维控制台

阿里云与企业进行用户SSO时,阿里云是服务提供商(SP),而企业自有的身份管理系统则是身份提供商(IdP)。通过用户SSO,企业员工在登录后,将以RAM用户访问阿里云。

当管理员在完成用户SSO的相关配置后,企业员工Alice可以通过如下图所示的方法登录到阿里云。更多信息,请参见基本流程

28
  1. 通过配置相应元数据来建立阿里云对企业IdP的信任,实现企业IdP通过用户SSO登录阿里云。具体操作,请参见进行用户SSO时阿里云SP的SAML配置
  2. 在企业身份提供商中配置阿里云为可信SAML服务提供商。具体操作,请参见进行用户SSO时企业IdP的SAML配置
说明

常见问题

  • 问题现象

    当配置Keycloak对接OpenLDAP,并同步用户至Keycloak时,出现以下报错:

    keycloak sync faild Failed during import user from LDAP: org.keycloak.models.ModelException: User returned from LDAP has null username! Check configuration of your LDAP mappings. 

    解决方法

    检查Keycloak的报错日志,且排查Users DN字段是否缺失或有空格。

  • 问题现象

    当认证完成后,不能正常跳转,出现以下报错:

    unknown sp_code

    解决方法

    重新登录AI运维控制台。

  • 问题现象

    当LDAP用户通过RAM对接OpenLDAP登录AI运维控制台时,出现以下报错:

    该用户不存在 {&quot;UserPrincipalName&quot;:&quot;newldapuser@198370611786****.onaliyun.com&quot;}

    解决方法

    确认以下几点:

    • 用户是否在RAM中存在。
    • Keycloak中Name ID Format是否为email
    • SSO登录设置需要开启辅助域名,且辅助域名与keycloak中需保持一致。