亚马逊AWS官方博客
用 Microsoft ADFS 4.0 AWS 做 AppStream 2.0 单点登录部署
在本博客中,我将引导您设置Active Directory Federation Service(ADFS)和ADFS Web应用程序代理(WAP)。我们将使用在内部Active Directory域中运行的ADFS进一步为AWS AppStream 2.0服务配置单点登录(SSO)。这将使我们的AD用户能够使用其域凭证无缝登录到AWS AppStream 2.0控制台。
在解决方案中,我们利用两个域控制器和两个ADFS服务器,它们分别充当ADFS服务器和Web应用程序代理服务器。
先决条件
- 注册并托管公共域 – 单点登录(SSO)的外部URL
- 已经部署Appstream队列和堆栈, 队列已加入域
分步配置:
在“ ADFS01.test.in”服务器上安装和配置ADFS角色
- 打开服务器管理器,然后单击“Add Roles and Features”
- 选择“Role-Based or feature-based installation”,然后单击“下一步”
- 选择服务器,然后单击下一步继续处理
- 选择“ Active Directory Federation Service”,然后单击“下一步”。
- 查看此页面上的信息,然后单击下一步
- 单击“安装”以开始ADFS角色安装
- ADFS角色安装已成功完成,现在我们需要在此服务器上配置联合身份验证服务。单击”Configure the federation service on this server”,它将打开ADFS配置向导。
- 在下一页中,选择“Create the first federation server in a federation server farm”,然后单击“下一步”以继续
- 提供该帐户具有域管理员权限以执行ADFS配置, 然后单击“下一步”以继续
- 在启动ADFS配置之前,需要先创建SSL证书,然后在此处进行指定。我已经为我的联合身份验证服务“test.in”创建并导入了证书, 单击“下一步”
- 指定将由ADFS服务使用的服务帐户(主要是域用户帐户), 单击“下一步”
- 取决于您的可行性和要求,您可以使用SQL Server数据库。这个范例使用Windows内部数据库(WID),单击下一步继续
- 单击“Configure”以开始ADFS配置。
- ADFS配置已成功完成,现在将重新启动该服务器。
在ADFS中添加依赖方信任
- 打开ADFS控制台进行配置
- 右键单击“Relying Party Trusts”,然后单击“Add Relying Party Trust”
- 点击“Claim aware”,然后点击“开始”
- 使用以下元数据URL从AWS端下载SAML元数据https://signin.aws.amazon.com/static/saml-metadata.xml
- 将元数据下载到桌面之后。选择“Import data about the relying party from a file”,并提供从上方URL下载的元数据文件路径
- 提供此依赖方信托的显示名称,然后继续进行
- 在此处继续使用默认选项
- 点击下一步继续操作,我们现在无需在此处进行任何修改。添加依赖方信任后,也可以更改其中一些属性。
- 选“Configure claims issuance policy for this application”,然后单击“关闭”
- 现在,我们已经成功添加了依赖方信任“ AWS AppStream”。现在到上面依赖方信任的属性,并添加如” https://signin.aws.amazon.com/saml”。这是AWS的SAML端点。
配置依赖方信任的声明规则
- 右键单击依赖方信任“ AWS AppStream”,然后单击“Edit Claim Issuance Policy”
- 添加以下规则:
- 选择模板Transform an Incoming Claim
-
-
- 添加以下值
- Claim Rule Name: Name ID
- Incoming Claim Type: UPN
- Outgoing Claim Type: Name ID
- Outgoing name ID format: Persistent Identifier
- Pass through all claim values: selected
- 添加以下值
-
-
- 选择模板 Send LDAP Attributes as Claims
-
- 选择模板Send Claims Using a Custom Rule
Claim Rule Name: Get Active Directory Groups
Custom Rule:
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);
-
- 选择模板Send Claims Using a Custom Rule
-
-
- 添加以下值:
-
Claim Rule Name: Roles
Custom Rule:
c:[Type == “http://temp/variable“, Value =~ “(?i)^AWS-“] => issue(Type = “https://aws.amazon.com/SAML/Attributes/Role“, Value = RegExReplace(c.Value, “AWS-123456789-“, “arn:aws:iam::123456789:saml-provider/ADFS,arn:aws:iam::123456789:role/”));
下载ADFS元数据文件
现在,我们需要使用下面的ADFS元数据URL从ADFS服务器下载ADFS元数据。下载完此元数据文件后,我们将继续从AWS方面进行进一步配置,即创建AWS IAM身份提供程序和IAM角色等。
https://sts.test.in/FederationMetadata/2007-06/FederationMetadata.xml
在AWS IAM中创建SAML身份提供程序(IdP)
- 登录到AWS控制台并导航到IAM服务
- 单击“身份提供者”,然后单击“创建提供者”
- 为您的IdP提供所需的名称,然后选择您的ADFS元数据文件。
- 单击“Create”,我们在IAM控制台中创建了标识提供程序“ ADFS”
创建AWS IAM策略以允许访问AWS AppStream 2.0堆栈
现在,我们需要创建一个IAM角色策略,该策略将允许访问我的AWS AppStream 2.0堆栈。该IAM策略将附加到将在下一步中创建的IAM角色“ ADFSSSO”。我的AWS AppStream 2.0堆栈名称是在“ US-East-1” AWS区域中运行的“ AppStreamStack”。
- 登录到AWS控制台并导航到IAM服务
- 单击左侧的”Policies”, 选择”Create Policy”
- 单击“ JSON”选项,并具有如下策略定义。您可以在修改AppStream Stack ARN之后复制/粘贴此JSONs
- 提供策略名称”ADFS-SSOPolicy”,然后单击“Create”。
在AWS IAM中创建SAML 2.0联合IAM角色
- 登录到AWS控制台并导航到IAM服务
- 单击左侧的”Roless”, 选择”Create Role”
- 选择“ SAML 2.0Federation”,创建名称 “ADFS”。选择”Allow programmatic and AWS Management Console access”
- 在权限策略上,选择我们在上一步中创建的“ ADFS-SSOPolicy”。点击下一步
- 提供适当的IAM角色名称”ADFSSSO”,然后单击“Create Role”。
为AWS AppStream 2.0 Stack创建RelayState URL
现在,我们来创建RelayState URL,我使用下面路径下的excel工作表进行下载。您可以在此处输入ADFS服务名称和AppStream堆栈详细信息以生成RelayState URL。
RelayState URL Generator下载:
https://s3-us-west-2.amazonaws.com/as2-blog-artifacts/RelayGenerator.xlsx
已经准备好RelayState URL,现在我可以测试ADFS SSO,并且应该可以使用此URL连接到AppStream 2.0 Stack。
使用RelayState URL测试AWS AppStream 2.0单点登录
让我们使用就在之前的RelayState URL登录并验证是否一切正常。
它成功地将我连接到我的AWS AppStream 2.0 Stack。
在“ ADFS02”服务器上安装和配置ADFS Web应用程序代理(WAP)服务器
- 首先在ADFS代理服务器上添加指向ADFS服务域名的主机文件条目
- 现在,使用下面的PowerShell cmdlet启用Web应用程序代理功能: Install-WindowsFeature Web-Application-Proxy –IncludeManagementTools
- 在PowerShell cmdlet下面配置Web应用程序代理。
- Install-WebApplicationProxy -FederationServiceName “sts.test.in” –
将Web应用程序发布到ADFS WAP
一旦配置了Web应用程序代理,我们需要将公共Web应用程序代理。到目前为止,我的ADFS代理中没有任何Web应用程序发布。
- 打开远程访问管理控制台,然后导航到Web应用程序代理,单击“Publish”选项。
- 选择“ Active Directory Federation Service(AD FS)”作为预身份验证方法。
- 选择“ Web and MSOFBA”,然后单击“ Next”按钮继续。
- 选择我们在ADFS配置过程中最初已经配置的ADFS依赖方
- 提供外部URL和后端服务器URL,两个URL相同。 https://sts.test.in
- 点击“Publish”按钮以最终发布该应用程序。
IIS中的ADFS URL绑定
由于我们还将从公共网络访问ADFS SSO URL,因此我们需要将其绑定为ADFS代理服务器上IIS中的HTTPS站点
在IIS中为SSO URL配置URL重写和应用程序请求路由
此配置将帮助我们缩短ADFS SSO URL,因为此刻如果我们需要通过RelayState URL登录以连接到AWS AppStream 2.0,并且由于RelayState URL的复杂性,我们将不记得它了。因此,我们将在IIS中配置URL重写和应用程序请求路由,以缩短SSO URL。请参考以下步骤进行此配置。
注意:您需要在IIS中手动下载并安装URL Rewrite和ARR模块才能实现此目的。这在默认的IIS安装中不可用。
- 打开IIS管理器控制台,然后转到“应用程序请求路由缓存”
- 在右窗格中,单击“Server Proxy Settings”以继续
- 单击“Enable Proxy”,然后按照以下屏幕截图配置设置
- 现在再次回到IIS家庭控制台,单击“ URL Rewrite”
- 现在单击“Add Rules”,然后从“Rules Template”模板中选择“Blank Rule”
- 现在提供所需的入站规则名称,将名称指定为“ redirecttorelaystate”
- 在Pattern中提及”.*”
- 并在“Rewrite URL”框中提供relayState URL (relay state URL地址参考上一步的提供),然后在“Action Type”中选择“Rewrite”. 选择 “Append query string”
从外部/公共网络测试AWS AppStream 2.0 SSO单点登录
现在,我们已经完成了ADFS和IIS方面的所有必需配置,并且我们准备使用htts://sts.test.in从外部网络测试我们的SSO,而不是使用复杂的RelayState URL进行访问。