如何使用 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 狀態

重要提示:

執行 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 資料夾中的憑證檔案,以新增設定檔組態,進而簽發經 MFA 身分驗證的命令。這是一個設定檔組態範例:

[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:MultiFactorAuthPresentaws:MultiFactorAuthAge 條件,要求使用者使用 MFA 進行身分驗證才能執行特定 API 動作。