

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

# 使用 IAM 角色向在应用程序流实例上 WorkSpaces 运行的应用程序和脚本授予权限
<a name="using-iam-roles-to-grant-permissions-to-applications-scripts-streaming-instances"></a>

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

您可以将 IAM 角色应用于 WorkSpaces 应用程序流式处理实例。当流实例切换到（代入）角色时，该角色提供临时安全凭证。您的应用程序或脚本使用这些凭据在流媒体实例上执行 API 操作和管理任务。 WorkSpaces 应用程序会为您管理临时凭证切换。

**Topics**
+ [将 IAM 角色与 WorkSpaces 应用程序流媒体实例配合使用的最佳实践](best-practices-for-using-iam-role-with-streaming-instances.md)
+ [配置现有 IAM 角色以用于 WorkSpaces 应用程序流式处理实例](configuring-existing-iam-role-to-use-with-streaming-instances.md)
+ [如何创建用于 WorkSpaces 应用程序流式处理实例的 IAM 角色](how-to-create-iam-role-to-use-with-streaming-instances.md)
+ [如何将 IAM 角色用于 WorkSpaces 应用程序流式处理实例](how-to-use-iam-role-with-streaming-instances.md)

# 将 IAM 角色与 WorkSpaces 应用程序流媒体实例配合使用的最佳实践
<a name="best-practices-for-using-iam-role-with-streaming-instances"></a>

当您将 IAM 角色用于 WorkSpaces 应用程序流式处理实例时，我们建议您遵循以下做法：
+ 限制您授予 AWS API 操作和资源的权限。

  在创建 IAM 策略并将其附加到与 WorkSpaces 应用程序流媒体实例关联的 IAM 角色时，请遵循最低权限原则。当您使用需要访问 AWS API 操作或资源的应用程序或脚本时，请确定所需的特定操作和资源。然后，创建允许应用程序或脚本仅执行这些操作的策略。有关更多信息，请参阅 *IAM 用户指南*中的[授予最低权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)。
+ 为每个 WorkSpaces 应用程序资源创建一个 IAM 角色。

  为每个 WorkSpaces 应用程序资源创建唯一的 IAM 角色是一种遵循最低权限原则的做法。这样做还允许您修改一个资源的权限，而不会影响其他资源。
+ 限制可以使用凭证的位置。

  通过 IAM 策略，您可以定义可使用 IAM 角色访问资源的条件。例如，您可以包含条件以指定请求可以来自的 IP 地址范围。这样做可以防止在您的环境之外使用凭证。有关更多信息，请参阅《IAM 用户指南》**中的[使用策略条件来增强安全性](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#use-policy-conditions)。

# 配置现有 IAM 角色以用于 WorkSpaces 应用程序流式处理实例
<a name="configuring-existing-iam-role-to-use-with-streaming-instances"></a>

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

**先决条件**

您要与 WorkSpaces 应用程序映像生成器或队列流式传输实例一起使用的 IAM 角色必须满足以下先决条件：
+ IAM 角色必须与 WorkSpaces 应用程序流媒体实例位于同一个 Amazon Web Services 账户中。
+ IAM 角色不能是服务角色。
+ 附加到 IAM 角色的信任关系策略必须包括 WorkSpaces 应用程序服务作为委托人。*委托*人是 AWS 可以执行操作和访问资源的实体。该策略还必须包括 `sts:AssumeRole` 操作。此策略配置将 WorkSpaces 应用程序定义为可信实体。

  
+ 如果您将 IAM 角色应用于映像生成器，则映像生成器必须运行 2019 年 9 月 3 日当天或之后发布的 WorkSpaces 应用程序代理版本。如果要将 IAM 角色应用于一个实例集，则该实例集必须使用一个映像，该映像使用在同一日期或之后发布的代理版本。有关更多信息，请参阅 [WorkSpaces 应用程序代理发行说明](agent-software-versions.md)。

**使 WorkSpaces 应用程序服务委托人能够代入现有 IAM 角色**

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

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**角色**。

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

1. 选择 **信任关系** 选项卡，然后选择 **编辑信任关系**。

1. 在**策略文档**下，验证信任关系策略是否包含 `appstream.amazonaws.com` 服务主体的 `sts:AssumeRole` 操作：

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": [
             "appstream.amazonaws.com"
           ]
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. 在编辑完信任策略后，请选择**更新信任策略**以保存所做更改。

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

