跳至內容

如何使用 AWS CLI 配合 MFA 來驗證對 AWS 資源的存取權限?

2 分的閱讀內容
0

我想在 AWS Command Line Interface (AWS CLI) 中使用多重要素驗證 (MFA) 代碼來驗證我的 AWS 資源的存取權限。

簡短說明

您最多可以為每個 AWS Identity and Access Management (IAM) 使用者啟動八個 MFA 裝置。

注意: 根使用者的 MFA 啟用只會影響根使用者的憑證。AWS 帳戶中的每個 IAM 身分都有自己的 MFA 組態。

若要啟用 MFA,請參閱使用多重要素驗證 (MFA) 保護您的根使用者登入IAM 中的 AWS 多重要素驗證

解決方法

如果您在執行 AWS CLI 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

若要使用 AWS CLI 對 AWS 資源進行驗證,請使用 API 動作 GetSessionToken 來獲取臨時憑證。預設情況下,臨時憑證有效期為 12 小時。使用 duration-seconds 參數將臨時憑證的有效期限設定為 15 分鐘到 36 小時之間的任意時間。

**注意:**使用者需要適當的 IAM 權限才能使用 GetSessionToken。如需詳細資訊,請參閱如何針對使用 AWS 管理主控台和 AWS CLI 的 IAM 使用者強制執行 MFA 驗證?

MFA 裝置 ARN

若要取得 MFA 裝置的 Amazon 資源名稱 (ARN),請完成下列步驟:

  1. 開啟 IAM 主控台
  2. 在導覽窗格中,選擇 Users (使用者),然後選取您的 IAM 使用者。
  3. Summary (摘要) 頁面上,選擇 Security credentials (安全憑證) 索引標籤。
  4. Assigned MFA device (指定的 MFA 裝置) 中,複製 MFA 裝置的 ARN。

使用 AWS CLI 取得臨時憑證

運行 get-session-token 指令:

aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code code-from-token

範例輸出:

{    "Credentials": {  
        "SecretAccessKey": "secret-access-key",  
        "SessionToken": "temporary-session-token",  
        "Expiration": "expiration-date-time",  
        "AccessKeyId": "access-key-id"  
    }  
}

**重要:**確定 MFA 裝置的序號、權杖和 ARN 正確。如果不正確,那麼您可能會收到類似以下內容的錯誤訊息:

"An error occurred (AccessDenied) when calling the GetSessionToken operation: MultiFactorAuthentication failed, unable to validate MFA code.Please verify your MFA serial number is valid and associated with this user." (呼叫 GetSessionToken 作業時發生錯誤 (AccessDenied):多重要素驗證失敗,無法驗證 MFA 代碼。請確認您的 MFA 序號有效且與此使用者相關聯。)

若要驗證您的 MFA 硬體裝置,序號通常位於裝置背面,類似於 GAHT12345678。若要驗證您的 MFA 虛擬裝置,該值類似於 arn:aws:iam::123456789012:mfa/user

注意: AWS CLI 僅支援虛擬或硬體 MFA 裝置進行 MFA 驗證。AWS CLI 不支援使用 FIDO 安全金鑰的 MFA 驗證。

如需詳細資訊,請參閱 AWS CLI 或 AWS API 中的 MFA 裝置分配

使用臨時憑證將其值匯出至環境變數

針對您的作業系統 (OS) 執行下列指令:

Linux

export AWS_ACCESS_KEY_ID=example-access-key-as-in-previous-outputexport 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-outputset 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_IDunset 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]aws_access_key_id = example-access-key-as-in-returned-outputaws_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 指令輸出中檢查是否到期。如果 MFA 權杖已過期,請確定指令碼或 cron 工作提示重新驗證。

使用命名設定檔進行驗證時,請指定設定檔選項,後面接著設定檔名稱。這會驗證 API 呼叫是否使用 MFA 進行驗證。

相關資訊

如何重設丟失或損壞的 MFA 裝置以供我的 IAM 使用者或 AWS 帳戶根使用者使用?

如何針對使用 AWS 管理主控台和 AWS CLI 的 IAM 使用者強制執行 MFA 驗證?