切換到IAM角色 (AWS CLI) - AWS 身分和存取權管理

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

切換到IAM角色 (AWS CLI)

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

重要

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

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

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

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

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

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

想像一下,您是在開發環境中工作的IAM用戶。在這個案例中,您偶爾需要使用指令行中的生產環境 AWS CLI。 您已經擁有可用的存取金鑰認證集。這可以是指派給標準IAM使用者的存取 key pair。或者,如果您以聯合身分使用者的身分登入,則它可以是最初指派給您的角色的存取金鑰對。如果您目前的權限授予您擔任特定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 指定參數的命令--profile prodaccess會在附加至IAM角色 (ProductionAccessRole而非預設使用者) 的權限下執行。

    aws iam list-users --profile prodaccess

    如果分配給 enable 的權限列出了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 中執行任務。若要這麼做,abcdEC2執行個體設定檔角色必須具有下列權限原則:

帳戶 111111111111 abcd 角色許可政策

{ "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 角色許可政策

{ "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 角色信任政策

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

然後運行 AWS CLI 帳戶中的命令222222222222,您必須更新CLI配置文件。將efgh角色識別為「設定檔」,並將abcdEC2執行個體設定檔角色識別為 AWS CLI 組態檔案。然後,您的CLI命令將以efgh角色的權限運行,而不是原始abcd角色。

注意

出於安全目的,您可以使用 AWS CloudTrail 審核帳戶中角色的使用情況。若要區分 CloudTrail 記錄中不同主參與者使用角色時的角色工作階段,您可以使用角色工作階段名稱。當 AWS CLI 假設代表使用者的角色,如本主題所述,角色工作階段名稱會自動建立為AWS-CLI-session-nnnnnnnn。這裡 nnnnnnnn 是一個整數,表示 Unix 紀元時間(自 1970 年 1 月 1 UTC 日午夜以來的秒數)。如需詳細資訊,請CloudTrail 參AWS 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. 若要返回帳戶中的原始EC2執行個體設定檔權限111111111111,請執行不含--profile參數的CLI命令。

如需詳細資訊,請參閱 AWS Command Line Interface 使用者指南