本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用中的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