本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 中使用IAM角色 AWS CLI
AWS Identity and Access Management (IAM) 角色是一種授權工具,可讓使用者取得其他 (或不同的) 許可,或取得在不同 AWS 帳戶中執行動作的許可。
必要條件
若要執行 iam
命令,您需要安裝和設定 AWS CLI。如需詳細資訊,請參閱安裝或更新至最新版本的 AWS CLI。
使用IAM角色的概觀
您可以設定 AWS Command Line Interface (AWS CLI) 來使用IAM角色,方法是定義~/.aws/config
檔案中角色的設定檔。
以下範例顯示名為 marketingadmin
的角色描述檔。如果您使用 執行命令 --profile marketingadmin
(或使用AWS_PROFILE環境變數 指定命令), AWS CLI 會使用在個別設定檔中定義的憑證user1
來擔任具有 Amazon Resource Name (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 命令。指定的角色必須具有連接IAM許可政策,允許執行請求的 AWS CLI 命令。
若要從 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體或 Amazon Elastic Container Service (Amazon ECS) 容器內執行 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許可,在 中建立角色,方法是遵循 AWS Identity and Access Management 使用者指南 中的建立角色以將許可委派給IAM使用者。如果角色和來源描述檔的 使用者在同一帳戶中,則您可以在設定角色的信任關係時輸入自己的帳戶 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字符的序號。
第一個設定檔 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。要求MFA在信任關係中設定適當的條件,如 中所述使用多重要素驗證。
如果您使用外部 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 應該使用 Web 身分聯合和 Open 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 Connect ID 權杖。 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