切換到 IAM 角色 (AWS CLI) - AWS Identity and Access Management

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

切換到 IAM 角色 (AWS CLI)

「角色」指定一組許可,您可以使用它來存取所需的 AWS 資源。從這個意義上說,類似於 AWS Identity and Access Management中的使用者 (IAM)。當您以使用者身分登入時,您將取得一組特定的許可。不過,您不登入角色,但以使用者身分登入後,就可以切換角色。這會暫時擱置了原始使用者許可,而不是為您提供指派給該角色的許可。該角色可以在您自己的帳戶或任何其他 AWS 帳戶中。如需有關角色、其優勢以及建立和設定方式的詳細資訊,請參閱 IAM 角色IAM 角色建立。要了解在擔任角色時使用的各種方法,請參閱 擔任角色的方法

重要

您的 IAM 使用者以及您擔任的任何角色的許可都不會累計。每次只有一組許可是作用中。當您擔任角色時,您會暫時放棄以前的使用者或角色許可,並使用指派給該角色的許可。當您退出角色後,您的使用者許可會自動恢復。

當您以 IAM 使用者身分登入時,您可以使用角色來執行 AWS CLI 命令。當您以已使用角色的外部身分驗證使用者 (SAMLOIDC) 登入時,您也可以使用角色來執行 AWS CLI 命令。此外,您可以使用角色從 Amazon EC2 執行個體執行 AWS CLI 命令,而該執行個體透過執行個體描述檔連接到角色。當您以 AWS 帳戶根使用者身分登入時,則無法擔任該角色。

角色鏈結 – 您也可以使用角色鏈結,以使用角色的許可來存取第二個角色。

在預設情況下,您的角色工作階段持續一小時。使用 assume-role* CLI 操作擔任此角色時,可以為 duration-seconds 參數指定值。此值的範圍可以從 900 秒 (15 分鐘) 到角色的最大工作階段持續時間設定的值。如果在主控台中切換角色,您工作階段的持續時間會限制為最多一小時。若要了解如何檢視角色的最大值,請參閱 更新角色的最大工作階段持續時間

如果使用角色鏈結時,則工作階段持續時間最多限制為一小時。如果您隨後使用 duration-seconds 參數提供大於一小時的值,則操作會失敗。

範例案例:切換到生產角色

假設您是在開發環境中工作的 IAM 使用者。在此情況下,您偶爾需要透過 AWS CLI 在命令列中使用生產環境。您已經有存取金鑰憑證組可供您使用。這可以是指派給標準 IAM 使用者的存取金鑰對。或者,如果您以 SAML 或 OIDC 聯合委託人身分登入,它可以是最初指派給您的角色的存取金鑰對。如果您目前的許可授予您擔任特定 IAM 角色的能力,則可以在 AWS CLI 組態檔案中的「設定檔」中識別該角色。然後使用指定 IAM 角色的許可來執行該命令,而不是原始身分。請注意,當您在 AWS CLI 命令中指定該設定檔時,您正在使用新角色。在這種情況下,您無法同時在開發帳戶中使用原始許可。原因是一次只有一組許可有效。

注意

基於安全考量,管理員可以檢閱 AWS CloudTrail 日誌,以了解在其中執行動作的人員 AWS。當您擔任角色時,系統管理員可能需要您指定來源身分或角色工作階段名稱 。如需詳細資訊,請參閱sts:SourceIdentitysts:RoleSessionName

切換到生產角色 (AWS CLI)
  1. 如果您從未使用 AWS CLI,則必須先設定預設的 CLI 設定檔。開啟命令提示字元並設定您的 AWS CLI 安裝,以使用來自 IAM 使用者或聯合角色的存取金鑰。如需詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的設定 AWS Command Line Interface

    執行 aws configure 命令,如下所示:

    aws configure

    當出現提示時,請提供下列資訊:

    AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY Default region name [None]: us-east-2 Default output format [None]: json
  2. 在 Unix 或 Linux .aws/config 檔案中,或在 Windows C:\Users\USERNAME\.aws\config 檔案中建立角色的新描述檔。下列範例會建立稱為 prodaccess 的描述檔,以切換到 ProductionAccessRole 帳戶中的角色 123456789012。您從建立角色的帳戶管理員處取得角色 ARN。叫用此設定檔時, AWS CLI 會使用 的登入資料source_profile來請求角色的登入資料。因此,做為 source_profile 參考的身分必須具有 sts:AssumeRole 中指定角色的 role_arn 許可。

    [profile prodaccess] role_arn = arn:aws:iam::123456789012:role/ProductionAccessRole source_profile = default
  3. 建立新設定檔之後,指定 參數的任何 AWS CLI 命令都會在連接到 IAM 角色的許可下--profile prodaccess執行,ProductionAccessRole而不是預設使用者。

    aws iam list-users --profile prodaccess

    如果指派給 ProductionAccessRole 的許可啟用列出目前 AWS 帳戶中的使用者,則此命令有效。

  4. 若要傳回原始憑證授予的許可,請執行不帶 --profile 參數的命令。會使用您在 中設定的預設設定檔中的登入資料 AWS CLI 還原至 步驟 1

