使用 IAM 角色授予对在 AppStream 2.0 流实例上运行的应用程序和脚本的权限 - 亚马逊 AppStream 2.0

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

使用 IAM 角色授予对在 AppStream 2.0 流实例上运行的应用程序和脚本的权限

在 AppStream 2.0 流实例上运行的应用程序和脚本必须在其 AWS API 请求中包含 AWS 凭证。您可以创建一个 IAM 角色来管理这些凭证。IAM 角色指定可用于访问 AWS 资源的一组权限。但是,此角色并非与一个人唯一关联。相反,任何需要它的人都可以代入该角色。

您可以将 IAM 角色应用到 AppStream 2.0 流实例。当流实例切换到(代入)角色时,该角色提供临时安全凭证。您的应用程序或脚本使用这些凭证在流实例上执行 API 操作和管理任务。AppStream 2.0 为您管理临时凭证切换。

将 IAM 角色与 AppStream 2.0 流实例一起使用的最佳实践

当您将 IAM 角色与 AppStream 2.0 流实例一起使用时,我们建议您遵循以下做法:

  • 限制您对 AWS API 操作和资源授予的权限。

    在为与 AppStream 2.0 流实例关联的 IAM 角色创建策略并将其附加到 IAM 策略时,请遵循最低权限原则。使用需要访问 AWS API 操作或资源的应用程序或脚本时,请确定所需的特定操作和资源。然后,创建允许应用程序或脚本仅执行这些操作的策略。有关更多信息,请参阅 IAM 用户指南中的授予最低权限

  • 为每个 AppStream 2.0 资源创建 IAM 角色。

    为每个 AppStream 2.0 资源创建唯一的 IAM 角色是遵循最低权限原则的做法。这样做还允许您修改一个资源的权限,而不会影响其他资源。

  • 限制可以使用凭证的位置。

    通过 IAM 策略,您可以定义可使用 IAM 角色访问资源的条件。例如,您可以包含条件以指定请求可以来自的 IP 地址范围。这样做可以防止在您的环境之外使用凭证。有关更多信息,请参阅《IAM 用户指南》中的使用策略条件来增强安全性

配置现有 IAM 角色以与 AppStream 2.0 流实例一起使用

本主题介绍如何配置现有 IAM 角色,以便您可以将其与映像生成器和实例集流实例一起使用。

先决条件

要与 AppStream 2.0 映像生成器或实例集流实例一起使用的 IAM 角色必须满足以下先决条件:

  • IAM 角色必须与 AppStream 2.0 流实例位于同一个 Amazon Web Services 账户中。

  • IAM 角色不能是服务角色。

  • 附加到 IAM 角色的信任关系策略必须包含 AppStream 2.0 服务作为主体。主体 是 AWS 中可执行操作并访问资源的实体。该策略还必须包括 sts:AssumeRole 操作。此策略配置将 AppStream 2.0 定义为可信实体。

  • 如果要将 IAM 角色应用于映像生成器,则映像生成器必须运行在 2019 年 9 月 3 日或之后发布的 AppStream 2.0 代理版本 如果要将 IAM 角色应用于一个实例集,则该实例集必须使用一个映像,该映像使用在同一日期或之后发布的代理版本。有关更多信息,请参阅AppStream 2.0 代理发行说明

允许 AppStream 2.0 服务主体代入现有 IAM 角色

要执行以下步骤,您必须以具有列出和更新 IAM 角色所需权限的 IAM 用户身份登录账户。如果您没有所需的权限,则要求您的 Amazon Web Services 账户管理员在您的账户中执行这些步骤或授予您所需权限。

  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择 Roles(角色)。

  3. 在您的账户的角色列表中,选择要修改的角色的名称。

  4. 选择 Trust relationships (信任关系) 选项卡,然后选择 Edit trust relationship (编辑信任关系)

  5. 策略文档下,验证信任关系策略是否包含 appstream.amazonaws.com 服务主体的 sts:AssumeRole 操作:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "appstream.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
  6. 在编辑完信任策略后,请选择更新信任策略以保存所做更改。

  7. 您选择的 IAM 角色将显示在 AppStream 2.0 控制台中。此角色授予对应用程序和脚本的权限,以便在流实例上执行 API 操作和管理任务。

