如何使用 MFA 字符透過 AWS CLI 驗證對我的 AWS 資源的存取權?

上次更新日期: 2020 年 8 月 21 日

如何使用 MFA 字符透過 AWS Command Line Interface (AWS CLI) 驗證對我的 AWS 資源的存取權?

解決方案

最佳實務是使用多重要素驗證 (MFA) 裝置來保護您的帳戶及其資源。如果您計劃在使用 MFA 裝置時使用 AWS CLI 與您的資源進行交互,則您必須建立一個臨時會話。如果您使用的是 MFA 硬體裝置,則 ARN 值類似於 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 之前,已取消其設定。

unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset 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

您還可以要求使用者使用 MFA 進行身份驗證,以使用 IAM 政策中的 aws:MultiFactorAuthPresentaws:MultiFactorAuthAge 條件執行特定的 API 動作。


此文章是否有幫助?


您是否需要帳單或技術支援?