

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 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 帳戶位於相同的 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 設定執行角色。如需詳細資訊，請參閱 [Device 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 呼叫或許可拒絕相關的特定錯誤訊息。