使用Active Directory Federation Services建立与华为云的联合认证

云里来云里去 发表于 2019/06/04 17:02:21 2019/06/04
【摘要】 本文以企业IdP系统为Active Directory Federation Services(以下简称ADFS)为例,说明配置联邦用户访问华为云系统的方法。其中我们使用Active Directory(AD)做为用户管理和访问软件。

1 联合认证简介

当企业已有自己的身份认证系统,希望使用自己的身份认证系统登录华为云,而不需要在华为云中重新创建对应的IAM用户时,可以使用IAM提供的身份提供商(IdP)功能。通过该功能,企业用户不需要在华为云中重新创建用户,只需使用企业已有的用户名密码即可登录并使用华为云资源。利用身份提供商(IdP)机制,您可以向企业中的用户授予使用您账户中华为云资源的权限。关于身份提供商功能的详细说明,请参见联邦身份认证

本文以企业IdP系统为Active Directory Federation Services(以下简称ADFS)为例,说明配置联邦用户访问华为云系统的方法。其中我们使用Active Directory(AD)做为用户管理和访问软件。

1.1 ADFS与华为云联合认证流程

下图为ADFS与华为云的联合认证流程。

从图中可知,联合认证的步骤为:

  1. 用户在浏览器中打开从华为云上获取到的登录链接,浏览器向华为云发起单点登录请求。

  2. 华为云根据登录链接中携带的信息,查找对应的Metadata文件,构建SAML Request,发送给浏览器。

  3. 浏览器响应后,转发SAML Request给ADFS。

  4. 用户在浏览器中输入AD中创建的用户名和密码,完成身份认证。

  5. ADFS服务器构建携带用户信息的SAML断言,向浏览器发送SAML Response。

  6. 浏览器响应后转发SAML Response给华为云。

  7. 华为云从SAML Response中取出断言,并根据已配置的身份转换规则映射到具体的IAM用户组,颁发Token。

  8. 用户完成单点登录,根据权限访问华为云。

2 环境要求及运行结果

2.1 环境要求

  • 您已有一台可用的Windows计算机,用于安装ADFS,并拥有该计算机的管理员权限。关于ADFS对计算机的硬件要求,请参见部署AD FS要求

  • 您的Windows计算机上已安装Active Directory域服务,并且已使用域服务至少添加两个用户及用户组。其中两个用户分别属于两个用户组。例如,已创建用户Alice和Bob,用户组ADFSAdmin和ADFSGuest,其中Alice属于ADFSADmin,Bob属于ADFSGuest。用户组ADFSAdmin用于映射到IAM中的admin用户组,ADFSGuest用于映射到IAM中的guest用户组。如果不满足要求,请参见使用Windows 2012 R2安装Active Directory并创建用户和用户组

  • 您的Windows计算机与华为云网络联通。

  • 您已在华为云上注册了可用的账号,并已在IAM中创建一个用户组,例如为guest用户组。

2.2 示例环境及运行结果

本文中使用的计算机及软件规格说明如下,后面的操作步骤基于此环境操作。

  • 计算机:用于安装ADFS的操作系统是由华为云弹性云服务器(ECS)所创建的Windows 2012 R2 64位中文版,使用的规格是“s3.large.2 | 2vCPUs | 4GB”。

  • 已在弹性云服务器中安装Active Directory(AD)域服务,并已创建ADFSAdmin、ADFSGuest用户组,Alice和Bob用户,其中Alice属于ADFSAdmin用户组,Bob属于ADFSGuest用户。

  • 已在华为云注册账号,并通过IAM创建guest用户组。

通过本文操作,AD域创建的ADFSAdmin映射到华为云账号中的admin用户组,ADFSGuest映射到IAM中的guest用户组。在完成本文所有操作后,您可以通过IAM中创建的身份提供商所提供的链接,使用AD域用户Alice或是Bob成功登录华为云。其中由于Alice属于ADFSAdmin组,映射为IAM的admin组,因此拥有admin权限。Bob属于ADFSGuest组,映射为IAM的guest组,因此拥有guest组所配置的权限。


3 添加Active Directory证书服务

由于安装ADFS时需要使用到证书服务,因此需要先在计算机中添加证书服务。如果您已安装证书服务,请跳过本节内容。

3.1 前提条件

请确保计算机环境已达到要求,具体要求请参见 2 环境要求及运行结果。