如需詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的擔任角色

範例案例:允許執行個體描述檔角色來切換到另一個帳戶中的角色

假設您使用兩個 AWS 帳戶,並且您想要允許在 Amazon EC2 執行個體上執行的應用程式在兩個帳戶中執行AWS CLI命令。假設 EC2 執行個體存在於帳戶 111111111111。該執行個體包含 abcd 執行個體描述檔角色,該角色會允許應用程式在相同 111111111111 帳戶中對 amzn-s3-demo-bucket1 儲存貯體執行唯讀 Amazon S3 任務。不過,也必須允許應用程式擔任 efgh 跨帳戶角色來在帳戶 222222222222 中執行任務。若要執行此操作,abcd EC2 執行個體描述檔角色必須有以下許可政策:

帳戶 111111111111 abcd 角色許可政策

JSON
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccountLevelS3Actions", "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetAccountPublicAccessBlock", "s3:ListAccessPoints", "s3:ListAllMyBuckets" ], "Resource": "arn:aws:s3:::*" }, { "Sid": "AllowListAndReadS3ActionOnMyBucket", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1/*", "arn:aws:s3:::amzn-s3-demo-bucket1" ] }, { "Sid": "AllowIPToAssumeCrossAccountRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::222222222222:role/efgh" } ] }

假設 efgh 跨帳戶角色允許在相同 222222222222 帳戶中對 amzn-s3-demo-bucket2 儲存貯體的唯讀 Amazon S3 任務。若要執行此操作,efgh 跨帳戶角色必須有以下許可政策:

帳戶 222222222222 efgh 角色許可政策

JSON
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccountLevelS3Actions", "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetAccountPublicAccessBlock", "s3:ListAccessPoints", "s3:ListAllMyBuckets" ], "Resource": "arn:aws:s3:::*" }, { "Sid": "AllowListAndReadS3ActionOnMyBucket", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket2/*", "arn:aws:s3:::amzn-s3-demo-bucket2" ] } ] }

efgh 角色必須允許 abcd 執行個體設定檔角色擔任該角色。若要執行此操作,efgh 角色必須有以下信任政策:

帳戶 222222222222 efgh 角色信任政策

JSON
{ "Version": "2012-10-17", "Statement": [ { "Sid": "efghTrustPolicy", "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": {"AWS": "arn:aws:iam::111111111111:role/abcd"} } ] }

若要接著在帳戶 中執行 AWS CLI 命令222222222222,您必須更新 CLI 組態檔案。在 AWS CLI 組態檔案中,將 efgh 角色識別為「描述檔」且 abcd EC2 執行個體描述檔角色識別為「憑證來源」。然後,使用 efgh 角色 (而不是原始 abcd 角色) 的許可執行 CLI 命令。

注意

基於安全考量,您可以使用 AWS CloudTrail 來稽核帳戶中角色的使用。若要在 CloudTrail 日誌中的不同主體使用角色時區分角色工作階段,您可以使用角色工作階段名稱。當 依本主題所述代表使用者 AWS CLI 擔任角色時,角色工作階段名稱會自動建立為 AWS-CLI-session-nnnnnnnn。以下 nnnnnnnn 是整數,代表 Unix epoch 時間中的時間 (自 1970 年 1 月 1 日午夜 UTC 的秒數)。如需詳細資訊,請參閱《AWS CloudTrail 使用者指南》中的 CloudTrail 事件參考

讓 EC2 執行個體設定檔角色切換到跨帳戶角色 (AWS CLI)
  1. 您不需要設定預設 CLI 描述檔。您反而可以從 EC2 執行個體描述檔中繼資料載入憑證。在 .aws/config 檔案中為角色建立新的設定檔。下列範例會建立 instancecrossaccount 的描述檔,以切換到 efgh 帳戶中的角色 222222222222。呼叫此描述檔時, AWS CLI 會使用 EC2 執行個體描述檔中繼資料的憑證來請求角色的憑證。因此,EC2 執行個體設定檔角色必須具有在 sts:AssumeRole 中指定角色的 role_arn 許可。

    [profile instancecrossaccount] role_arn = arn:aws:iam::222222222222:role/efgh credential_source = Ec2InstanceMetadata
  2. 建立新設定檔之後,指定 參數的任何 AWS CLI 命令都會在連接到帳戶 中efgh角色的許可下--profile instancecrossaccount執行222222222222

    aws s3 ls amzn-s3-demo-bucket2 --profile instancecrossaccount

    如果指派給 efgh 角色的許可允許列出目前 AWS 帳戶中的使用者,則此命令有效。

  3. 若要在帳戶 111111111111 中返回原始 EC2 執行個體設定檔許可,在不使用 --profile 參數的情形下執行 CLI 命令。

如需詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的擔任角色