使用中的IAM角色 AWS CLI - AWS Command Line Interface

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

使用中的IAM角色 AWS CLI

AWS Identity and Access Management (IAM) 角色是一種授權工具,可讓使用者取得其他 (或不同) 權限,或取得在不同 AWS 帳戶中執行動作的權限。

必要條件

若要執行 iam 命令,您需要安裝和設定 AWS CLI。如需詳細資訊,請參閱 安裝或更新到最新版本的 AWS CLI

使用IAM角色概述

您可以透過為檔案中的IAM角色定義設定~/.aws/config檔,將 AWS Command Line Interface (AWS CLI) 配置為使用角色。

以下範例顯示名為 marketingadmin 的角色描述檔。如果使用執行命令 --profile marketingadmin (或使用 AWS_ PROFILE 環境變數指定),則 AWS CLI 會使用在個別設定檔中定義的登入資料user1來擔任具有 Amazon 資源名稱 (ARN) 的角色arn:aws:iam::123456789012:role/marketingadminrole。您可以執行指派給該角色的許可所允許的任何操作。

[profile marketingadmin] role_arn = arn:aws:iam::123456789012:role/marketingadminrole source_profile = user1

接著,您就可以指定 source_profile 來指向另一個具名描述檔,其中包含有許可使用此角色的使用者登入資料。在上述範例中,marketingadmin 描述檔使用 user1 描述檔中的憑證。當您指定要使用設定檔的 AWS CLI 命令時marketingadmin, AWS CLI 會自動查詢連結user1設定檔的認證,並使用它們來要求指定IAM角色的臨時認證。在背景中CLI使用 sts: AssumeRole 操作來完成此操作。然後,這些臨時憑證就會用來執行所要求的 AWS CLI 命令。指定的角色必須具有允許執行要求 AWS CLI 命令的附加IAM權限原則。

若要從 Amazon 彈性運算雲端 (AmazonEC2) 執行個體或 Amazon 彈性容器服務 (AmazonECS) 容器內執行 AWS CLI 命令,您可以使用連接至執行個體設定檔或容器的IAM角色。如果您未指定描述檔或未設定環境變數,則會直接使用該角色。這可讓您避免將長時間存留的存取金鑰存放在您的執行個體。您也可以使用這些執行個體或容器角色來僅取得另一個角色的憑證。若要這樣做,請使用 credential_source (而不是 source_profile) 以指定如何尋找憑證。credential_source 屬性支援下列數值:

  • Environment – 從環境變數擷取來源憑證。

  • Ec2InstanceMetadata— 使用附加到 Amazon EC2 執行個體設定檔的IAM角色。

  • EcsContainer— 使用附加到 Amazon ECS 容器的IAM角色。

下列範例顯示參考 Amazon EC2 執行個體設定檔所使用的相同marketingadminrole角色。

[profile marketingadmin] role_arn = arn:aws:iam::123456789012:role/marketingadminrole credential_source = Ec2InstanceMetadata

當您叫用角色時,您會有其他選項可以取得,例如使用多重要素驗證、外部 ID (由第三方公司用來存取其用戶端資源)。您也可以指定唯一的角色工作階段名稱,這些名稱可在 AWS CloudTrail 記錄檔中更容易稽核。

設定和使用角色

當您使用指定IAM角色的設定檔執行命令時, AWS CLI 會使用來源設定檔的認證呼叫 AWS Security Token Service (AWS STS) 並要求指定角色的臨時認證。來源描述檔中的使用者必須有許可針對指定的描述檔中的角色呼叫 sts:assume-role。此角色必須有信任關係而允許來源描述檔中的使用者使用該角色。針對角色來擷取並使用臨時憑證的過程就稱為擔任角色

您可以按照使用指南》中的〈建立角色以將權限委派給使用者〉中的程序,在中建立IAM具有您希望IAM使用者承擔的AWS Identity and Access Management 權限的角色。如果角色和來源描述檔的 使用者在同一帳戶中,則您可以在設定角色的信任關係時輸入自己的帳戶 ID。

建立角色後,修改信任關係以允許 使用者承擔此角色。

以下範例顯示可連接到角色的信任政策。此政策允許帳戶 (123456789012) 中的任何使用者擔任角色,但前提是該帳戶的管理員明確將 sts:AssumeRole 許可授予使用者。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": "sts:AssumeRole" } ] }