# 如何创建用于 WorkSpaces 应用程序流式处理实例的 IAM 角色
<a name="how-to-create-iam-role-to-use-with-streaming-instances"></a>

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

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**角色**，然后选择**创建角色**。

1. 对于**Select type of trusted entity（选择受信任实体的类型）**，选择 **AWS service（服务）**。

1. 从 AWS 服务列表中选择 “**WorkSpaces 应用程序**”。

1. 在 **“选择您的用例”** 下，“**WorkSpaces WorkSpaces 应用程序-允许应用程序实例代表您调用 AWS 服务**” 已被选中。选择**下一步: 权限**。

1. 如果可能，选择要用作权限策略的策略，或选择 **Create policy**（创建策略）以打开新的浏览器选项卡并从头开始创建新策略。有关更多信息，请参阅《IAM 用户指南》**中[创建 IAM 策略（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)过程的步骤 4。

   在您创建策略后，关闭该选项卡并返回到您的原始选项卡。选中您希望 WorkSpaces 应用程序拥有的权限策略旁边的复选框。

1. （可选）设置权限边界。这是一项高级功能，可用于服务角色，但不可用于服务相关角色。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 实体的权限边界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)。

1. 选择**下一步：标签**。您可以选择附加标签作为键值对。有关更多信息，请参阅《IAM 用户指南》**中的[标记 IAM 用户和角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html)。

1. 选择**下一步：审核**。

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

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

1. 检查该角色，然后选择**创建角色**。

# 如何将 IAM 角色用于 WorkSpaces 应用程序流式处理实例
<a name="how-to-use-iam-role-with-streaming-instances"></a>

创建 IAM 角色后，可以在启动映像生成器或创建实例集时将其应用于映像生成器或实例集流实例。您也可以将 IAM 角色应用到现有实例集。有关在启动映像生成器时如何应用 IAM 角色的信息，请参阅[启动映像生成器来安装和配置流应用程序](tutorial-image-builder-create.md)。有关在创建实例集时如何应用 IAM 角色的信息，请参阅[在 Amazon WorkSpaces 应用程序中创建舰队](set-up-stacks-fleets-create.md)。

当您将 IAM 角色应用于映像生成器或队列流式传输实例时， WorkSpaces 应用程序会检索临时证书并在该实例上创建 **appstream\$1machine\$1role 凭证配置文件**。临时凭证有效期为 1 小时，每小时检索一次新凭证。以前的凭证不会过期，因此只要它们有效，您就可以使用它们。您可以使用您选择的语言使用 AWS 命令行界面 (CL AWS I)、 AWS 工具或 AWS SDK，以编程方式使用凭证配置文件来调用 AWS 服务。 PowerShell

当您进行 API 调用时，请将 **appstream\$1machine\$1role** 指定为凭证配置文件。否则，由于权限不足，操作将失败。

WorkSpaces 在预配置流式处理实例时，应用程序将扮演指定的角色。由于 WorkSpaces 应用程序使用连接到您的 VPC 的弹性网络接口进行 AWS API 调用，因此您的应用程序或脚本必须等待弹性网络接口可用后才能进行 AWS API 调用。如果在弹性网络接口可用之前进行 API 调用，则调用将失败。

以下示例演示如何使用 **appstream\$1machine\$1role** 凭证配置文件描述流实例（EC2 实例）和创建 Boto 客户端。Boto 是适用于 Python 的 Amazon Web Services（AWS）SDK。

**使用 AWS CLI 描述流式处理实例（EC2 实例）**

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

**使用以下 AWS 工具描述流式处理实例（EC2 实例） PowerShell**

您必须使用适用于 3.3.563.1 或更高 PowerShell 版本的 AWS 工具，以及适用于.NET 的 Amazon Web Services SDK 版本 3.3.103.22 或更高版本。[您可以从 PowerShell网站的 AWS 工具中下载适用于 Windows 的工具安装程序，其中包括适用于.NET 的 AWS 工具 PowerShell 和适用于.NET 的 Amazon Web Ser AWS vices SDK。](https://aws.amazon.com/powershell/)

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

**使用适用于 Python 的 AWS 软件开发工具包创建 Boto 客户端**

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