设置 SAML - 亚马逊 AppStream 2.0

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

设置 SAML

要使用户能够使用其现有凭据登录 AppStream 2.0 并启动流式传输应用程序,您可以使用 SAML 2.0 设置联合身份验证。为此,请使用 IAM 角色和中继状态 URL 来配置符合 SAML 2.0 标准的身份提供商 (IdP),并启用 AWS 以允许您的联合用户访问 2.0 堆栈。 AppStream IAM 角色向用户授予对堆栈的访问权限。中继状态是在 AWS成功进行身份验证后将用户引导到的堆栈门户。

先决条件

请在配置您的 SAML 2.0 连接之前满足以下先决条件。

  1. 配置基于 SAML 的 IdP 以建立与 AWS的信任关系。

    • 在组织的网络内部配置身份存储,与基于 SAML 的 IdP 配合工作。有关配置资源的信息,请参阅 AppStream 2.0 与 SAML 2.0 集成

    • 使用基于 SAML 的 IdP 生成和下载联合身份元数据文档,该文档将您的组织作为 IdP 进行介绍。此签名 XML 文档用于建立信赖方信任关系。将该文件保存您稍后可通过 IAM 控制台访问的位置。

  2. 使用 AppStream 2.0 管理控制台创建 AppStream 2.0 堆栈。您需要使用堆栈名称来创建 IAM 策略和配置 IdP 与 AppStream 2.0 的集成,如本主题后面所述。

    您可以使用 AppStream 2.0 管理控制台或 AppStream 2.0 API 创建 AppStream 2.0 堆栈。 AWS CLI有关更多信息,请参阅 创建 AppStream 2.0 舰队和堆栈

步骤 1:在 IAM 中 AWS 创建 SAML 身份提供商

首先,在 IAM 中创建一个 SAML IdP AWS 。此 IdP 使用组织中 IdP 软件生成的元数据文档定义贵组织的 IdP AWS 信任关系。有关更多信息,请参阅《IAM 用户指南》中的创建和管理 SAML 身份提供商(Amazon Web Services 管理控制台)。有关在 AWS GovCloud (US) 各区域使用 SAML 的信息,请参阅《AWS GovCloud (US) 用户指南》 IdPs 中的 Ident AWS ity and Access Managem ent。

步骤 2:创建 SAML 2.0 联合身份验证 IAM 角色

接下来创建 SAML 2.0 联合身份验证 IAM 角色。此步骤在 IAM 与您的组织的 IdP 之间建立信任关系,将您的 IdP 作为可信实体进行联合身份验证。

为 SAML IdP 创建 IAM 角色
  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择 Roles(角色)和 Create role(创建角色)。

  3. 对于 Role type,选择 SAML 2.0 federation

  4. 对于 SAML Provider,选择您创建的 SAML IdP。

    重要

    请勿选择两个 SAML 2.0 访问方法(只允许编程访问允许编程访问和 Amazon Web Services 管理控制台访问)中的任何一个。

  5. 属性中,选择 SAML:aud

  6. 对于,请输入 https://signin.aws.amazon.com/saml。该值将角色访问权限仅局限于 SAML 用户的流式传输请求,其中包括值为 persistent 的 SAML 主题类型断言。如果 SAML:sub_type 为 persistent,在来自特定用户的所有 SAML 请求中,您的 IdP 会为 NameID 元素发送相同的唯一值。有关 SAML: sub_type 断言的更多信息,请参阅使用基于 SAML 的联合身份验证进行 API 访问中的 “在基于 SAML 的联合身份中唯一标识用户” 部分。 AWS

  7. 检查您的 SAML 2.0 信任信息,确认正确的可信实体和条件,然后选择 Next: Permissions

  8. Attach permissions policies (附加权限策略) 页面上,选择 Next: Tags (下一步:标签)

  9. (可选)为要添加的每个标签输入键和值。有关更多信息,请参阅标记 IAM 用户和角色

  10. 完成此操作后,选择 Next: Review (下一步:审核)。稍后您将为此角色创建并嵌入内联策略。

  11. 对于角色名称,输入有助于标识此角色作用的名称。由于多个实体可能引用该角色,因此,角色创建完毕后,您将无法编辑角色名称。

  12. (可选)对于角色描述,输入新角色的描述。

  13. 检查角色详细信息,然后选择 Create role

  14. (可选)如果您计划使用第三方 SAML 2.0 身份提供商或基于证书的身份验证来使用基于属性的应用程序授权,则必须将 sts: TagSession 权限添加到新 IAM 角色的信任策略中。有关更多信息,请参阅使用第三方 SAML 2.0 身份提供商的基于属性的应用程序授权在 AWS STS中传递会话标签

    在新 IAM 角色的详细信息中,选择信任关系选项卡,然后选择编辑信任关系。“编辑信任关系”策略编辑器启动。添加 sts: TagSession 权限,如下所示:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:saml-provider/IDENTITY-PROVIDER" }, "Action": [ "sts:AssumeRoleWithSAML", "sts:TagSession" ], "Condition": { "StringEquals": { "SAML:sub_type": "persistent" } } } ] }

    IDENTITY-PROVIDER 替换为您在步骤 1 中创建的 SAML IdP 的名称。然后选择更新信任策略

