

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

# 授予使用者將角色傳遞至 AWS 服務的許可
<a name="id_roles_use_passrole"></a>

若要設定許多 AWS 服務，您必須將 IAM 角色*傳遞*給服務。這樣可讓該服務擔任該角色，並代表您執行動作。對於大多數服務，您只需在設定期間將角色傳遞服務一次，該服務不需要每次都要擔任角色。例如，假設您的應用程式正在 Amazon EC2 執行個體上執行。該應用程式需要暫時性憑證進行身分驗證，需要許可來授權應用程式在 AWS中執行動作。當設定應用程式時，您必須將角色傳遞到 Amazon EC2，與提供使些憑證的執行個體搭配使用。您為在執行個體上執行的應用程式定義許可，做法是將 IAM 政策連接到角色。應用程式在每次需要時擔任該角色，並在角色允許下執行動作。

若要將角色 （及其許可） 傳遞給 AWS 服務，使用者必須具有*將角色傳遞*給 服務的許可。這可幫助管理員確定只有核准的使用者可以透過授予許可的角色來設定服務。若要允許使用者將角色傳遞至 AWS 服務，您必須將 `PassRole` 許可授予使用者的 IAM 使用者、角色或群組。

**警告**  
您只能使用 `PassRole`許可將 IAM 角色傳遞至共用相同 AWS 帳戶的服務。若要將帳戶 A 中的角色傳遞給帳戶 B 中的服務，您必須先在帳戶 B 中建立可從帳戶 A 擔任該角色的 IAM 角色，接著帳戶 B 中的角色才可以傳遞至該服務。如需詳細資訊，請參閱[IAM 中的跨帳戶資源存取](access_policies-cross-account-resource-access.md)。
請勿嘗試透過標記角色，然後使用政策中的 `ResourceTag` 條件金鑰搭配 `iam:PassRole` 動作來控制誰可以傳遞角色。這種方法所產生的結果並不可靠。

設定 `PassRole` 許可時，您應確保使用者傳遞的角色不會具有比您希望使用者具有之許可更多的許可。例如，可能不允許 Alice 執行任何 Amazon S3 動作。如果 Alice 可以將角色傳遞給允許 Amazon S3 動作的服務，則該服務可以在執行任務時代表 Alice 執行 Amazon S3 動作。

當您指定服務連結角色時，您也必須擁有將該角色傳遞到服務的許可。有些服務會自動在您在該服務中執行動作時，在您的帳戶中建立服務連結角色。例如，Amazon EC2 Auto Scaling 會在您第一次建立 Auto Scaling 群組時，為您建立 `AWSServiceRoleForAutoScaling` 服務連結角色。如果您在建立 Auto Scaling 群組時，嘗試指定服務連結角色並且您沒有 `iam:PassRole` 許可，則會收到錯誤。如果您沒有明確指定角色，則不需要 `iam:PassRole` 許可，預設情況下，對該群組執行的所有操作都使用 `AWSServiceRoleForAutoScaling` 角色。若要了解哪些服務支援服務連結角色，請參閱 [AWS 使用 IAM 的 服務](reference_aws-services-that-work-with-iam.md)。若要了解哪些服務在您於服務中執行動作時會自動建立服務連結角色，請選擇 **Yes (是)** 連結，並檢視該服務的服務連結角色文件。

使用者可以在任何 API 操作中，以參數方式傳遞角色 ARN，而該操作便是使用角色將許可指派給服務。然後，該服務會檢查該使用者是否擁有 `iam:PassRole` 許可。若要限制使用者只傳遞核准的角色，您可以使用 IAM 政策陳述式的 `Resources` 元素來篩選 `iam:PassRole` 許可。

您可以使用 JSON 政策中的 `Condition`元素來測試包含在所有請求請求內容中的金鑰值 AWS 。若要進一步了解如何在政策中使用條件索引鍵，請參閱 [IAM JSON 政策元素：Condition](reference_policies_elements_condition.md)。`iam:PassedToService` 條件索引鍵可用來指定能傳遞角色之服務的服務主體。若要進一步了解如何在政策中使用 `iam:PassedToService` 條件金鑰，請參閱 [iam:PassedToService](reference_policies_iam-condition-keys.md#ck_PassedToService)。

**範例 1**  
假設您想要授予使用者在啟動執行個體時，能夠將任何已核准的一組角色傳遞到 Amazon EC2 服務。您需要三種元素：
+ 連接到角色的 IAM *許可政策*，其決定角色可以做什麼。將許可侷限在角色必須執行的動作，以及角色針對那些動作所需的資源。您可以使用 AWS 受管或客戶建立的 IAM 許可政策。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": {
          "Effect": "Allow",
          "Action": [ "{{A list of the permissions the role is allowed to use}}" ],
          "Resource": [ "{{A list of the resources the role is allowed to access}}" ]
      }
  }
  ```

------
+ 角色的「信任政策」**，其允許服務擔任角色。例如，您可以將以下信任政策連接到角色及 `UpdateAssumeRolePolicy` 動作。此信任政策可讓 Amazon EC2 使用角色和連接到該角色的許可。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": {
          "Sid": "TrustPolicyStatementThatAllowsEC2ServiceToAssumeTheAttachedRole",
          "Effect": "Allow",
          "Principal": { "Service": "ec2.amazonaws.com" },
         "Action": "sts:AssumeRole"
      }
  }
  ```

