如何使用 MFA 字符透過 AWS CLI 驗證對我的 AWS 資源的存取權?
上次更新日期:2022 年 8 月 1 日
如何使用 MFA 字符透過 AWS Command Line Interface (AWS CLI) 驗證對我的 AWS 資源的存取權?
解決方案
最佳實務是使用多重要素驗證 (MFA) 裝置來保護您的帳戶及其資源。如果您計劃在使用 MFA 裝置時使用 AWS CLI 與您的資源進行互動,則您必須建立一個臨時工作階段。如果您使用的是 MFA 硬體裝置,則該值類似於 GAHT12345678。如果您使用的是虛擬 MFA,則該值類似於 arn:aws:iam::123456789012:mfa/user。如需詳細資訊,請參閱檢查 MFA 狀態。
重要:
- 只有 AWS 管理主控台才支援安全金鑰。如需詳細資訊,請參閱啟用 FIDO 安全金鑰 (主控台)。 另一種方法是使用虛擬 MFA 裝置。如需詳細資訊,請參閱啟用和管理虛擬 MFA 裝置 (AWS CLI 或 AWS API)。
- 如果您在執行 AWS CLI 命令時收到錯誤訊息,請確認您使用的是最新版本的 AWS CLI。
執行 sts get-session-token AWS CLI 命令,用您的帳戶、資源和 MFA 裝置資訊取代相應變數:
$ aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code code-from-token
您會收到類似於以下內容的帶有臨時憑證和到期時間 (預設為 12 小時) 的輸出:
{
"Credentials": {
"SecretAccessKey": "secret-access-key",
"SessionToken": "temporary-session-token",
"Expiration": "expiration-date-time",
"AccessKeyId": "access-key-id"
}
}
注意:您可以使用 sts get-session-token 命令中的 --duration-seconds 選項指定持續時間 (以秒為單位),其中值的範圍可以從 900 秒 (15 分鐘) 到 129600 秒 (36 小時)。如果您使用根使用者憑證,則範圍為 900 秒 (15 分鐘) 到 3600 秒 (1 小時)。
使用具有環境變數的臨時憑證
您可以透過使用這些命令將其值匯出到環境變數來使用臨時憑證。
Linux:
export AWS_ACCESS_KEY_ID=example-access-key-as-in-previous-output
export AWS_SECRET_ACCESS_KEY=example-secret-access-key-as-in-previous-output
export AWS_SESSION_TOKEN=example-session-token-as-in-previous-output
Windows:
set AWS_ACCESS_KEY_ID=example-access-key-as-in-previous-output
set AWS_SECRET_ACCESS_KEY=example-secret-access-key-as-in-previous-output
set AWS_SESSION_TOKEN=example-session-Token-as-in-previous-output
如果您設定了環境變數,請確保在使用這些命令再次呼叫 get-session-token 之前取消設定。
Linux:
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset AWS_SESSION_TOKEN
Windows:
set AWS_ACCESS_KEY_ID=
set AWS_SECRET_ACCESS_KEY=
set AWS_SESSION_TOKEN=
使用具有命名設定檔的臨時憑證
[mfa]
aws_access_key_id = example-access-key-as-in-returned-output
aws_secret_access_key = example-secret-access-key-as-in-returned-output
aws_session_token = example-session-Token-as-in-returned-output
憑證到期後,再次執行 get-session-token 命令,然後將返回的值匯出到環境變數或設定檔組態。
提示:考慮在後台執行指令碼或 cron 作業,從 get-session-token 命令的輸出中檢查「過期」,然後提示重新進行身分驗證。
如果 AWS CLI 是使用 configure 命令設定的,則預設組態具有永久性 AWS Identity and Access Management (IAM) 使用者憑證。此 IAM 使用者可以使用不需要 MFA 身分驗證的命令。
組態範例:
.aws/credentials
[default]
aws_access_key_id = example-access-Key-for-an-IAM-user
aws_secret_access_key = example-secret-access-key-for-IAM-user
注意:您不能將 mfa_serial 參數與永久性 IAM 憑證一起使用。
如果您使用設定檔透過 AWS CLI 對命令進行身分驗證,請指定 --profile 選項和設定檔名稱,以驗證呼叫是否使用 MFA 進行身分驗證。
例如,此命令使用預設設定檔憑證並且未透過 MFA 進行身分驗證。
$ aws s3 ls
重要提示:請確保您了解憑證優先順序,以便您可以驗證在進行 API 呼叫時是否使用了正確的憑證。
$ aws s3 ls --profile mfa
您還可以使用 IAM 策略中的 aws:MultiFactorAuthPresent 或 aws:MultiFactorAuthAge 條件,要求使用者使用 MFA 進行身分驗證才能執行特定 API 動作。