步骤 3:为 IAM 角色嵌入内联策略

接下来为您创建的角色嵌入内联 IAM 策略。嵌入内联策略时,策略中的权限不能意外分配给错误的主体实体。内联策略为联合用户提供访问您创建的 AppStream 2.0 堆栈的权限。

  1. 在您创建的 IAM 角色的详细信息中,选择权限选项卡,然后选择添加内联策略。“创建策略”向导将启动。

  2. Create policy (创建策略) 中,选择 JSON 选项卡。

  3. 将以下 JSON 策略复制并粘贴到 JSON 窗口中。然后,通过输入您的 AWS 区域 代码、账户 ID 和堆栈名称来修改资源。在以下策略中,"Action": "appstream:Stream"该操作向您的 AppStream 2.0 用户提供了在您创建的堆栈上连接到流媒体会话的权限。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "appstream:Stream", "Resource": "arn:aws:appstream:REGION-CODE:ACCOUNT-ID-WITHOUT-HYPHENS:stack/STACK-NAME", "Condition": { "StringEquals": { "appstream:userId": "${saml:sub}" } } } ] }

    REGION-CODE 替换为您的 AppStream 2.0 堆栈所在的 AWS 区域。用堆栈名称替换 STACK-NAMESTACK-NAME 区分大小写,并且必须与 2.0 管理控制台的 Stacks 控制面板中显示的堆栈名称完全匹配大小写和拼写。 AppStream

    对于 AWS GovCloud (US) 区域中的资源,请使用以下格式的 ARN:

    arn:aws-us-gov:appstream:REGION-CODE:ACCOUNT-ID-WITHOUT-HYPHENS:stack/STACK-NAME

  4. (可选)如果您计划使用的基于属性的应用程序授权将第三方 SAML 2.0 身份提供商与 SAML 2.0 多栈应用程序目录结合使用,则您的 IAM 角色内联策略中的资源必须是 "Resource": "arn:aws:appstream:REGION-CODE:ACCOUNT-ID-WITHOUT-HYPHENS:stack/*",以允许应用程序授权控制对堆栈的流式访问权限。要对堆栈资源实施额外保护,可以在策略中添加显式拒绝。有关更多信息,请参阅使用第三方 SAML 2.0 身份提供商的基于属性的应用程序授权策略评估逻辑

  5. 完成后,选择 Review policy (审核策略)策略验证程序将报告任何语法错误。

步骤 4:配置基于 SAML 的 IdP