------
+ 連接到 IAM 使用者的 IAM *許可政策*，其允許使用者僅傳遞已核准的角色。通常是將 `iam:GetRole` 新增至 `iam:PassRole`，讓使用者可以取得要傳遞之角色的詳細資訊。在這個範例中，使用者可以僅傳遞存在於指定的帳戶，名稱開頭為 `EC2-roles-for-XYZ-` 的角色：

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "iam:GetRole",
                  "iam:PassRole"
              ],
              "Resource": "arn:aws:iam::{{111122223333}}:role/EC2-roles-for-XYZ-*"
          }
      ]
  }
  ```

------

現在，使用者可以使用已指派的角色來啟動 Amazon EC2 執行個體。在執行個體上執行的應用程式，可透過執行個體設定檔中繼資料來存取角色的暫時性憑證。連接到該角色的許可政策決定了執行個體可以執行哪些操作。

**範例 2**  
Amazon Relational Database Service (Amazon RDS) 支援**增強型監控**功能。此功能可讓 Amazon RDS 使用代理程式來監控資料庫執行個體。同時也允許 Amazon RDS 將指標記錄到 Amazon CloudWatch Logs。若要啟用此功能，您必須建立服務角色以提供 Amazon RDS 許可來監控和寫入指標到您的日誌。

**為 Amazon RDS 增強型監控建立角色**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 選擇 **Roles (角色)**，然後選擇 **Create role (建立角色)**。

1. 選擇**AWS 服務**角色類型，然後針對**其他 的使用案例 AWS 服務**，選擇 **RDS** 服務。選擇 **RDS – Enhanced Monitoring** (RDS – 增強型監控)，然後選擇 **Next** (下一步)。

1. 選擇 **AmazonRDSEnhancedMonitoringRole** 許可政策。

1. 選擇**下一步**。

1. 針對 **Role name** (角色名稱)，輸入可協助您識別此角色用途的角色名稱。角色名稱在您的 中必須是唯一的 AWS 帳戶。角色名稱用在政策中或作為 ARN 的一部分時，角色名稱區分大小寫。當主控台中的客戶顯示角色名稱時 (例如在登入程序期間)，角色名稱不區分大小寫。因為有各種實體可能會參考此角色，所以建立角色之後，您就無法編輯其名稱。

1. (選用) 在 **Description** (說明) 中，輸入新角色的說明。

1. (選用) 藉由連接標籤作為鍵值對，將中繼資料新增至使用者。如需有關在 IAM 中使用標籤的詳細資訊，請參閱 [AWS Identity and Access Management 資源的標籤](id_tags.md)。

1. 檢閱角色，然後選擇 **Create role** (建立角色)。

角色會自動取得信任政策，授予 `monitoring.rds.amazonaws.com` 服務許可以擔任角色。在那之後，Amazon RDS 可以執行 `AmazonRDSEnhancedMonitoringRole` 政策允許的所有動作。

您要存取增強型監控的使用者需要包含陳述式的政策，該陳述式允許使用者列出 RDS 角色，以及允許使用者傳遞角色的陳述式，如下所示。使用您的帳號並將角色名稱取代為您在步驟 6 提供的名稱。

```
    {
      "Sid": "PolicyStatementToAllowUserToListRoles",
      "Effect": "Allow",
      "Action": ["iam:ListRoles"],
      "Resource": "*"
    },
    {
        "Sid": "PolicyStatementToAllowUserToPassOneSpecificRole",
        "Effect": "Allow",
        "Action": [ "iam:PassRole" ],
        "Resource": "arn:aws:iam::{{account-id}}:role/{{RDS-Monitoring-Role}}"
    }
```

您可以將此陳述式與在另一個政策中的陳述式併在一起，或是將它放在它自己的政策中。若要改為指定使用者可以傳遞任何開頭為 `RDS-` 的角色，您可以將資源 ARN 中的角色名稱取代為萬用字元，如下所示。

```
        "Resource": "arn:aws:iam::{{account-id}}:role/RDS-*"
```

## `iam:PassRole` AWS CloudTrail 日誌中的 動作
<a name="id_roles_use_passrole_logs"></a>

 `PassRole` 不是 API 呼叫。`PassRole` 是一項許可，表示沒有為 IAM `PassRole` 產生 CloudTrail 日誌。若要檢閱在 CloudTrail AWS 服務 中傳遞哪些角色，您必須檢閱建立或修改接收角色之 AWS 資源的 CloudTrail 日誌。例如，角色會在建立時傳遞至 AWS Lambda 函數。`CreateFunction` 動作的日誌顯示有關被傳遞到函數之角色的記錄。