本文介绍如何基于Windows AD服务器配置与华为云IAM的联邦认证
0x01 联合认证简介
当企业已有自己的身份认证系统,希望使用自己的身份认证系统登录华为云,而不需要在华为云中重新创建对应的IAM用户时,可以使用IAM提供的身份提供商(IdP)功能。通过该功能,企业用户不需要在华为云中重新创建用户,只需使用企业已有的用户名密码即可登录并使用华为云资源。利用身份提供商(IdP)机制,您可以向企业中的用户授予使用您账户中华为云资源的权限。关于身份提供商功能的详细说明,请参见联邦身份认证。
本文以企业IdP系统为Active Directory Federation Services(以下简称ADFS)为例,说明配置联邦用户访问华为云系统的方法。其中我们使用Active Directory(AD)做为用户管理和访问软件。
下图为ADFS与华为云的联合认证流程。
从图中可知,联合认证的步骤为:
- 用户在浏览器中打开从华为云上获取到的登录链接,浏览器向华为云发起单点登录请求。
- 华为云根据登录链接中携带的信息,查找对应的Metadata文件,构建SAML Request,发送给浏览器。
- 浏览器响应后,转发SAML Request给ADFS。
- 用户在浏览器中输入AD中创建的用户名和密码,完成身份认证。
- ADFS服务器构建携带用户信息的SAML断言,向浏览器发送SAML Response。
- 浏览器响应后转发SAML Response给华为云。
- 华为云从SAML Response中取出断言,并根据已配置的身份转换规则映射到具体的IAM用户组,颁发Token。
- 用户完成单点登录,根据权限访问华为云。
0x02 环境准备
域控环境准备
- 已完成Windows AD域控搭建,搭建方法请参考
- AD域控服务器到华为云的网络可达
- 已经注册了可用的华为云账号
AD用户组配置
- 创建用户组
ADFSAdmin
添加用户charles
- 创建用户组
ADFSGuest
添加用户rebecca
稍后我们会将这两个用户组映射到IAM组
0x03 AD FS安装
注意,这里假设AD服务器已经就绪,包括AD域控、用户组和用户,相关步骤请参考《华为云搭建Windows Active Directory(AD)认证服务器》(https://www.jianshu.com/p/b31a70f267ac)
打开“服务器管理器” > “添加角色和功能”
之后一直按下一步,直到
勾选“Active Directory Federation Services”,然后下一步
点击“安装”
安装完成后,点击链接“在此服务器上配置联合身份验证服务”
下一步
选择证书,CA证书在搭建AD域控服务器的时候已经配置过,这里可以直接选到(如果安装完AD证书服务后还是选不到,可以尝试重启服务器或者手动导入)
这里可以直接使用AD域内的Administrator账号密码,点下一步
完成配置
0x04 配置华为云信任关系
在ADFS安装配置完成后,需要将华为云的信任关系配置到ADFS中,以完成ADFS对华为云的信息关系添加。
保存华为云的断言描述。在浏览器中输入如下链接,并将该网页另存为“metadata.xml”
https://auth.huaweicloud.com/authui/saml/metadata.xml
在“管理工具”中打开“AD FS管理”,选择“添加信赖方信任向导”
点击“启动”
在“选择数据源”界面,勾选“从文件导入有关信赖方的数据”,选择上一步保存的
metadata.xml
输入显示名称
下一步
维持默认选项,下一步
配置规则
作为测试,这里添加5条规则
-
添加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);
- 重复如上操作,完成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/");
-
添加ug1规则,定义由AD域创建的用户组ADFSAdmin为指定的声明值“ADFSAdmin”。
单击“添加规则”,在弹出窗口中选择“以声明方式发送组成员身份”,单击“下一步”。
在“选择组”窗口中,选择对象类型为“组”,并在对象名称中输入由AD域创建的用户组名称,此处示例为“ADFSAdmin”,单击“确定”。
- 重复添加规则ug1的操作,添加规则ug2,将AD域创建的另一个用户组传出为声明值,此处示例为AD组名“ADFSGuest”,传出值为“ADFSGuest”。
- 创建规则“name”。
单击“添加规则”,在弹出窗口中选择“以声明方式发送 LDAP特性”,单击“下一步”。
在弹出窗口中“选择规则类型”按如下图填写,并单击“完成”。
-
最终编辑声明规则如下图所示,单击“确定”,完成规则设置。
在PowerShell中注册SPN并关闭身份验证扩展保护
- 打开Windows PowerShell,运行如下命令注册SPN,其中标红的内容为创建证书时,设置的显示CA证书名称,本例中为test-ad-server.dearcharles.cn
setspn -s http/test-ad-server.dearcharles.cn administrator
注册完成后,可使用如下命令查看结果。
setspn -q http/test-ad-server.dearcharles.cn
-
由于Windows 2012 R2使用了身份验证扩展保护功能,但是由于部分浏览器不支持扩展保护功能,使得您无法从企业网络内部使用集成Windows身份验证登录到云服务。因此为了ADFS能正常的登录到华为云,需要关闭ADFS的扩展保护功能。
在PowerShell中运行如下命令,关闭ADFS的扩展保护功能,设置完成后,请重启“AD FS管理”。
Set-ADFSProperties -ExtendedProtectionTokenCheck None
- 验证IAM连接成功。在浏览器中打开如下链接,显示下图内容,说明连接成功。其中标红的内容为创建证书时,显示的CA证书名称。
https://test-ad-server.dearcharles.cn/adfs/ls/idpinitiatedsignon.aspx
当看明本地的配置已经完成了
如果页面访问不到,需要看一下AD服务器所在的安全组是否放开了443端口(默认是不开的),需要在入方向放开443端口
这里可能还需要注册一个DNS域名,比如本例的dearcharles.cn
以及A记录test-ad-server.dearcharles.cn
在IAM上配置身份提供商
在完成ADFS的安装及信息关系配置后,还需要在IAM上创建ADFS身份提供商,并添加ADFS的metadata文件,以建立华为云对ADFS的信任关系。此外,需要在IAM的身份提供商中,配置AD域用户组与华为云用户组间的映射关系,以实现AD域用户通过ADFS完成与华为云间的联合认证及权限范围限定。
- 在浏览器打开如下链接,其中标的内容请替换为CA证书名称,将将此文件另存为federationmetadata.xml。
https://test-ad-server.dearcharles.cn/federationmetadata/2007-06/federationmetadata.xml
说明:
如果在IE中打开此链接,出现乱码,请在IE中打开“工具”选择“兼容性视图设置,并将“https://test-ad-server.dearcharles.cn/federationmetadata/2007-06/federationmetadata.xml”添加进去。添加完成后,重新打开此链接,即可解决乱码问题。
-
使用华为云账户登录华为云,并进入IAM控制台,在控制台左侧导航栏中单击“身份提供商”,单击“创建身份提供商。
在“创建身份提供商”页面,填写身份提供商名称、协议、状态,单击“确定”。
- 在已创建的身份提供商后单击“修改”。
- 在“修改身份提供商”页面的“元数据配置”中,将1中下载的federationmetadata.xml上传。
-
在“修改身份提供商”页面的“身份转换规则”单击“编辑规则”,填入如下规则。关于IAM规则的详细说明,请参见联邦用户身份规则转换说明。
如下规则表示AD域的ADFSAdmin用户组映射至IAM的admin用户组。AdFSGuest用户组映射到IAM的guest用户组。并且用户组中的所有用户在华为云中登录后,在华为云上显示的IAM用户名为“acompany_用户名”,例如Chales登录后显示的IAM用户名是“acompany_Charles”。
[{"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"}}]}]
SP端发起登录
- 在“修改身份提供商”页面,复制登录链接,并在浏览器中输入如下链接。
- 浏览器弹出如下页面中,填写AD域的用户名和密码,单击“登录”,能成功登录到华为云控制台,表示AD中的域用户到华为云的联合认证成功。
-
出现如下页面,说明使用AD域的用户Charles登录华为云成功。
IdP端发起登录
- 在“修改身份提供商”页面,查看对应的domain_id,idp。
- 在ADFS上添加domain_id、idp对应的规则。
a. 添加方式:编辑声明颁发策略-->添加规则-->以声明方式发送组成员身份。
b. 添加domainId:其中声明规则名称可自定义,传出声明类型必须为:IAM_SAML_Attributes_domain_id,传出声明值为对应的domain_id。
c. 添加IdP:其中声明规则名称可自定义,传出声明类型必须为:IAM_SAML_Attributes_idp_id,传出声明值为对应的idp名称。
-
登录
https://{ADFS服务器名称}.dearcharles.cn/adfs/ls/idpinitiatedsignon.aspx
进行验证。
输入账号密码登录后,成功跳转至华为云Console,表示AD中的域用户到华为云的联合认证成功。
- 出现如下页面,说明使用AD域的用户charles登录华为云成功。