使用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 为您管理临时凭据切换。

在 AppStream 2.0 流媒体实例IAM中使用角色的最佳实践

当您在 AppStream 2.0 流媒体实例中使用IAM角色时,我们建议您遵循以下做法:

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

    在创建IAM策略并将其附加到与 AppStream 2.0 流媒体实例关联的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 流媒体实例位于同一个亚马逊 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. 在导航窗格中,选择角色

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

  4. 选择 信任关系 选项卡,然后选择 编辑信任关系

  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操作和管理任务的权限。

如何创建用于 AppStream 2.0 流媒体实例的IAM角色

本主题介绍如何创建新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 已选择 “ AppStream 2.0 — 允许 2.0 实例代表您调用 AWS 服务”。选择下一步: 权限

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

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

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

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

  9. 选择下一步:审核

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

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

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

如何在 AppStream 2.0 流媒体实例中使用该IAM角色

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

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

拨API打电话时,将 appstream_machine_role 指定为凭据配置文件。否则,由于权限不足,操作将失败。

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

以下示例展示了如何使用 appstream_machine_ role 凭据配置文件来描述流媒体实例(实EC2例)和创建 Boto 客户端。Boto 是适用于 Python 的亚马逊 Web Services (AWS) SDK。

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

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

使用以下 AWS 工具描述流式处理EC2实例(实例) PowerShell

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

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

使用 for Python 创建 Boto AWS SDK 客户端

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