信任政策不會實際授予許可。帳戶的管理員必須連結含有適當許可的政策,才能將擔任角色的許可委派給個別使用者。以下範例顯示可連接到使用者的政策,該政策只允許使用者擔任 marketingadminrole 角色。如需有關授與使用者擔任角色的存取權限的詳細資訊,請參閱《使用者指南》中的 < 授與使IAM用者切換角色的權限 >。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::123456789012:role/marketingadminrole" } ] }

使用者不需要擁有其他權限即可使用角色設定檔執行 AWS CLI 命令。反之,執行命令所需的許可來自於連接到角色的許可。您可以將權限原則附加至角色,以指定可針對哪些 AWS 資源執行哪些動作。如需有關將權限附加至角色 (與使用者相同) 的詳細資訊,請參閱《使用者指南》中的〈變更IAM使用IAM者權限〉。

既然您已正確設定角色描述檔、角色許可、角色信任關係和使用者許可,您可以在命令列叫用 --profile 選項來使用該角色。例如,以下使用本主題開頭範例所定義的 marketingadmin 角色所連接的許可,呼叫 Amazon S3 ls 命令。

$ aws s3 ls --profile marketingadmin

若要使用多個呼叫的角色,可以從命令列為目前工作階段設定 AWS_PROFILE 環境變數。因為已定義環境變數,您不需要在每個命令中指定 --profile 選項。

Linux 或 macOS

$ export AWS_PROFILE=marketingadmin

Windows

C:\> setx AWS_PROFILE marketingadmin

如需有關設定使用者和角色的詳細資訊,請參閱《使用者指南》中的IAM身分識別 (使用者、使用IAM者群組和IAM角色) 和角色

使用多重要素驗證

為了提高安全性,您可以要求使用者在嘗試使用角色設定檔撥打電話時,提供從多重要素驗證 (MFA) 裝置、U2F 裝置或行動應用程式產生的一次性金鑰。

首先,您可以選擇修改要求之IAM角色的信任關係MFA。如此可防止任何人在未先使用驗證的情況下使MFA用角色。相關範例請參閱下列範例中的 Condition 行。此原則允許指定的使anika用者承擔原則所附加的角色,但前提是他們使用進行驗證MFA。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/anika" }, "Action": "sts:AssumeRole", "Condition": { "Bool": { "aws:multifactorAuthPresent": true } } } ] }

接下來,向指定用戶設備ARN的角色配MFA置文件添加一行。以下範例 config 檔案項目顯示兩個角色設定檔,都使用使用者 anika 的存取金鑰來請求角色 cli-role 的臨時登入資料。使用者 anika 具有擔任角色的許可,由角色的信任政策所授予。

[profile role-without-mfa] region = us-west-2 role_arn= arn:aws:iam::128716708097:role/cli-role source_profile=cli-user [profile role-with-mfa] region = us-west-2 role_arn= arn:aws:iam::128716708097:role/cli-role source_profile = cli-user mfa_serial = arn:aws:iam::128716708097:mfa/cli-user [profile cli-user] region = us-west-2 output = json

mfa_serial設定可以採用ARN硬體 MFA Token 的序號 (如圖所示)。

第一個設role-without-mfa定檔不需要MFA。但是,由於上一個範例附加至角色的信任原則需要MFA,因此使用此設定檔執行命令的任何嘗試都會失敗。

$ aws iam list-users --profile role-without-mfa An error occurred (AccessDenied) when calling the AssumeRole operation: Access denied

第二個設定檔項目role-with-mfa會識別要使用的MFA裝置。當使用者嘗試使用此設定檔執行 AWS CLI 命令時,會提 AWS CLI 示使用者輸入MFA裝置提供的一次性密碼 (OTP)。如果MFA驗證成功,命令會執行要求的作業。螢OTP幕上不會顯示。

