本文提供一个以Azure AD(Azure Active Directory,以下简称 AAD)与阿里云进行角色SSO的示例,帮助用户理解企业IdP与阿里云进行SSO的端到端配置流程。

背景信息

在本示例中,企业拥有一个阿里云账号(Account1)和一个Azure AD租户。在Azure AD租户中,您有一个管理员用户(已授予全局管理员权限)和一个企业员工用户(u2)。您希望经过配置,使得企业员工用户(u2)在登录Azure AD后,通过角色SSO访问阿里云账号(Account1)。

您需要通过管理员用户(已授予全局管理员权限)执行本示例AAD中的操作。关于如何在AAD中创建用户和为用户授权,请参见AAD文档

步骤一:在AAD库中添加应用程序

  1. 管理员用户登录Azure门户
  2. 单击主页的SSO_AAD_icon图标。
  3. 在左侧导航栏,选择Azure Active Directory > 企业应用程序 > 所有应用程序
  4. 单击新建应用程序
  5. 搜索Alibaba Cloud Service (Role-based SSO)并单击选择。
  6. 输入应用名称,然后单击创建
    本示例中,使用默认应用名称Alibaba Cloud Service (Role-based SSO),您也可以自定义应用名称。
  7. Alibaba Cloud Service (Role-based SSO)页面,单击左侧导航栏的属性,复制并保存对象ID

步骤二:配置AAD SSO

  1. Alibaba Cloud Service (Role-based SSO)页面,单击左侧导航栏的单一登录
  2. 选择单一登录方法页面,单击SAML
  3. 设置SAML单一登录页面,配置SSO信息。
    1. 在页面左上角,单击上传元数据文件,选择文件后,单击添加
      说明 您可以通过以下URL获取元数据文件: https://signin.aliyun.com/saml-role/sp-metadata.xml
    2. 基本SAML配置页面,配置以下信息,然后单击保存
      • 标识符(实体 ID):从上一步的元数据文件中自动读取entityID的值。
      • 回复 URL(断言使用者服务 URL):从上一步的元数据文件中自动读取Location的值。
      • 中继状态:用来配置角色SSO登录成功后跳转到的阿里云页面。
        说明 出于安全原因,您只能填写阿里巴巴旗下的域名URL作为中继状态的值,例如:*.aliyun.com、*.hichina.com、*.yunos.com、*.taobao.com、*.tmall.com、*.alibabacloud.com、*.alipay.com,否则配置无效。若不配置,默认跳转到阿里云控制台首页。
    3. 用户属性和声明区域,单击编辑图标。
    4. 单击添加新的声明,配置以下信息,然后单击保存
      • 名称区域,输入Role
      • 命名空间区域,输入https://www.aliyun.com/SAML-Role/Attributes
      • 区域,选择属性
      • 源属性区域,从下拉列表中选择user.assignedroles
    5. 重复上述步骤,添加一个新的声明。
      • 名称区域,输入RoleSessionName
      • 命名空间区域,输入https://www.aliyun.com/SAML-Role/Attributes
      • 区域,选择属性
      • 源属性区域,从下拉列表中选择user.userprincipalname
    6. SAML签名证书区域,单击下载,获取联合元数据XML

步骤三:在阿里云创建身份提供商

  1. 阿里云账号(Account1)登录RAM控制台
  2. 在左侧导航栏,单击SSO管理
  3. 角色SSO页签,单击SAML页签,然后单击创建身份提供商
  4. 创建身份提供商页面,输入身份提供商名称AAD备注
  5. 元数据文档区域,单击上传文件
    说明 上传在步骤二:配置AAD SSO中下载的联合元数据XML
  6. 单击完成
  7. 单击关闭

