

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

# 使用 IAM 执行角色访问 AWS 资源
<a name="custom-test-environments-iam-roles"></a>

 Device Farm 支持指定将在测试执行期间由自定义测试运行时环境担任的 IAM 角色。此功能允许您的测试安全地访问您账户中的 AWS 资源，例如 Amazon S3 存储桶、DynamoDB 表或您的应用程序所依赖的其他 AWS 服务。

**Topics**
+ [概述](#iam-execution-role-overview)
+ [IAM 角色要求](#iam-role-requirements)
+ [配置 IAM 执行角色](#configuring-iam-execution-role)
+ [最佳实践](#iam-role-best-practices)
+ [问题排查](#troubleshooting-iam-roles)

## 概述
<a name="iam-execution-role-overview"></a>

 当您指定 IAM 执行角色时，Device Farm 将在测试执行期间担任此角色，从而允许您的测试使用角色中定义的权限与 AWS 服务进行交互。

 IAM 执行角色的常见用例包括：
+ 访问存储在 Amazon S3 存储桶中的测试数据
+ 将测试项目推送到 Amazon S3 存储桶
+ 从 AWS 检索应用程序配置 AppConfig
+ 将测试日志和指标写入 Amazon CloudWatch
+ 向 Amazon SQS 队列发送测试结果或状态消息
+ 在测试工作流程中调用 AWS Lambda 函数

## IAM 角色要求
<a name="iam-role-requirements"></a>

 要在 Device Farm 中使用 IAM 执行角色，您的角色必须满足以下要求：
+ **信任关系**：必须信任 Device Farm 服务主体才能担任该角色。信任策略必须包含`devicefarm.amazonaws.com`为可信实体。
+ **权限**：该角色必须具有访问测试所需的 AWS 资源所需的必要权限。
+ **会话时长**：角色的最大会话持续时间必须至少等于您的 Device Farm 项目的作业超时设置。默认情况下，Device Farm 项目的作业超时时间为 150 分钟，因此您的角色必须支持至少 150 分钟的会话持续时间。
+ **相同的账户要求**：IAM 角色必须与用于调用 Device Farm 的角色位于相同的 AWS 账户中。不支持跨账户角色假设。
+ **PassRole 权限**：必须通过允许对指定执行角色执行`iam:PassRole`操作的策略授权调用方传递 IAM 角色。

### 示例信任策略
<a name="trust-policy-example"></a>

 以下示例显示了允许 Device Farm 担任您的执行角色的信任策略。此信任策略应仅附加到您打算在 Device Farm 中使用的特定 IAM 角色，而不应附加到您账户中的其他角色：

**Example**  

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

### 权限策略示例
<a name="permissions-policy-example"></a>

 以下示例显示了一个权限策略，该策略授予对测试中使用的常见 AWS 服务的访问权限：

**Example**  

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::my-test-bucket",
        "arn:aws:s3:::my-test-bucket/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "appconfig:GetConfiguration",
        "appconfig:StartConfigurationSession"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "arn:aws:logs:*:*:log-group:/devicefarm/test-*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "sqs:SendMessage",
        "sqs:GetQueueUrl"
      ],
      "Resource": "arn:aws:sqs:*:*:test-results-*"
    }
  ]
}
```

## 配置 IAM 执行角色
<a name="configuring-iam-execution-role"></a>

 您可以在项目级别或为单个测试运行指定 IAM 执行角色。在项目级别进行配置后，该项目中的所有运行都将继承执行角色。在运行时配置的执行角色将取代其父项目上配置的任何执行角色。

 有关配置执行角色的详细说明，请参阅：
+ [在 AWS Device Farm 中创建项目](how-to-create-project.md)-用于在项目级别配置执行角色
+ [在 Device Farm 中创建测试运行](how-to-create-test-run.md)-用于为单个运行配置执行角色

 您也可以使用 Device Farm API 配置执行角色。如需了解更多信息，请参阅 Dev [ice Farm API 参考](https://docs.aws.amazon.com/devicefarm/latest/APIReference/)。

## 最佳实践
<a name="iam-role-best-practices"></a>

 在为 Device Farm 测试配置 IAM 执行角色时，请遵循以下最佳实践：
+ **最低权限原则**：仅授予测试运行所需的最低权限。避免使用过于宽泛的权限，例如`*`操作或资源。
+ **使用特定资源的权限**：如果可能，请将权限限制为特定资源（例如特定的 S3 存储桶或 DynamoDB 表），而不是某一类型的所有资源。
+ **将测试资源和生产资源分开**：使用专用的测试资源和角色，以避免在测试期间意外影响生产系统。
+ **定期审查角色**：定期审查和更新您的执行角色，以确保他们仍然满足您的测试需求并遵循安全最佳实践。
+ **使用条件键**：考虑使用 IAM 条件键来进一步限制角色的使用时间和方式。

## 问题排查
<a name="troubleshooting-iam-roles"></a>

 如果您遇到与 IAM 执行角色有关的问题，请检查以下内容：
+ **信任关系**：验证角色的信任策略是否包含`devicefarm.amazonaws.com`为可信服务。
+ **权限**：检查该角色是否具有您的测试尝试访问的 AWS 服务的必要权限。
+ **测试日志**：查看测试执行日志，了解与 AWS API 调用或权限拒绝相关的特定错误消息。