建立角色以將許可委派給 AWS 服務 - AWS Identity and Access Management

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

建立角色以將許可委派給 AWS 服務

許多 AWS 服務需要您使用角色,讓服務代表您存取其他服務的資源。服務會擔任代您執行動作的角色稱為服務角色。當角色做為服務的專業用途時,它被歸類為 EC2 執行個體的服務角色 (舉例來說) 或服務連結角色。若要查看使用服務連結的角色支援哪些服務,或者服務是否支援任何形式的臨時憑證的詳細資訊,請參閱 AWS 與 IAM 搭配使用的服務。若要了解個別服務如何使用角色,請在表格中選擇服務名稱以查看該服務的文件。

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

如需有關角色如何協助您委派許可的詳細資訊,請參閱 角色術語和概念

服務角色許可

您必須設定許可,允許 IAM 實體 (使用者或角色) 建立或編輯服務角色。

注意

服務連結角色的 ARN 包括服務主體,這在下列政策中以 SERVICE-NAME.amazonaws.com 形式指出。不要嘗試猜測服務主體,因為它是區分大小寫,且格式可以因各 AWS 服務而異。若要檢視服務的服務主體,請參閱該服務連結的角色文件。

允許 IAM 實體建立特定服務角色

將下列政策新增至需要建立服務角色的 IAM 實體。此政策可讓您建立所指定服務且具有特定名稱的服務角色。然後,您可以將受管或內嵌政策連接至該角色。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:CreateRole", "iam:PutRolePolicy" ], "Resource": "arn:aws:iam::*:role/SERVICE-ROLE-NAME" } ] }

允許 IAM 實體建立任何服務角色

AWS 建議您只允許系統管理使用者建立任何服務角色。具有建立角色和連接任何政策之許可的人員可以提升自己的許可。反之,建立一個政策,讓他們只建立所需的角色,或讓系統管理員代表他們建立服務角色。

若要附加可讓系統管理員存取您的整個原則AWS 帳戶,請使用AdministratorAccessAWS受管理的原則。

允許 IAM 實體編輯服務角色

將下列政策新增至需要編輯服務角色的 IAM 實體。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EditSpecificServiceRole", "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:DeleteRolePolicy", "iam:DetachRolePolicy", "iam:GetRole", "iam:GetRolePolicy", "iam:ListAttachedRolePolicies", "iam:ListRolePolicies", "iam:PutRolePolicy", "iam:UpdateRole", "iam:UpdateRoleDescription" ], "Resource": "arn:aws:iam::*:role/SERVICE-ROLE-NAME" }, { "Sid": "ViewRolesAndPolicies", "Effect": "Allow", "Action": [ "iam:GetPolicy", "iam:ListRoles" ], "Resource": "*" } ] }

允許 IAM 實體刪除特定服務角色

將下列陳述式新增至需要刪除所指定服務角色之 IAM 實體的許可政策。

{ "Effect": "Allow", "Action": "iam:DeleteRole", "Resource": "arn:aws:iam::*:role/SERVICE-ROLE-NAME" }

允許 IAM 實體刪除任何服務角色

AWS 建議您只允許系統管理使用者刪除任何服務角色。反之,建立一個政策,只允許他們刪除所需的角色,或讓系統管理員代表他們刪除服務角色。

若要附加可讓系統管理員存取您的整個原則AWS 帳戶,請使用AdministratorAccessAWS受管理的原則。

為 AWS 服務建立角色 (主控台)

您可以使用 AWS Management Console 為服務建立角色。因為有些服務支援多個服務角色,所以請參閱服務的 AWS 文件,以查看要選擇的使用案例。您可以了解如何為角色指派必要的信任和許可政策,以便服務可以代表您擔任角色。您用來控制角色的許可的步驟可能有所不同,端視服務如何定義使用案例,以及是否建立服務連結的角色而定。