接下来,根据您的基于 SAML 的 IdP,您可能需要手动更新您的 IdP,使其 AWS 成为值得信赖的服务提供商,方法是将文件上传到您的 IdP(位saml-metadata.xml于 https://signin.aws.amazon.com/static/saml-metadata.xml)到您的 IdP。此步骤会更新您的 IdP 的元数据。对于某些人来说 IdPs,更新可能已经配置好了。如果是这样,请继续下一步。

如果您的 IdP 中尚未配置此更新,请查看您的 IdP 提供的文档,了解有关如何更新元数据的信息。一些提供商为您提供了键入 URL 并由 IdP 获取并安装该文件的选项。另一些提供商则要求您从该 URL 处下载该文件,然后将其作为本地文件提供。

步骤 5:为 SAML 身份验证响应创建断言

接下来,您可能需要在其身份验证响应中将 IdP 发送到的信息配置 AWS 为 SAML 属性。根据您的 IdP,此信息可能已经预先配置好。如果是这样,请跳过此步骤并继续执行步骤 6,

如果您的 IdP 中尚未配置此信息,请提供以下内容:

  • SAML 主题 NameID – 登录用户的唯一标识符。

    注意

    对于包含已加入域的队列的堆栈,必须以 “” 使用 saM 或 domain\username “” 的格式提供用户的 nameID 值。AccountName username@domain.com userPrincipalName如果您使用的是 SaM AccountName 格式,则可以使用 NetBIOS 名称或完全限定域名 (FQDN) 来指定。domainActive Directory 单向信任场景需要 SaM AccountName 格式。有关更多信息,请参阅 在 AppStream 2.0 中使用活动目录

  • SAML 主题类型(值设为 persistent)– 将值设为 persistent 可确保在来自特定用户的所有 SAML 请求中,您的 IdP 会为 NameID 元素发送相同的唯一值。请确保您的 IAM 策略包含一个条件,仅允许 SAML sub_type 设置为 persistent 的 SAML 请求(如步骤 2:创建 SAML 2.0 联合身份验证 IAM 角色中所述)。

  • Name 属性设为 https://aws.amazon.com/SAML/Attributes/Role 的 Attribute 元素 – 此元素中包含一个或多个 AttributeValue 元素,列出您的 IdP 将用户映射到哪个 IAM 角色和 SAML IdP。角色和 IdP 指定为逗号分隔的 ARN 对。

  • AttributeName属性设置为 https://aws.amazon.com/SAML/Attributes/ 的元素 RoleSessionName — 此元素包含一个元素,该AttributeValue元素为为 SSO 颁发的 AWS 临时证书提供标识符。AttributeValue 元素中的值长度必须介于 2 到 64 个字符之间,只能包含字母数字字符、下划线和以下字符:+(加号)、=(等号)、,(逗号)、.(句点)、@(at 符)和 -(连字符)。它不能含有空格。该值通常为用户 ID (bobsmith) 或电子邮件地址 (bobsmith@example.com)。该值不应包含空格,如用户的显示名称 (Bob Smith)。

  • AttributeName属性设置为 https://aws.amazon.com/SAML/Attributes/ 的元素PrincipalTag:SessionContext(可选)— 此元素包含一个AttributeValue元素,该元素提供的参数可用于将会话上下文参数传递给您的流媒体应用程序。有关更多信息,请参阅 会话上下文

  • AttributeName属性设置为 https://aws.amazon.com/SAML/Attributes/ 的元素PrincipalTag:ObjectSid(可选)— 此元素包含一个为登录用户提供 Active Directory 安全标识符 (SID) 的AttributeValue元素。此参数与基于证书的身份验证一起使用,以启用到 Active Directory 用户的强映射。

  • AttributeName属性设置为 https://aws.amazon.com/SAML/Attributes/:Domain 的元素PrincipalTag(可选)— 此元素包含一个为登录用户提供 Active Directory DNS 完全限定域名 (FQDN) 的元素AttributeValue。当用户的 Active Directory userPrincipalName 包含备用后缀时,此参数用于基于证书的身份验证。必须以 domain.com 格式提供该值,包括所有子域名。

  • AttributeSessionDuration属性设置为 https://aws.amazon.com/SAML/Attributes/ 的元素SessionDuration(可选)— 此元素包含一个AttributeValue元素,用于指定在要求重新进行身份验证之前,用户的联合流媒体会话可以保持活动状态的最长时间。默认值为 60 分钟(3600 秒)。有关更多信息,请参阅为身份验证响应配置 SAML 断言中的 SessionDuration “属性设置为 https://aws.amazon.com/SAML/Attributes/ 的可选属性元素 SessionDuration” 部分。

    注意

    虽然 SessionDuration 是一个可选属性,但建议您将该属性包含在 SAML 响应中。如果您未指定此属性,则会话持续时间将设置为默认值 60 分钟。

    如果您的用户使用 AppStream 2.0 原生客户端或在新体验中使用 Web 浏览器访问其流媒体应用程序,则他们的会话将在会话持续时间到期后断开连接。 AppStream 如果您的用户在旧 AppStream版/经典版体验中使用网络浏览器访问其流媒体应用程序,则在用户的会话持续时间到期并刷新浏览器页面后,他们的会话将断开连接。

有关如何配置这些元素的更多信息,请参阅《IAM 用户指南》中的为身份验证响应配置 SAML 断言。有关 IdP 的具体配置要求信息,请参阅您的 IdP 提供的文档。

步骤 6:配置您的联合身份验证的中继状态

最后,使用您的 IdP 将联盟的中继状态配置为指向 AppStream 2.0 堆栈中继状态 URL。成功通过身份验证后 AWS,用户将被定向到 AppStream 2.0 堆栈门户,该门户被定义为 SAML 身份验证响应中的中继状态。

中继状态 URL 的格式如下所示:

https://relay-state-region-endpoint?stack=stackname&accountId=aws-account-id-without-hyphens

请根据以下信息构造您的中继状态 URL:您的 Amazon Web Services 账户 ID、堆栈名以及与堆栈所在区域关联的中继状态端点。

(可选)可以指定您希望自动启动的应用程序的名称。要查找应用程序名称,请在 AppStream 2.0 控制台中选择图像,选择 “应用程序” 选项卡,并记下 “应用程序名称” 列中显示的名称。或者,如果您尚未创建映像,请连接到已安装应用程序的映像生成器,然后打开 Image Assistant。应用程序名称显示在 Add Apps (添加新应用程序) 选项卡中。

如果您的实例集启用了桌面流视图,您也可以选择直接启动到操作系统桌面。为此,请在中继状态 URL 的末尾、&app= 后面指定 Desktop

使用身份提供商 (IdP) 启动的流程,在用户登录 IdP 并从 IdP 用户门户中选择 2.0 AppStream 应用程序后,他们将被重定向到浏览器中的 AppStream 2.0 登录页面,其中包含以下选项:

  • 继续使用浏览器

  • 打开 AppStream 2.0 客户端

在该页面上,用户可以选择在浏览器中启动会话,也可以选择使用 AppStream 2.0 客户端应用程序启动会话。或者,您也可以指定应使用哪个客户端进行 SAML 2.0 联合。为此,请在中继状态 URL 的web末尾指定其中一个native&client=。当参数出现在中继状态 URL 中时,相应的会话将自动在指定的客户端中启动,用户无需做出选择。

注意

仅当您使用新的中继状态区域端点(见下表 1)来构造中继状态 URL,并使用 AppStream 2.0 客户端版本 1.1.1300 及更高版本时,此功能才可用。

借助使用第三方 SAML 2.0 身份提供商的基于属性的应用程序授权,您可以允许从单个中继状态 URL 访问多个堆栈。从中继状态 URL 中移除堆栈和应用程序(如果存在)参数,如下所示:

https://relay-state-region-endpoint?accountId=aws-account-id-without-hyphens

当用户联合到 AppStream 2.0 应用程序目录时,他们将看到应用程序授权已将一个或多个应用程序与用户匹配的所有堆栈,这些堆栈的账户 ID 和中继状态端点与您的堆栈所在区域关联的中继状态端点。当用户选择目录时,应用程序授权将仅显示该用户有权使用的应用程序。

注意

用户不能同时从多个堆栈流式传输。

有关更多信息,请参阅 使用第三方 SAML 2.0 身份提供商的基于属性的应用程序授权

下表 1 列出了可用 AppStream 2.0 的区域的中继状态端点。表 1 中的中继状态端点与 Windows 客户端应用程序版本 1.1.1300 AppStream 2.0 Web 浏览器访问(版本 2) 及更高版本兼容。如果您使用的是较旧版本的 Windows 客户端,则应使用表 2 中列出的旧中继状态端点来配置 SAML 2.0 联合。如果您希望用户使用符合 FIPS 标准的连接进行流式传输,则必须使用符合 FIPS 标准的端点。有关 FIPS 端点的更多信息,请参阅 使用 FIPS 端点保护传输中的数据

表 1: AppStream 2.0 中继状态区域端点
区域 中继状态端点
美国东部(弗吉尼亚州北部)

https://appstream2.euc-sso.us-east-1.aws.amazon.com/saml

(FIPS) https://appstream2.euc-sso-fips.us-east-1.aws.amazon.com/saml

美国东部(俄亥俄州) https://appstream2.euc-sso.us-east-2.aws.amazon.com/saml
美国西部(俄勒冈州)

https://appstream2.euc-sso.us-west-2.aws.amazon.com/saml

(FIPS) https://appstream2.euc-sso-fips.us-west-2.aws.amazon.com/saml

亚太地区(孟买) https://appstream2.euc-sso.ap-south-1.aws.amazon.com/saml
亚太地区(首尔) https://appstream2.euc-sso.ap-northeast-2.aws.amazon.com/saml
亚太地区(新加坡) https://appstream2.euc-sso.ap-southeast-1.aws.amazon.com/saml
亚太地区(悉尼) https://appstream2.euc-sso.ap-southeast-2.aws.amazon.com/saml
亚太地区(东京) https://appstream2.euc-sso.ap-northeast-1.aws.amazon.com/saml

加拿大(中部)

https://appstream2.euc-sso.ca-central-1.aws.amazon.com/saml
欧洲地区(法兰克福) https://appstream2.euc-sso.eu-central-1.aws.amazon.com/saml
欧洲地区(爱尔兰) https://appstream2.euc-sso.eu-west-1.aws.amazon.com/saml
欧洲地区(伦敦) https://appstream2.euc-sso.eu-west-2.aws.amazon.com/saml
AWS GovCloud (美国东部)

https://appstream2.euc-sso.us-gov-east-1.amazonaws-us-gov.com/saml

(FIPS) https://appstream2.euc-sso-fips.us-gov-east-1.amazonaws-us-gov.com/saml

注意

有关在 AWS GovCloud (US) 区域中使用 AppStream 2.0 的更多信息,请参阅AWS GovCloud (US) 用户指南中的 Amazon AppStream 2.0

AWS GovCloud (美国西部)

https://appstream2.euc-sso.us-gov-west-1.amazonaws-us-gov.com/saml

(FIPS) https://appstream2.euc-sso-fips.us-gov-west-1.amazonaws-us-gov.com/saml

注意

有关在 AWS GovCloud (US) 区域中使用 AppStream 2.0 的更多信息,请参阅AWS GovCloud (US) 用户指南中的 Amazon AppStream 2.0

南美洲(圣保罗) https://appstream2.euc-sso.sa-east-1.aws.amazon.com/saml

下表 2 列出了仍然可用的旧中继状态端点。但是,建议您使用表 1 中列出的新的中继状态端点来配置 SAML 2.0 联合。特别是,借助新的中继状态端点,您可以让您的用户从 IDP 启动的流式传输会话中启动 AppStream 2.0 客户端应用程序(版本 1.1.1300 及更高版本)。表 1 中的新中继状态端点还允许用户在同一 Web 浏览器的不同选项卡中登录其他 AWS 应用程序,而不会影响正在进行的 AppStream 2.0 流式传输会话。表 2 中的旧中继状态端点不支持此功能。有关更多信息,请参阅 我的 AppStream 2.0 客户端用户每 60 分钟就会断开与 AppStream 2.0 会话的连接。

表 2:旧的 AppStream 2.0 中继状态区域终端节点
区域 中继状态端点
美国东部(弗吉尼亚州北部)

https://appstream2.us-east-1.aws.amazon.com/saml

(FIPS) https://appstream2-fips.us-east-1.aws.amazon.com/saml

美国东部(俄亥俄州) https://appstream2.us-east-2.aws.amazon.com/saml
美国西部(俄勒冈州)

https://appstream2.us-west-2.aws.amazon.com/saml

(FIPS) https://appstream2-fips.us-west-2.aws.amazon.com/saml

亚太地区(孟买) https://appstream2.ap-south-1.aws.amazon.com/saml
亚太地区(首尔) https://appstream2.ap-northeast-2.aws.amazon.com/saml
亚太地区(新加坡) https://appstream2.ap-southeast-1.aws.amazon.com/saml
亚太地区(悉尼) https://appstream2.ap-southeast-2.aws.amazon.com/saml
亚太地区(东京) https://appstream2.ap-northeast-1.aws.amazon.com/saml

加拿大(中部)

https://appstream2.ca-central-1.aws.amazon.com/saml
欧洲地区(法兰克福) https://appstream2.eu-central-1.aws.amazon.com/saml
欧洲地区(爱尔兰) https://appstream2.eu-west-1.aws.amazon.com/saml
欧洲地区(伦敦) https://appstream2.eu-west-2.aws.amazon.com/saml
AWS GovCloud (美国东部)

https://appstream2.us-gov-east-1.amazonaws-us-gov.com/saml

(FIPS) https://appstream2-fips.us-gov-east-1.amazonaws-us-gov.com/saml

注意

有关在 AWS GovCloud (US) 区域中使用 AppStream 2.0 的更多信息,请参阅AWS GovCloud (US) 用户指南中的 Amazon AppStream 2.0

AWS GovCloud (美国西部)

https://appstream2.us-gov-west-1.amazonaws-us-gov.com/saml

(FIPS) https://appstream2-fips.us-gov-west-1.amazonaws-us-gov.com/saml

注意

有关在 AWS GovCloud (US) 区域中使用 AppStream 2.0 的更多信息,请参阅AWS GovCloud (US) 用户指南中的 Amazon AppStream 2.0

南美洲(圣保罗) https://appstream2.sa-east-1.aws.amazon.com/saml

下表 3 列出了可用于构造中继状态 URL 的所有可用参数。

表 3:中继状态 URL 参数
参数 必需 格式 支持
accountId 必需 12 个字符 AWS 账户 的身份证 表 1 和表 2 中的新旧终端节点
堆栈 可选 堆栈名称 表 1 和表 2 中的新旧终端节点
应用程序 可选 应用程序名称或 “桌面” 表 1 和表 2 中的新旧终端节点
客户端 可选 “原生” 或 “网络” 仅表 1 中的新终端节点