3.2 操作步骤

  1. 使用计算机域管理员登录计算机,打开“服务器管理器”,单击“添加角色和功能”。

           

  2. 在弹出的窗口中,“开始之前”“安装类型”“服务器选择”都按默认选项,单击“下一步”。

  3. 在“服务器角色”中确认“Active Directory证书服务”是否已勾选,若未勾选表示未安装,则勾选“Active Directory”,在弹出窗口中按默认选择,单击“添加功能”,完成证书服务的安装。

          

  4. 在“角色服务”中,按默认选择“证书颁发机构”,单击“下一步”。

           

  5. 在“确认”中单击“安装”。安装完成后,单击下图中的红框,配置证书服务。

           

  6. 在“AD CS配置”窗口的“凭据”中按默认选择,单击“下一步”。


  7. 在“角色服务”中选择“证书颁发机构”,单击“下一步”。

          

  8. 在“设置为类型”中按默认选择“企业CA”,单击下一步。

           

  9. 在“CA类型”中选择“根CA”,单击“下一步”。

           

  10. 在“私钥”中选择“创建新的私钥”,单击“下一步”。

     

  11. 在“加密”中按默认选择,单击“下一步”。

     

  12. 在“CA名称”中,使用默认值,单击“下一步”。

          

  13. “有效期”、“证书数据库”都按默认选择,单击“下一步”。

  14. 在“确认”中单击“确认”完成证书配置。

            

  15. 配置成功后,提示配置成功,如下图所示。请重启计算机,使得配置的证书生效。

           

4 安装AD FS

本节介绍在Windows 2012 R2系统中安装ADFS的方法,请确保当前环境符合要求(请参见2 环境要求及运行结果),并已完成证书服务的添加(3 添加Active Directory证书服务)。

4.1 操作步骤

  1. 打开“服务器管理器”,单击“添加角色和功能”。

            

  2. 在弹出来的窗口“安装类型”按默认选择“基于角色或基于功能的安装”,单击“下一步”。

           

  3. “服务器选择”,选择当前服务器,单击“下一步”。

            

  4. “服务器角色”勾选“Active Directory Federation Services”,单击“下一步”。

           

  5. “功能”和“AD FS”按默认选择,单击“下一步”。

  6. “确认”,单击“安装”,开始安装AD FS。

           

  7. 安装完成后,单击下图中的红框,开始ADFS的配置。

           

  8. 在弹出的窗口“欢迎”页中按默认选项,单击“下一步”。

         

  9. 在“连接到AD DS”中,单击“下一步”。

  10. 在“指定服务属性”页面,选择之前创建的SSL证书,并填写显示名称。

    说明:        

    SSL证书请选择计算机名+域名,例如,这里选择adfs2012.acompany.com。

          

  • “联合身份验证服务名称”,即访问联合身份验证服务的地域,请记录,在获取联合身份验证服务配置文件里需要用到

  • “联合验证服务显示名称”,即用户浏览器验证身份时,在浏览器界面中所显示的名称。

11.在“指定服务帐户”中使用已有的域管理帐户。

单击“选择”后弹出的窗口如下图所示,请在此输入域管理帐户,如Administrator,单击“确定”。

返回“指定服务帐户”中,输入帐户密码,单击“下一步”。

12.在“指定数据库”中按默认选择,单击“下一步”。

13.在“查看选择”单击“下一步”。

14.在“先决条件检查”,单击“配置”。

15.在看到“已成功配置此服务器”时,表示配置成功。

5 在ADFS中添加华为云信任关系

在ADFS安装配置完成后,需要将华为云的信任关系配置到ADFS中,以完成ADFS对华为云的信息关系添加。