建立 AWS 服務 的角色 (IAM 主控台)
  1. 登入 AWS Management Console,並開啟位於 https://console.aws.amazon.com/iam/ 的 IAM 主控台。

  2. 在 IAM 主控台的導覽窗格中,選擇 Roles (角色),然後選擇 Create role (建立角色)。

  3. 對於 Trusted entity type (信任的實體類型),請選擇 AWS 服務

  4. 對於服務或使用案例,請選擇服務,然後選擇使用案例。服務會定義使用案例,以包含服務所需的信任政策。

  5. 選擇下一步

  6. 對於權限原則,選項取決於您選取的使用案例:

    • 如果服務定義了角色的權限,您就無法選取權限原則。

    • 從一組有限的權限原則中進行選取。

    • 從所有權限原則中選取。

    • 選取 [無權限原則],建立角色後建立原則,然後將原則附加至角色。

  7. (選用) 設定許可界限。這是進階功能,可用於服務角色,而不是服務連結的角色。

    1. 開啟 [設定權限界限] 區段,然後選擇 [使用權限界限] 控制最大角色權限

      IAM 在您的帳戶中包含受AWS管政策和客戶管理政策的清單。

    2. 選取用於許可界限的政策。

  8. 選擇下一步

  9. 對於角色名稱,選項取決於服務:

    • 如果服務定義了角色名稱,您就無法編輯角色名稱。

    • 如果服務定義了角色名稱的前置詞,您可以輸入選擇性的尾碼。

    • 如果服務未定義角色名稱,您可以命名角色。

      重要

      命名角色時,請注意下列事項:

      • 角色名稱在您的內部必須是唯一的AWS 帳戶,並且不能根據大小寫使用唯一。

        例如,請勿建立同時命名為PRODROLE和的角色prodrole。當角色名稱用於策略中或作為 ARN 的一部分時,角色名稱會區分大小寫,但是當主控台中的客戶 (例如在登入程序期間) 顯示角色名稱時,角色名稱不區分大小寫。

      • 您無法在建立角色之後編輯該角色的名稱,因為其他實體可能會參照該角色。

  10. (選擇性) 在說明中,輸入角色的說明。

  11. (選擇性) 若要編輯角色的使用案例和權限,請在步驟 1:選取信任的實體步驟 2:新增權限區段中,選擇編輯

  12. (選擇性) 若要協助識別、組織或搜尋角色,請將標籤新增為鍵值配對。如需有關在 IAM 中使用標籤的詳細資訊,請參閱《IAM 使用者指南》中的標記 IAM 資源

  13. 檢閱角色,然後選擇 Create role (建立角色)。

為服務建立角色 (AWS CLI)

從 AWS CLI 建立角色包含多個步驟。當您使用主控台建立角色時,有許多步驟會自動為您完成,但是使用 AWS CLI 的話,您必須自行明確執行每個步驟。您必須建立角色,然後為該角色指派許可政策。如果您使用的服務是 Amazon EC2,則還必須建立執行個體描述檔並新增該角色。或者,您也可以設定角色的許可界限

從 AWS 為 AWS CLI 服務建立角色
  1. 以下 create-role 命令會建立名為 Test-Role 的角色,並將信任政策連接至該角色:

    aws iam create-role --role-name Test-Role --assume-role-policy-document file://Test-Role-Trust-Policy.json

  2. 將受管許可政策附加到角色:aws iam attach-role-policy

    例如,下列 attach-role-policy 命令會將名為 ReadOnlyAccess 的 AWS 受管政策連接至名為 ReadOnlyRole 的 IAM 角色:

    aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess --role-name ReadOnlyRole

    為角色建立內嵌許可政策:aws iam put-role-policy

    若要新增嵌許可政策,請參閱以下範例:

    aws iam put-role-policy --role-name Test-Role --policy-name ExamplePolicy --policy-document file://AdminPolicy.json

  3. (選用) 透過連接標籤來將自訂屬性新增至該角色:aws iam tag-role

    如需詳細資訊,請參閱 管理 IAM 角色的標籤 (AWS CLI 或 AWS API)

  4. (可選)設置角色的許可邊界aws iam put-role-permissions-boundary

    許可界限控制角色可以擁有的許可上限。許可界限是進階 AWS 功能。

如果要將角色與 Amazon EC2 或使用 Amazon EC2 的另一個 AWS 服務一起使用,則必須將該角色存放在執行個體描述檔中。執行個體描述檔是角色的容器,可以在啟動時連接到 Amazon EC2 執行個體。執行個體設定檔只能包含一個角色,並且無法增加該限制。如果使用 AWS Management Console 建立角色,則會為您建立與角色同名的執行個體設定檔。如需有關執行個體描述檔的詳細資訊,請參閱 使用執行個體設定檔。如需有關如何使用角色啟動 EC2 執行個體的資訊,請參閱《Amazon EC2 Linux 執行個體使用者指南》中的控制 Amazon EC2 資源的存取

