亚马逊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.thinkwithwp.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.thinkwithwp.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

 

      • 添加以下值:
        • Claim rule name:  RoleSessionName
        • Attribute store:  Active Directory
        • LDAP Attribute:  E-Mail-Addresses
        • Outgoing Claim Type:  https://thinkwithwp.com/SAML/Attributes/RoleSessionName
    • 选择模板Send Claims Using a Custom Rule
      • 在创建此规则之前,您需要创建一个Active Directory安全组,并且此安全的名称应采用“ AWS-YOURAWSACCOUNTID-IAMROLENAME”格式。因此,如果AWS账户ID为123456789,联合的AWS IAM角色名称为ADFSSSO,则我的AD安全组名称将为“ AWS-123456789-ADFSSSO”。添加到此安全组的所有AD用户将能够使用ADFS SSO URL连接到AWS AppStream。
      • 添加以下值:
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://thinkwithwp.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
{
 “Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”
“Action”: “appstream:Stream”,
“Resource”: “arn:aws:appstream:us-east-1:123456789:stackAppStreamStack”,
“Condition”: {
StringEquals”: {
“appstream:userId”: “${saml:sub}”,
“saml:sub_type”: “persistent”
}
}
}
]
}

 

  • 提供策略名称”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进行访问。

 

本篇作者

徐欣蕾

Amazon Web Services公司专业服务团队WorkSpaces顾问。