5.1 操作步骤

  1. 保存华为云的断言描述。在浏览器中输入如下链接,并将该网页另存为“metadata.xml”。

    https://auth.huaweicloud.com/authui/saml/metadata.xml

           

  2. 在“管理工具”中打开“AD FS管理”,选择“添加信赖方信任向导”。

            

  3. 在弹出的窗口中“欢迎使用”中单击“启动”。

  4. 在“选择数据源”中选择“从文件导入有关信赖方的数据”,单击“浏览”,将1中保存的“metadata.xml”上传至此,单击“下一步”。

           

  5. 在“指定显示名称”填写信赖方显示名称,单击“下一步”。

           

  6. 在“是否立即配置多重身份验证”按默认选择,单击“下一步”。

           

  7. 在“选择颁发授权规则”中,按默认选择,单击“下一步”。

            

  8. 在“准备好添加信任”中按默认选择,单击“下一步”。

           

  9. 在“完成”中单击“关闭”。

            

  10. 在弹出的窗口中添加五条规则。

    1. 添加Rule_01。

      单击“添加规则”。

                

      在弹出的窗口中选择“使用自定义规则发送声明”。

                

      在配置规则窗口中按如下图填写,填写完成后,单击“完成”,完成Rule_01的规则添加。其中自定义规则填写内容为:

      c:[Type =="http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname",Issuer == "AD AUTHORITY"]=> add(store = "Active Directory", types =("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"),query = ";sAMAccountName;{0}", param = c.Value);

                 

                  

    2. 重复如上操作,完成Rule_02的添加,其中自定义规则内容如下。

      c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"]=> issue(Type ="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier",Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = c.Value,ValueType = c.ValueType, Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"]= "urn:oasis:names:tc:SAML:2.0:nameid-format:transient",Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/spnamequalifier"]= "https://auth.huaweicloud.com/");

                 

                

    3. 添加ug1规则,定义由AD域创建的用户组ADFSAdmin为指定的声明值“ADFSAdmin”。

      单击“添加规则”,在弹出窗口中选择“以声明方式发送组成员身份”,单击“下一步”。

                 

      在“选择组”窗口中,选择对象类型为“组”,并在对象名称中输入由AD域创建的用户组名称,此处示例为“ADFSAdmin”,单击“确定”。

                

      在“选择规则类型”中填写如下图所示信息。

                 

    4. 重复添加规则ug1的操作,添加规则ug2,将AD域创建的另一个用户组传出为声明值,此处示例为AD组名“ADFSGuest”,传出值为“ADFSGuest”。

                 

    5. 创建规则“name”。

      单击“添加规则”,在弹出窗口中选择“以声明方式发送 LDAP特性”,单击“下一步”。

                 

      在弹出窗口中“选择规则类型”按如下图填写,并单击“完成”。

                

    6. 最终编辑声明规则如下图所示,单击“确定”,完成规则设置。

                 

6 在PowerShell中注册SPN并关闭身份验证扩展保护

  1. 打开Windows PowerShell,运行如下命令注册SPN,其中标红的内容为创建证书时,设置的显示CA证书名称,本例中为adfs2012.acompany.com。

    setspn -s http/adfs2012.acompany.com administrator

           

    注册完成后,可使用如下命令查看结果。

    setspn -q http/adfs2012.acompany.com

           

            

  2. 由于Windows 2012 R2使用了身份验证扩展保护功能,但是由于部分浏览器不支持扩展保护功能,使得您无法从企业网络内部使用集成Windows身份验证登录到云服务。因此为了ADFS能正常的登录到华为云,需要关闭ADFS的扩展保护功能。

    在PowerShell中运行如下命令,关闭ADFS的扩展保护功能,设置完成后,请重启“AD FS管理”。

    Set-ADFSProperties -ExtendedProtectionTokenCheck None

           

          

  3. 验证IAM连接成功。在浏览器中打开如下链接,显示下图内容,说明连接成功。其中标红的内容为创建证书时,显示的CA证书名称。

    https://adfs2012.acompany.com/adfs/ls/idpinitiatedsignon.aspx

           

7 在IAM上配置身份提供商

在完成ADFS的安装及信息关系配置后,还需要在IAM上创建ADFS身份提供商,并添加ADFS的metadata文件,以建立华为云对ADFS的信任关系。此外,需要在IAM的身份提供商中,配置AD域用户组与华为云用户组间的映射关系,以实现AD域用户通过ADFS完成与华为云间的联合认证及权限范围限定。

操作步骤

  1. 在浏览器打开如下链接,其中标的内容请替换为CA证书名称,将将此文件另存为federationmetadata.xml。

    https://adfs2012.acompany.com/federationmetadata/2007-06/federationmetadata.xml

           

    说明:

    如果在IE中打开此链接,出现乱码,请在IE中打开“工具”选择“兼容性视图设置,并将“https://adfs2012.acompany.com/federationmetadata/2007-06/federationmetadata.xml”添加进去。添加完成后,重新打开此链接,即可解决乱码问题。

            

  2. 使用华为云账户登录华为云,并进入IAM控制台,在控制台左侧导航栏中单击“身份提供商”,单击“创建身份提供商。

  3. 在“创建身份提供商”页面,填写身份提供商名称、协议、状态,单击“确定”。

           

  4. 在已创建的身份提供商后单击“修改”。

  5. 在“修改身份提供商”页面的“元数据配置”中,将1中下载的federationmetadata.xml上传。

  6. 在“修改身份提供商”页面的“身份转换规则”单击“编辑规则”,填入如下规则。关于IAM规则的详细说明,请参见联邦用户身份规则转换说明

    如下规则表示AD域的ADFSAdmin用户组映射至IAM的admin用户组。AdFSGuest用户组映射到IAM的guest用户组。并且用户组中的所有用户在华为云中登录后,在华为云上显示的IAM用户名为“acompany_用户名”,例如Alice登录后显示的IAM用户名是“acompany_Alice”。

    [{"remote": [{"type": "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"},{"any_one_of": ["ADFSAdmin"],"type": "http://schemas.xmlsoap.org/claims/Group"}],"local": [{"user": {"name": "acompny_{0} "}},{"group": {"name": "admin"}}]},{"remote": [{"type": "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"},{"any_one_of": ["ADFSGuest"],"type": "http://schemas.xmlsoap.org/claims/Group"}],"local": [{"user": {"name": " acompny_{0} "}},{"group": {"name": "guest"}}]}]