步骤四:在阿里云创建RAM角色

  1. 在RAM控制台的左侧导航栏,选择身份管理 > 角色
  2. 角色页面,单击创建角色
  3. 创建角色面板,选择可信实体类型为身份提供商,然后单击下一步
  4. 输入角色名称AADrole备注
  5. 选择身份提供商类型为SAML
  6. 在下拉列表中选择身份提供商AAD,单击完成
    说明
    • 您可以根据需要为RAM角色添加权限。关于如何为RAM角色添加权限,请参见为RAM角色授权
    • 当身份提供商和对应的RAM角色创建完成后,请保存好对应的ARN。关于如何查看ARN,请参见查看RAM角色基本信息
  7. 单击关闭

步骤五:将阿里云RAM角色与AAD用户进行关联

  1. 在AAD中创建角色。
    1. 管理员用户登录AAD Graph浏览器
    2. 单击账号右侧的settings图标。
    3. 单击选择权限
    4. 权限页面,选择以下权限并单击同意
      权限
      说明 修改权限后,系统会重定向到Graph浏览器。
    5. Graph浏览器页面,第一个下拉列表中选择GET,第二个下拉列表中选择beta。在搜索框中输入https://graph.microsoft.com/beta/servicePrincipals/<objectID>,其中objectID是您在AAD属性页面保存的对象ID,然后单击运行查询
      说明 如果您有多个目录,您可以在查询区域输入https://graph.microsoft.com/beta/contoso.com/servicePrincipals
    6. 响应预览页签下,提取出appRoles属性并保存。
       "appRoles": [
                      {
                          "allowedMemberTypes": [
                              "User"
                          ],
                          "description": "msiam_access",
                          "displayName": "msiam_access",
                          "id": "7dfd756e-8c27-4472-b2b7-38c17fc5****",
                          "isEnabled": true,
                          "origin": "Application",
                          "value": null
                      }
                  ],
    7. 返回Graph浏览器,将第一个下拉列表改为PATCH,第二个下拉列表中选择beta。在搜索框中输入https://graph.microsoft.com/beta/servicePrincipals/<objectID>,其中objectID是您在AAD属性页面保存的对象ID,将以下内容复制到请求正文中并选择运行查询
      { 
        "appRoles": [
          { 
            "allowedMemberTypes":[
              "User"
            ],
            "description": "msiam_access",
            "displayName": "msiam_access",
            "id": "7dfd756e-8c27-4472-b2b7-38c17fc5****",
            "isEnabled": true,
            "origin": "Application",
            "value": null
          },
          { "allowedMemberTypes": [
              "User"
          ],
          "description": "Admin,AzureADProd",
          "displayName": "Admin,AzureADProd",
          "id": "68adae10-8b6b-47e6-9142-6476078c****", //自定义ID
          "isEnabled": true,
          "origin": "ServicePrincipal",
          "value": "acs:ram::187125022722****:role/aadrole,acs:ram::187125022722****:saml-provider/AAD" //身份提供商和RAM角色的ARN
          }
        ]
      }
      说明 您可以根据需要创建多个角色,AAD将在SAML中将这些角色作为声明值进行传送,但是您只能在msiam_access后添加新的角色。
  2. 将角色添加到用户(u2)中。
    1. 管理员用户登录Azure门户
    2. 在左侧导航栏,选择Azure Active Directory > 企业应用程序 > 所有应用程序
    3. 名称列表下,单击Alibaba Cloud Service (Role-based SSO)
    4. 在左侧导航栏,单击用户和组
    5. 单击左上角的添加用户/组
    6. 单击用户,从用户列表中选择用户(u2),单击选择
    7. 单击分配
    8. 查看分配的角色。
      查看分配的角色
      说明 如果您分配了用户(u2),创建的角色会自动附加给该用户。如果您创建了多个角色,您可以根据需要合理分配角色。

验证结果

  1. 获取用户访问URL。
    1. 管理员用户登录Azure门户
    2. 在左侧导航栏,选择Azure Active Directory > 企业应用程序 > 所有应用程序
    3. 名称列表下,单击Alibaba Cloud Service (Role-based SSO)
    4. 在左侧导航栏,选择属性,获取用户访问URL
      用户访问URL
  2. 用户(u2)从管理员用户处获取上述用户访问URL在浏览器中输入该URL,使用自己的账号登录。

    系统将自动SSO登录并重定向到您指定的中继状态页面。如果未指定中继状态或超出允许范围,则系统会访问如下阿里云控制台首页。

    角色SSO成功

