本文提供一个以AD FS与阿里云进行SSO的示例,帮助用户理解企业IdP与阿里云进行SSO的端到端配置流程。本文以在Windows Server 2012 R2 ECS实例上搭建的AD FS为例进行介绍。

背景信息

企业使用Active Directory (AD)进行员工管理,并通过AD FS配置包括阿里云在内的企业应用。AD管理员通过员工的用户组来管理员工对阿里云账号的访问权限。在本示例中,企业拥有两个阿里云账号(Account1和Account2),要管理的权限为Admin和Reader,企业员工用户名为Alice,该用户所在的AD用户组为Aliyun-<account-id>-ADFS-Admin和Aliyun-<account-id>-ADFS-Reader,企业要实现从AD FS到Account1和Account2的角色SSO。

说明
  • <account-id>为云账号Account1或Account2的账号ID,因此用户Alice所在的AD用户组共4个,分别对应两个云账号中的Admin和Reader权限。
  • 本文中涉及到Microsoft Active Directory配置的部分属于建议,仅用于帮助理解阿里云SSO登录的端到端配置流程,阿里云不提供Microsoft Active Directory配置的咨询服务。

基本流程

员工进行控制台登录的基本流程如下图所示。

基本流程

AD管理员在完成角色联合登录的配置后,企业员工(Alice)可以通过如图所示的方法登录到阿里云控制台。更多信息,请参见SAML角色SSO概览

上述过程表示,用户登录时,企业会进行统一登录认证,无需用户提供在阿里云上的任何用户名和密码。

步骤一:在阿里云中将AD FS配置为可信SAML IdP

  1. 在阿里云RAM控制台,创建身份提供商(ADFS),并配置相应的元数据。AD FS的元数据URL为https://<ADFS-server>/federationmetadata/2007-06/federationmetadata.xml
    说明 <ADFS-server>是您的AD FS服务器域名或IP地址。

    具体操作,请参见进行角色SSO时阿里云SP的SAML配置

    说明 如果元数据文件超过大小限制,您可以尝试删除<fed:ClaimTypesRequested><fed:ClaimTypesOffered>中的所有内容。
  2. 在阿里云账号Account1中创建两个可信实体类型为身份提供商的RAM角色(ADFS-Admin和ADFS-Reader),选择刚刚创建的ADFS作为可信身份提供商,并对两个角色分别授予AdministratorAccessReadOnlyAccess权限。
  3. 使用同样的方法,在Account2中创建与Account1中同名的身份提供商(ADFS)和角色(ADFS-Admin和ADFS-Reader),并为两个角色分别授予AdministratorAccessReadOnlyAccess权限。
说明 配置完成后,企业的阿里云账号将信任企业AD FS发来的SAML请求中的用户身份和角色信息。

步骤二:在AD FS中将阿里云配置为可信SAML SP

在AD FS中,SAML SP被称作信赖方(Relying Party)。设置阿里云作为AD FS的可信SP的操作步骤如下。

  1. 服务器管理器工具菜单中选择AD FS管理
  2. AD FS管理工具中添加信赖方信任
    添加信赖方信任向导
  3. 为新创建的信赖方设置阿里云的角色SSO的SAML SP元数据,元数据URL为https://signin.alibabacloud.com/saml-role/sp-metadata.xml
    选择数据源
  4. 按照向导完成配置。

步骤三:为阿里云SP配置SAML断言属性

阿里云需要AD FS在SAML断言中提供NameIDRoleRoleSessionName属性。AD FS中通过颁发转换规则来实现这一功能。

  • NameID

    配置Active Directory中的Windows账户名为SAML断言中的NameID,其操作步骤如下。

    1. 为信赖方编辑声明规则
    2. 添加颁发转换规则
      说明 颁发转换规则(Issuance Transform Rules):指如何将一个已知的用户属性,经过转换后,颁发为SAML断言中的属性。由于我们要将用户在AD中的Windows账户名颁发为NameID,因此需要添加一个新的规则。
    3. 声明规则模版选择转换传入声明转换传入声明
    4. 使用如下配置规则,并单击完成
      • 声明规则名称:NameID
      • 传入声明类型:Windows账户名
      • 传出声明类型:名称ID
      • 传出名称ID格式:永久标识符
      • 传递所有声明值:勾选
      配置规则

      配置完成后,AD FS将发送阿里云需要的NameID格式。

      <NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">
          YourDomain\rolessouser
      </NameID>
  • RoleSessionName

    配置Active Directory中的UPN为SAML断言中的RoleSessionName,其操作步骤如下。

    1. 单击添加转换声明规则
    2. 声明规则模板中选择以声明方式发送LDAP特性选择规则模板
    3. 使用如下配置规则,并单击完成
      • 声明规则名称:RoleSessionName
      • 特性存储:Active Directory
      • LDAP 特性列:User-Principal-Name(您也可以根据具体需求选择其他属性,例如email。)
      • 传出声明类型https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName
      配置规则

    配置完成后,AD FS将发送阿里云需要的RoleSessionName格式。

    <Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName">
        <AttributeValue>rolessouser@example.com<AttributeValue>
    </Attribute>
  • Role

    通过自定义规则将特定的用户所属组的信息转化成阿里云上的角色名称,其操作步骤如下。

    1. 单击添加转换声明规则
    2. 声明规则模板中选择使用自定义规则发送声明,单击下一步使用自定义规则发送声明
    3. 使用如下配置规则,并单击完成
      • 声明规则名称:Get AD Groups
      • 自定义规则
        c:[Type =="http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => add(store = "Active Directory",types = ("http://temp/variable"), query = ";tokenGroups;{0}", param =c.Value);
      自定义规则
      说明 这个规则获取用户在AD中所属组的信息,保存在中间变量http://temp/variable中。
    4. 单击添加转换声明规则
    5. 重复以上步骤,并单击完成
      • 声明规则名称:Role
      • 自定义规则
        c:[Type == "http://temp/variable", Value =~ "(?i)^Aliyun-([\d]+)"] => issue(Type = "https://www.aliyun.com/SAML-Role/Attributes/Role",Value = RegExReplace(c.Value, "Aliyun-([\d]+)-(.+)", "acs:ram::$1:role/$2,acs:ram::$1:saml-provider/<provider-name>"));
        说明 <provider-name>为步骤一:在阿里云中将AD FS配置为可信SAML IdP中创建的身份提供商名称。本示例中为ADFS。
      选择规则类型

      根据这个规则,如果用户所属的AD组中包含Aliyun-<account-id>-ADFS-Admin或Aliyun-<account-id>-ADFS-Reader,则将生成一个SAML属性,映射到阿里云上的角色ADFS-Admin或ADFS-Reader。

    配置完成后,IdP将返回阿里云所需要的SAML断言片段,如下所示。

    <Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/Role">
        <AttributeValue>acs:ram::<account-id>:role/ADFS-Admin,acs:ram::<account-id>:saml-provider/<provider-name></AttributeValue>
    </Attribute>

验证结果

  1. 登录AD FS SSO门户(URL:https://<ADFS-server>/adfs/ls/IdpInitiatedSignOn.aspx),选择阿里云应用,输入用户名密码。
    说明 <ADFS-server>是您的AD FS服务器域名或IP地址。如果网页不可用,可以通过PowerShell开启:Set-AdfsProperties –EnableIdpInitiatedSignonPage $True
    配置验证
  2. 在阿里云角色SSO页面,选择一个您要登录的角色,单击登录
    说明 如果您的用户在AD中只加入了一个组,则在阿里云上只会对应一个角色,该用户将直接登录,无需选择角色。
    阿里云角色SSO页面