如何创建 IAM 角色以便用于 AppStream 2.0 流实例

本主题介绍了如何创建新 IAM 角色,以便用于映像生成器和实例集流实例。

  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择角色,然后选择创建角色

  3. 对于Select type of trusted entity(选择受信任实体的类型),选择 AWS service(服务)

  4. 从 AWS 服务列表中选择 AppStream 2.0

  5. 选择您的使用案例下,已选择 AppStream 2.0 - 允许 AppStream 2.0 实例代表您调用 AWS 服务。选择Next: Permissions(下一步: 权限)

  6. 如果可能,选择要用作权限策略的策略,或选择 Create policy(创建策略)以打开新的浏览器选项卡并从头开始创建新策略。有关更多信息,请参阅《IAM 用户指南》创建 IAM 策略(控制台)过程的步骤 4。

    在您创建策略后,关闭该选项卡并返回到您的原始选项卡。选中您希望 AppStream 2.0 具有的权限策略旁边的复选框。

  7. (可选)设置权限边界。这是一项高级特征,可用于服务角色,但不可用于服务相关角色。有关更多信息,请参阅《IAM 用户指南》中的 IAM 实体的权限边界

  8. 请选择下一步:标签。您可以选择附加标签作为键值对。有关更多信息,请参阅《IAM 用户指南》中的标记 IAM 用户和角色

  9. 选择 Next: Review(下一步: 审核)

  10. 对于角色名称,请键入在 Amazon Web Services 账户中唯一的角色名称。由于其他 AWS 资源可能会引用此角色,因此角色创建完毕后将无法编辑角色名称。

  11. 对于 Role description (角色描述),请保留默认角色描述或键入新角色描述。

  12. 检查该角色,然后选择创建角色

如何将 IAM 角色与 AppStream 2.0 流实例一起使用

创建 IAM 角色后,可以在启动映像生成器或创建实例集时将其应用于映像生成器或实例集流实例。您也可以将 IAM 角色应用到现有实例集。有关在启动映像生成器时如何应用 IAM 角色的信息,请参阅启动映像生成器来安装和配置流应用程序。有关在创建实例集时如何应用 IAM 角色的信息,请参阅创建实例集

当您将 IAM 角色应用于映像生成器或实例集流实例时,AppStream 2.0 会检索临时凭证并在该实例上创建 appstream_machine_role 凭证配置文件。临时凭证有效期为 1 小时,每小时检索一次新凭证。以前的凭证不会过期,因此只要它们有效,您就可以使用它们。您可以借助 AWS 命令行界面 (AWS CLI)、适用于 PowerShell 的 AWS 工具或采用您所选语言的 AWS SDK,使用凭证配置文件以编程方式调用 AWS 服务。

当您进行 API 调用时,请将 appstream_machine_role 指定为凭证配置文件。否则,由于权限不足,操作将失败。

在预置流实例时,AppStream 2.0 代入指定的角色。由于 AppStream 2.0 使用附加到您的 VPC 进行 AWS API 调用的弹性网络接口,因此您的应用程序或脚本必须等待弹性网络接口在进行 AWS API 调用之前可用。如果在弹性网络接口可用之前进行 API 调用,则调用将失败。

以下示例演示如何使用 appstream_machine_role 凭证配置文件描述流实例(EC2 实例)和创建 Boto 客户端。Boto 是适用于 Python 的 Amazon Web Services (AWS) SDK。

使用 AWS CLI 描述流实例(EC2 实例)

aws ec2 describe-instances --region us-east-1 --profile appstream_machine_role

使用适用于 PowerShell 的 AWS 工具描述流实例(EC2 实例)

您必须使用 3.3.563.1 或更高版本的适用于 PowerShell 的 AWS 工具,以及 3.3.103.22 或更高版本的适用于 .NET 的 Amazon Web Services SDK。您可以从适用于 PowerShell 的 AWS 工具网站下载适用于 Windows 的 AWS 工具安装程序,其中包括适用于 PowerShell 的 AWS 工具和适用于 .NET 的 Amazon Web Services SDK。

Get-EC2Instance -Region us-east-1 -ProfileName appstream_machine_role

使用适用于 Python 的 AWS SDK 创建 Boto 客户端

session = boto3.Session(profile_name='appstream_machine_role')