授予使用者將角色傳遞至 AWS 服務的許可 - AWS Identity and Access Management

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

授予使用者將角色傳遞至 AWS 服務的許可

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

若要將角色 (和其許可) 傳遞至 AWS 服務,使用者必須具有「傳遞角色」至服務的許可。這可幫助管理員確定只有核准的使用者可以透過授予許可的角色來設定服務。為了讓使用者將角色傳遞至 AWS 服務,您必須將 PassRole 許可授予使用者的 IAM 使用者、角色或群組。

警告
  • 您僅能使用 PassRole 許可將 IAM 角色傳遞給共用相同 AWS 帳戶的服務。若要將帳戶 A 中的角色傳遞給帳戶 B 中的服務,您必須先在帳戶 B 中建立可從帳戶 A 擔任該角色的 IAM 角色,接著帳戶 B 中的角色才可以傳遞至該服務。如需詳細資訊,請參閱 IAM 中的跨帳戶資源存取

  • 請勿嘗試透過標記角色,然後使用政策中的 ResourceTag 條件金鑰搭配 iam:PassRole 動作來控制誰可以傳遞角色。這種方法所產生的結果並不可靠。

設定PassRole權限時,您應確定使用者未傳遞角色所擁有的權限超過您希望使用者擁有的角色。例如,愛麗絲可能不被允許執行任何 Amazon S3 動作。如果愛麗絲可以將角色傳遞給允許 Amazon S3 動作的服務,則該服務可以在執行任務時代表愛麗絲執行 Amazon S3 動作。

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

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

您可以在 JSON 政策中使用 Condition 元素來測試包含在所有 AWS 請求請求內容中的鍵值。若要進一步了解如何在政策中使用條件索引鍵,請參閱 IAM JSON 政策元素:Conditioniam:PassedToService 條件索引鍵可用來指定能傳遞角色之服務的服務主體。若要進一步了解如何在政策中使用iam:PassedToService條件金鑰,請參閱 iam: PassedToService

範例 1

假設您想要授予使用者在啟動執行個體時,能夠將任何已核准的一組角色傳遞到 Amazon EC2 服務。您需要三種元素:

  • 連接到角色的 IAM 許可政策,其決定角色可以做什麼。將許可侷限在角色必須執行的動作,以及角色針對那些動作所需的資源。您可以使用 AWS 受管或客戶建立的 IAM 許可政策。

    { "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 使用角色和連接到該角色的許可。

    { "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- 的角色:

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

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

範例 2

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

為 Amazon RDS 增強型監控建立角色
  1. 登入 AWS Management Console,並開啟位於 https://console.aws.amazon.com/iam/ 的 IAM 主控台。

  2. 選擇 Roles (角色),然後選擇 Create role (建立角色)

  3. 選擇 AWS Service ( 服務) 角色類型,然後在 Use cases for other AWS 服務 (其他的使用案例) 下,選擇 RDS 服務。選擇 RDS – Enhanced Monitoring (RDS – 增強型監控),然後選擇 Next (下一步)。

  4. 選擇亞馬遜 RDS EnhancedMonitoringRole 權限策略

  5. 選擇下一步

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

  7. (選用) 在 Description (說明) 中,輸入新角色的說明。

  8. (選用) 藉由連接標籤作為鍵值對,將中繼資料新增至使用者。如需有關在 IAM 中使用標籤的詳細資訊,請參閱 標記 IAM 資源

  9. 檢閱角色,然後選擇 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-*"

AWS CloudTrail 日誌中的 iam:PassRole 動作

PassRole不是一個 API 調用。 PassRole是一個權限,這意味著不會為 IAM 生成 CloudTrail 日誌PassRole。若要檢閱傳送到哪AWS 服務些角色 CloudTrail,您必須檢閱建立或修改接收該角色之AWS資源的 CloudTrail 記錄檔。例如,角色會在建立時被傳遞到 AWS Lambda 函數。CreateFunction 動作的日誌顯示有關被傳遞到函數之角色的記錄。