建立執行個體設定檔並將角色存放在其中 (AWS CLI)
  1. 建立執行個體設定檔:aws iam create-instance-profile

  2. 將角色添加到實例配置文件:aws iam add-role-to-instance 配置文件

下方設定的 AWS CLI 範例命令會示範前兩個建立角色及連接許可的步驟。它還說明兩個建立執行個體設定檔和新增角色至描述檔的步驟。此範例信任允許 Amazon EC2 服務擔任角色並檢視 example_bucket Amazon S3 儲存貯體的政策。此範例也假定您在執行 Windows 的用戶端電腦上執行,並且已使用您的帳戶憑證和區域設定您的命令列界面。如需詳細資訊,請參閱設定 AWS Command Line Interface

當您建立角色時,這個範例在第一個命令包含下列信任政策。此信任政策允許 Amazon EC2 服務擔任該角色。

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

當您使用第二個命令的政策,您必須將許可政策連接到角色。以下範例許可政策允許角色僅在 example_bucket Amazon S3 儲存貯體上執行 ListBucket 動作。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::example_bucket" } }

若要建立此 Test-Role-for-EC2 角色,您必須先將之前的信任政策以名稱 trustpolicyforec2.json 和之前名為 permissionspolicyforec2.json 的許可政策儲存到您本機 policies 磁碟機的 C: 目錄。然後,您可以使用以下命令來建立角色、連接政策、建立執行個體設定檔,並新增角色到執行個體設定檔。

# Create the role and attach the trust policy that allows EC2 to assume this role. $ aws iam create-role --role-name Test-Role-for-EC2 --assume-role-policy-document file://C:\policies\trustpolicyforec2.json # Embed the permissions policy (in this example an inline policy) to the role to specify what it is allowed to do. $ aws iam put-role-policy --role-name Test-Role-for-EC2 --policy-name Permissions-Policy-For-Ec2 --policy-document file://C:\policies\permissionspolicyforec2.json # Create the instance profile required by EC2 to contain the role $ aws iam create-instance-profile --instance-profile-name EC2-ListBucket-S3 # Finally, add the role to the instance profile $ aws iam add-role-to-instance-profile --instance-profile-name EC2-ListBucket-S3 --role-name Test-Role-for-EC2

當您啟動 EC2 執行個體時,如果使用 AWS 主控台,則請在 Configure Instance Details (設定執行個體詳細資訊) 頁面中指定執行個體描述檔名稱。如果您使用 aws ec2 run-instances CLI 命令,指定 --iam-instance-profile 參數。

為服務建立角色 (AWS API)

從 AWS API 建立角色包含多個步驟。當您使用主控台建立角色時,有許多步驟會自動為您完成,但是使用 API 的話,您必須自行明確執行每個步驟。您必須建立角色,然後為該角色指派許可政策。如果您使用的服務是 Amazon EC2,則還必須建立執行個體描述檔並新增該角色。或者,您也可以設定角色的許可界限

為 AWS 服務建立角色 (AWS API)
  1. 建立角色:CreateRole

    對於角色的信任政策,您可以指定一個檔案位置。

  2. 將受管理的權限原則附加至角色:AttachRolePolicy

    建立角色的內嵌權限原則:PutRolePolicy

  3. (選擇性) 透過附加標籤將自訂屬性新增至使用者:TagRole

    如需詳細資訊,請參閱 管理 IAM 使用者的標籤 (AWS CLI 或 AWS API)

  4. (選擇性) 設定角色的權限範圍PutRolePermissionsBoundary

    許可界限控制角色可以擁有的許可上限。許可界限是進階 AWS 功能。

如果要將角色與 Amazon EC2 或使用 Amazon EC2 的另一個 AWS 服務一起使用,則必須將該角色存放在執行個體描述檔中。執行個體設定檔是角色的容器。每個執行個體設定檔只能包含一個角色,並且無法增加該限制。如果在 AWS Management Console 中建立角色,則會為您建立與角色同名的執行個體設定檔。如需有關執行個體設定檔的詳細資訊,請參閱 使用執行個體設定檔。如需有關如何使用角色啟動 Amazon EC2 執行個體的資訊,請參閱《Amazon EC2 Linux 執行個體使用者指南》中的控制 Amazon EC2 資源的存取

建立執行個體設定檔並將角色存放在其中 (AWS API)
  1. 建立執行個體設定檔:CreateInstanceProfile

  2. 將角色新增至執行個體設定檔:AddRoleToInstanceProfile