$ aws iam list-users --profile role-with-mfa Enter MFA code for arn:aws:iam::123456789012:mfa/cli-user: { "Users": [ { ...

跨帳戶角色和外部 ID

您可以藉由將角色設定為跨帳戶角色,使 使用者能夠使用屬於不同帳戶的角色。在建立角色期間,請將角色類型設定為「其他 AWS 帳戶」,如建立角色以將權限委派給IAM使用者中所述。選擇性地選取「需要」MFA。MFAR@@ equ est 會在信任關係中設定適當的條件,如中所述。使用多重要素驗證

如果您使用外部 ID 以進一步控制誰可使用跨帳戶的角色,則您還必須將 external_id 參數新增至角色描述檔。這通常是在另一個帳戶由公司或組織外的某人控制時才使用。

[profile crossaccountrole] role_arn = arn:aws:iam::234567890123:role/SomeRole source_profile = default mfa_serial = arn:aws:iam::123456789012:mfa/saanvi external_id = 123456

指定角色工作階段名稱以更輕鬆地稽核

當多人共用一個角色時,稽核就更具挑戰。您想要將呼叫的每個操作與呼叫該動作的個人建立關聯。不過,當該個人使用某個角色時,個人擔任的角色會是與呼叫操作不同的動作,因此您必須手動將兩者建立關聯。

您可以在使用者擔任角色時指定唯一的角色工作階段名稱,藉此簡化此操作。您可以將 role_session_name 參數新增至指定角色的 config 檔案中的每個具名描述檔。role_session_name值會傳遞至AssumeRole作業,並成為角色工作ARN階段的一部分。它也包含在所有記 AWS CloudTrail 錄操作的日誌中。

例如,您可以建立以角色為基礎的設定檔,如下所示。

[profile namedsessionrole] role_arn = arn:aws:iam::234567890123:role/SomeRole source_profile = default role_session_name = Session_Maria_Garcia

這會導致角色會話具有以下內容ARN。

arn:aws:iam::234567890123:assumed-role/SomeRole/Session_Maria_Garcia

此外,所有 AWS CloudTrail 記錄檔都會在針對每項作業擷取的資訊中包含角色工作階段名稱。

擔任具有 Web 身分的角色

您可以設定設定檔,以指出 AWS CLI 應該使用網路身分聯合和開放 ID Connect (OIDC) 擔任角色。當您在配置文件中指定它時,會 AWS CLI 自動為您進行相應的 AWS STS AssumeRoleWithWebIdentity呼叫。

注意

當您指定使用IAM角色的設定檔時,會進行 AWS CLI 適當的呼叫以擷取暫時認證。這些憑證會儲存在 ~/.aws/cli/cache 中。指定相同設定檔的後續 AWS CLI 命令會使用快取的暫時認證,直到它們過期為止。此時, AWS CLI 會自動重新整理認證。

若要使用 Web 聯合身分擷取並使用臨時憑證,您可以在共用描述檔中指定以下組態值。

role_arn

指定要承擔ARN的角色。

web_identity_token_file

指定包含身分識別提供者所提供之 OAuth 2.0 存取權杖或 OpenID 權杖之檔案的路徑。 AWS CLI 會載入此檔案,並傳遞其內容作為 WebIdentityToken 操作的 AssumeRoleWithWebIdentity 引數。

role_session_name

指定套用到此擔任角色工作階段的選用名稱。

下列是擔任具有 Web 身分角色描述檔所需的最少量組態的組態範例。

# In ~/.aws/config [profile web-identity] role_arn=arn:aws:iam:123456789012:role/RoleNameToAssume web_identity_token_file=/path/to/a/token

您也可以使用 環境變數 提供此組態。

AWS_ROLE_ARN

要承擔ARN的角色。

AWS_WEB_IDENTITY_TOKEN_FILE

Web 身分字符檔案的路徑。

AWS_ROLE_SESSION_NAME

套用到此擔任角色工作階段的名稱。

注意

這些環境變數目前只適用於擔任具有 Web 身分提供者的角色。它們不適用於一般擔任角色供應商組態。

清除快取的憑證

當您使用角色時,會在本機 AWS CLI 快取暫存認證,直到它們過期為止。下次您嘗試使用它們時,會 AWS CLI 嘗試代表您續訂它們。

如果角色的臨時憑證被撤銷,則不會自動續約,而嘗試使用它們會失敗。不過,您可以刪除快取以強制擷 AWS CLI 取新認證。

Linux 或 macOS

$ rm -r ~/.aws/cli/cache

Windows

C:\> del /s /q %UserProfile%\.aws\cli\cache