8 SP端发起登录

  1. 在“修改身份提供商”页面,复制登录链接,并在浏览器中输入如下链接。

  2. 浏览器弹出如下页面中,填写AD域的用户名和密码,单击“登录”,能成功登录到华为云控制台,表示AD中的域用户到华为云的联合认证成功。

    unnaming (58).png

  3. 出现如下页面,说明使用AD域的用户Alice登录华为云成功。

    unnaming (59).png


9 IdP端发起登录

单租户模式

  1. 在“修改身份提供商”页面,查看对应的domain_id,idp。

  2. 在ADFS上添加domain_id、idp对应的规则。

    idpinit1.png

    a. 添加方式:编辑声明颁发策略-->添加规则-->以声明方式发送组成员身份。

    idpinit5.png

    b. 添加domainId:其中声明规则名称可自定义,传出声明类型必须为:IAM_SAML_Attributes_domain_id,传出声明值为对应的domain_id。

    adDomainId.png

    c. 添加IdP:其中声明规则名称可自定义,传出声明类型必须为:IAM_SAML_Attributes_idp_id,传出声明值为对应的idp名称。

    adIdp.png

  3. 登录https://{ADFS服务器名称}.acompany.com/adfs/ls/idpinitiatedsignon.aspx进行验证。

    idpinit6.png

  4. 输入账号密码登录后,成功跳转至华为云Console,表示AD中的域用户到华为云的联合认证成功。

    unnaming (61).png

  5. 出现如下页面,说明使用AD域的用户Alice登录华为云成功。

    unnaming (1) (1).png

多租户模式

  • 多租户模式场景说明

        多租户模式下配置单租户场景:IdP发起登录后,将触发多租户模式下的单租户场景,预期以idp_id_1身份登录domain_id_1。

参数

格式

传出声明类型

IAM_SAML_Attributes_identityProviders

iam::{domain_id_1}:identityProvider:{idp_id_1}

       

        多租户模式下配置多租户场景:IdP端发起登录后,将触发多租户模式下的多租户场景,如下图所示。将跳转至多租户联邦登录页,用户选择身份提供商后,完成登录。

参数

格式

传出声明类型

IAM_SAML_Attributes_identityProviders

iam::{domain_id_1}:identityProvider:{idp_id_1};iam::{domain_id_1}:identityProvider:{idp_id_2};iam::{domain_id_2}:identityProvider:{idp_id_3}

       说明:

               多个传出声明类型值由分号“;”分割,且传参不能含有空格。

  • 多租户模式登录步骤

  1. 在“修改身份提供商”页面,查看对应的domain_id,idp,确认身份提供商信息(多租户场景需要根据不同的登录链接确认信息)。

    unnaming (60).png

    IDP

    domain_id

    Idp_id

    IDP1

    {domain_id_1}

    {idp_id_1}

    IDP2

    {domain_id_1}

    {idp_id_2}

    IDP3

    {domain_id_2}

    {idp_id_3}


  2. 参考单租户登录-步骤2,在ADFS上添加多租户配置参数idps对应的规则。

    其中传出声明类型必须为IAM_SAML_Attributes_identityProviders,传出声明值为固定格式的多租配置信息,具体参数说明如下:

    参数

    格式

    说明

    传出声明类型

    IAM_SAML_Attributes_identityProviders

    固定值,不能与其他IAM_SAML配置同时配置

    传出声明值

    iam::{domain_id}:identityProvider:{idp_id}

    支持多值拼接,拼接符为英文分号(;)


  3. 登录https://{ADFS服务器名称}.acompany.com/adfs/ls/idpinitiatedsignon.aspx进行验证。

    idpinit6.png

  4. 输入帐号、密码,并单击“登录”,成功跳转至华为云Console,表示AD中的域用户到华为云的联合认证成功。

  5. 在华为云console选择要访问的身份提供商。

  6. 出现如下页面,说明使用AD域的用户Alice登录华为云成功。

    unnaming (1) (1).png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。