如何使用 MFA 字符透過 AWS CLI 驗證對 AWS 資源的存取權?
我想要使用 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)。
- 所有 IAM 使用者都必須擁有足夠的許可,才能建立、檢視和停用指派給其使用者的 MFA 裝置。他們還必須開啟 MDA 裝置並指派給其使用者,才能開始執行。
- 如果您在執行 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 資料夾中的憑證檔案,以新增設定檔組態,進而簽發經 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 呼叫時,是否使用了正確的憑證。這可以透過使用 GetCallerIdentity 命令來完成。
$ aws s3 ls --profile mfa
您還可以使用 IAM 政策中的 aws:MultiFactorAuthPresent 或 aws:MultiFactorAuthAge 條件,要求使用者透過 MFA 進行身分驗證才能執行特定 API 動作。
相關資訊
相關內容
- 已提問 1 年前lg...
- 已提問 9 個月前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前