(可选)配置AAD与多个阿里云账号的角色SSO

假设您有两个阿里云账号(Account1和Account2),您希望经过配置,使得企业员工用户(u2)在登录Azure AD后,通过角色SSO既能访问阿里云账号(Account1),也能访问阿里云账号(Account2)。

  1. 在AAD库中添加应用程序。
    同单账号配置步骤,请参见步骤一:在AAD库中添加应用程序
  2. 配置AAD SSO。
    同单账号配置步骤,请参见步骤二:配置AAD SSO
  3. 在阿里云创建身份提供商。
    您需要在两个阿里云账号(Account1和Account2)中分别创建身份提供商AAD。每个阿里云账号内的具体操作,请参见步骤三:在阿里云创建身份提供商
  4. 在阿里云创建RAM角色。
    您需要在两个阿里云账号(Account1和Account2)中分别创建RAM角色,本示例中假设在阿里云账号(Account1)中创建两个RAM角色,在阿里云账号(Account2)中创建一个RAM角色。具体如下:
    • 阿里云账号(Account1)的RAM角色:adminaadreadaad
    • 阿里云账号(Account2)的RAM角色:financeaad

    每个阿里云账号内的具体操作,请参见步骤四:在阿里云创建RAM角色

  5. 将阿里云RAM角色与AAD用户进行关联。
    具体操作与步骤五:将阿里云RAM角色与AAD用户进行关联大致相同,差异点如下:
    1. 在AAD中创建角色。
      AAD Graph浏览器中配置的信息如下:
      {
        "appRoles": [
          {
            "allowedMemberTypes":[
              "User"
            ],
            "description": "msiam_access",
            "displayName": "msiam_access",
            "id": "7dfd756e-8c27-4472-b2b7-38c17fc5****",
            "isEnabled": true,
            "origin": "Application",
            "value": null
          },
          { "allowedMemberTypes": [
              "User"
          ],
          "description": "Accout1Admin,AzureADProd",
          "displayName": "Accout1Admin,AzureADProd",
          "id": "68adae10-8b6b-47e6-9142-6476078c****", //自定义ID
          "isEnabled": true,
          "origin": "ServicePrincipal",
          "value": "acs:ram::187125022711****:role/adminaad,acs:ram::187125022711****:saml-provider/AAD" //阿里云账号(Account1)的身份提供商和RAM角色的ARN
          },
          { "allowedMemberTypes": [
              "User"
          ],
          "description": "Accout1Read,AzureADProd",
          "displayName": "Accout1Read,AzureADProd",
          "id": "68adae10-8b6b-47e6-9142-6476077c****", //自定义ID
          "isEnabled": true,
          "origin": "ServicePrincipal",
          "value": "acs:ram::187125022711****:role/readaad,acs:ram::187125022711****:saml-provider/AAD" //阿里云账号(Account1)的身份提供商和另一RAM角色的ARN
          },
          { "allowedMemberTypes": [
              "User"
          ],
          "description": "Accout2Finance,AzureADProd",
          "displayName": "Accout2Finance,AzureADProd",
          "id": "68adae10-8b6b-47e6-9142-6476046c****", //自定义ID
          "isEnabled": true,
          "origin": "ServicePrincipal",
          "value": "acs:ram::177125022722****:role/financeaad,acs:ram::177125022722****:saml-provider/AAD" //阿里云账号(Account2)的身份提供商和RAM角色的ARN
          }
        ]
      }
    2. 将角色添加到用户(u2)中。
      您需要将角色Accout1Admin,AzureADProdAccout1Read,AzureADProdAccout2Finance,AzureADProd分别添加到用户(u2)中。
  6. 用户(u2)通过角色SSO访问阿里云。
    您需要根据界面提示选择要访问的阿里云账号(Account1或Account2)及其角色。