授與使用者將角色傳遞給 AWS 服務的權限 - AWS 身分和存取權管理

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

授與使用者將角色傳遞給 AWS 服務的權限

若要設定許多 AWS 服務,您必須將IAM角色傳遞給服務。這樣可讓該服務擔任該角色,並代表您執行動作。對於大多數服務,您只需在設定期間將角色傳遞服務一次,該服務不需要每次都要擔任角色。例如,假設您的應用程式在 Amazon EC2 執行個體上執行。該應用程式需要暫時性憑證進行身分驗證,需要許可來授權應用程式在 AWS中執行動作。設定應用程式時,必須將角色傳遞給 AmazonEC2,才能與提供這些登入資料的執行個體搭配使用。您可以透過將IAM原則附加至角色,為執行個體上執行的應用程式定義權限。應用程式在每次需要時擔任該角色,並在角色允許下執行動作。

若要將角色 (及其權限) 傳遞給 AWS 服務,使用者必須擁有將角色傳遞給服務的權限。這可幫助管理員確定只有核准的使用者可以透過授予許可的角色來設定服務。若要允許使用者將角色傳遞給 AWS 服務,您必須將PassRole權限授與使用者的IAM使用者、角色或群組。

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

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

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

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

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

您可以使用JSON策略中的Condition元素來測試所有 AWS 請求的請求內容中包含的鍵值。若要進一步了解如何在政策中使用條件索引鍵,請參閱 IAMJSON政策元素: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 服務 (AmazonRDS) 支援稱為增強型監控的功能。此功能可讓 Amazon 使RDS用代理程式監控資料庫執行個體。它還允許 Amazon RDS 將指標記錄到 Amazon CloudWatch 日誌。若要啟用此功能,您必須建立服務角色,以授與 Amazon RDS 許可,以監控和將指標寫入日誌。

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

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

  3. 選擇 [AWS 服務] 角色類型,然後針對 [其他 AWS 服務使用案例] 選擇RDS服務。選擇 RDS— 增強型監控,然後選擇 [下一步]。

  4. 選擇 A mazonRDSEnhanced MonitoringRole 權限原則。

  5. 選擇 Next (下一步)

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

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

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

  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是一個權限,這意味著不 CloudTrail 會為 IAMPassRole. 若要檢閱傳遞給哪 AWS 服務 些角色 CloudTrail,您必須檢閱建立或修改接收該角色之 AWS 資源的 CloudTrail 記錄檔。例如,角色在建立 AWS Lambda 函數時會傳遞給函數。CreateFunction 動作的日誌顯示有關被傳遞到函數之角色的記錄。