

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AWS IAM 中的多重要素驗證
<a name="id_credentials_mfa"></a>

為了提高安全性，我們建議您設定多重要素驗證 (MFA)，以協助保護您的 AWS 資源。您可以為 AWS 帳戶根使用者 啟用 MFA AWS 帳戶，包括獨立帳戶、管理帳戶和成員帳戶，以及您的 IAM 使用者。我們建議您盡可能使用網路釣魚防護 MFA，例如通行金鑰和安全金鑰。這些 FIDO 型驗證器使用公有金鑰密碼編譯，可抵禦網路釣魚、man-in-the-middle和重播攻擊，提供比 TOTP 型選項更強的安全性。

對於所有類型的帳戶，其根使用者均強制執行 MFA。如需詳細資訊，請參閱[保護 AWS Organizations 您的帳戶根使用者登入資料](root-user-best-practices.md#ru-bp-organizations)。

當您為根使用者啟用 MFA 時，它僅影響根使用者憑證。帳戶中的 IAM 使用者都有自己憑證的不同身分，並且每個身分都有自己的 MFA 組態。如需有關使用 MFA 保護根使用者的詳細資訊，請參閱[的多重要素驗證 AWS 帳戶根使用者](enable-mfa-for-root.md)。

您的 AWS 帳戶根使用者 和 IAM 使用者可以註冊最多八個任何類型的 MFA 裝置。註冊多個 MFA 裝置可以提供彈性，並協助您降低裝置遺失或損壞時存取中斷的風險。您只需要一個 MFA 裝置登入 AWS 管理主控台 ，或透過 AWS CLI建立工作階段。

**注意**  
我們建議您要求人類使用者在存取時使用臨時登入資料 AWS。您是否考慮過使用 AWS IAM Identity Center？ 您可以使用 IAM Identity Center 集中管理對多個 的存取， AWS 帳戶 並為使用者提供受 MFA 保護的單一登入存取，可從單一位置存取其所有指派的帳戶。使用 IAM Identity Center，您可以在 IAM Identity Center 中建立和管理使用者身分，或輕鬆連線至您現有的 SAML 2.0 相容身分提供者。如需詳細資訊，請參閱 *AWS IAM Identity Center 使用者指南*中的[什麼是 IAM Identity Center？](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)。

MFA 增加了額外的安全性，要求使用者在存取 AWS 網站或服務時，除了登入憑證之外，還要從 AWS 支援的 MFA 機制提供唯一的身分驗證。

## MFA 類型
<a name="id_credentials_mfa-types"></a>

AWS 支援下列 MFA 類型：

**Contents**
+ [通行密鑰和安全金鑰](#passkeys-security-keys-for-iam-users)
+ [虛擬驗證器應用程式](#virtual-auth-apps-for-iam-users)
+ [硬體 TOTP 權杖](#hardware-totp-token-for-iam-users)

### 通行密鑰和安全金鑰
<a name="passkeys-security-keys-for-iam-users"></a>

AWS Identity and Access Management 支援 MFA 的通行金鑰和安全金鑰。根據 FIDO 標準，通行金鑰使用公有金鑰密碼編譯來提供比密碼更安全的強大、網路釣魚防護身分驗證。 AWS 支援兩種類型的通行金鑰：裝置繫結的通行金鑰 （安全金鑰） 和同步的通行金鑰。
+ **安全金鑰**：這些是用作身分驗證的第二個因素的實體裝置，例如 YubiKey。單一安全金鑰可以支援多個根使用者帳戶和 IAM 使用者。
+ **同步通行密鑰**：這些使用來自提供者 (例如 Google、Apple、Microsoft 帳戶等) 和第三方服務 (例如 1Password、Dashlane 和 Bitwarden 等) 的憑證管理工具作為第二個因素。

您可以使用內建的生物識別驗證器，例如 Apple MacBooks 上的 Touch ID，解鎖您的憑證管理工具並登入 AWS。通行密鑰是透過您選擇的提供者，使用指紋、面部或裝置 PIN 碼建立的。您也可以使用一台裝置 (例如行動裝置或硬體安全金鑰) 中的跨帳戶身分驗證 (CDA) 通行密鑰，在筆記型電腦等其他裝置上登入。如需詳細資訊，請參閱 [cross-device authentication](https://passkeys.dev/docs/reference/terms/#cross-device-authentication-cda) (CDA)。

您可以跨裝置同步通行金鑰，以便使用 登入 AWS，增強可用性和可復原性。如需啟用通行密鑰和安全金鑰的詳細資訊，請參閱[為根使用者啟用通行密鑰或安全金鑰 (主控台)](enable-fido-mfa-for-root.md)。

FIDO Alliance 維護與 FIDO 規範相容的所有[經 FIDO 認證的產品](https://fidoalliance.org/certification/fido-certified-products/)的清單。

### 虛擬驗證器應用程式
<a name="virtual-auth-apps-for-iam-users"></a>

在手機或其他裝置上執行並模擬實體裝置的虛擬驗證器應用程式。虛擬驗證器應用程式實作[以時間為基礎的一次性密碼](https://datatracker.ietf.org/doc/html/rfc6238) (TOTP) 算法，並且支援在單台裝置上使用多個權杖。使用者必須在登入期間出現提示時輸入裝置中的有效代碼。每個指派給使用者的權杖都必須是唯一的。使用者無法輸入另一個使用者的權杖來進行身分驗證。

我們建議您使用網路釣魚防護 MFA，例如[通行金鑰或安全金鑰](#passkeys-security-keys-for-iam-users)，以獲得最強大的保護。如果您還無法使用通行金鑰或安全金鑰，建議您在等待硬體購買核准或等待硬體送達時使用虛擬 MFA 裝置做為臨時措施。如需可以用來做為虛擬 MFA 裝置的支援應用程式清單，請參閱[多重要素驗證 (MFA)](https://aws.amazon.com/iam/features/mfa/?audit=2019q1)。

如需為 IAM 使用者設定虛擬 MFA 裝置的說明，請參閱[在 中指派虛擬 MFA 裝置 AWS 管理主控台](id_credentials_mfa_enable_virtual.md)。

**注意**  
當您透過 AWS 管理主控台 或在登入程序期間新增新的虛擬 MFA 裝置時， AWS 帳戶 會刪除 中未指派的虛擬 MFA 裝置。未指派的虛擬 MFA 裝置是指位於您帳戶中但帳戶根使用者或 IAM 使用者並未在登入程序中使用的裝置。將這些裝置刪除後，便可將新的虛擬 MFA 裝置新增至您的帳戶。刪除這些裝置後，您還可以重複使用裝置名稱。  
若要檢視帳戶中未指派的虛擬 MFA 裝置，您可以使用 [list-virtual-mfa-devices](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/list-virtual-mfa-devices.html) AWS CLI 命令或 [API](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListVirtualMFADevices.html) 呼叫。
若要停用虛擬 MFA 裝置，您可以使用 [deactivate-mfa-device](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/deactivate-mfa-device.html) AWS CLI 命令或 [API](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeactivateMFADevice.html) 呼叫。停用後，裝置會變成未指派狀態。
若要將未指派的虛擬 MFA 裝置連接至 AWS 帳戶 根使用者或 IAM 使用者，您需要裝置產生的驗證碼，以及 [enable-mfa-device](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/enable-mfa-device.html) AWS CLI 命令或 [API](https://docs.aws.amazon.com/IAM/latest/APIReference/API_EnableMFADevice.html) 呼叫。

### 硬體 TOTP 權杖
<a name="hardware-totp-token-for-iam-users"></a>

一種在[以時間為基礎的一次性密碼 (TOTP) 演算法](https://datatracker.ietf.org/doc/html/rfc6238)的基礎上產生六位數字程式碼的硬體裝置。使用者必須在登入期間在第二個網頁上輸入裝置中的有效程式碼。

這些字符僅用於 AWS 帳戶。您只能使用具有其安全共用之唯一字符種子的字符 AWS。權杖種子是權杖生產時產生的私密金鑰。從其他來源購買的權杖將無法與 IAM 一起運作。若要確保相容性，您必須從下列其中一個連結購買硬體 MFA 裝置：[OTP 權杖](https://www.amazon.com/SafeNet-IDProve-Time-based-6-Digit-Services/dp/B002CRN5X8)或 [OTP 顯示卡](https://www.amazon.com/SafeNet-IDProve-Card-Amazon-Services/dp/B00J4NGUO4)。
+ 每個指派給使用者的 MFA 裝置都必須是唯一的。使用者無法輸入另一個使用者裝置的代碼來進行身分驗證。如需支援的硬體 MFA 裝置資訊，請參閱[多重要素驗證 (MFA)](https://aws.amazon.com/iam/features/mfa/?audit=2019q1)。
+ 如果想要使用實體 MFA 裝置，我們建議您使用安全金鑰作為硬體 TOTP 裝置的替代方案。安全金鑰沒有電池需求、可防禦網路釣魚，並支援單一裝置上的多個使用者。

您只能從 啟用通行金鑰或安全金鑰 AWS 管理主控台 ，不能從 AWS CLI 或 AWS API 啟用。在可以啟用安全金鑰之前，您必須擁有對裝置的實體存取權。

如需有關為 IAM 使用者設定硬體 TOTP 權杖的說明，請參閱[在 中指派硬體 TOTP 字符 AWS 管理主控台](id_credentials_mfa_enable_physical.md)。

**注意**  
**SMS 文字訊息型 MFA** – 已 AWS 結束支援啟用 SMS 多重要素驗證 (MFA)。我們建議擁有使用 SMS 簡訊式 MFA 的 IAM 使用者的客戶改為使用下列任一種替代方式：[通行密鑰或安全金鑰](id_credentials_mfa_enable_fido.md)、[虛擬 (軟體式) MFA 裝置](id_credentials_mfa_enable_virtual.md)，或[硬體 MFA 裝置](id_credentials_mfa_enable_physical.md)。您可以使用已分配的 SMS MFA 裝置來識別帳戶中的使用者。在 IAM 主控台中，從導覽窗格選擇 **Users** (使用者)，然後在表格中 **MFA** 欄位尋找具有 **SMS** 的使用者。

## MFA 建議
<a name="id_credentials_mfa-recommendations"></a>

為了協助保護您的身分，請遵循這些 MFA AWS 身分驗證的建議。
+ 我們建議您使用網路釣魚防護 MFA，例如[通行金鑰和安全金鑰](#passkeys-security-keys-for-iam-users)，做為 MFA 裝置。這些以 FIDO 為基礎的驗證程式可針對網路釣魚等攻擊提供最強大的保護。
+ 建議您為 中的 AWS 帳戶根使用者 和 IAM 使用者啟用多個 MFA 裝置 AWS 帳戶。這可讓您提高 中的安全列 AWS 帳戶 ，並簡化管理高權限使用者的存取，例如 AWS 帳戶根使用者。
+ 您可以向 AWS 帳戶根使用者 和 IAM 使用者註冊最多**八個**[目前支援 MFA 類型之任何組合的 MFA](https://aws.amazon.com/iam/features/mfa/) 裝置。使用多個 MFA 裝置時，您只需一個 MFA 裝置即可登入 ， AWS 管理主控台 或透過 以該使用者 AWS CLI 身分建立工作階段。IAM 使用者必須使用現有的 MFA 裝置進行身分驗證，才能啟用或停用其他 MFA 裝置。
+ 如果發生遺失、遭竊或無法存取的 MFA 裝置，您可以使用其中一個剩餘的 MFA 裝置來存取 ， AWS 帳戶 而無需執行 AWS 帳戶 復原程序。如果 MFA 裝置遺失或遭竊，應取消 MFA 裝置與 IAM 主體的可能關聯。
+ 使用多個 MFAs 可讓您的員工分散在地理位置或遠端工作，使用硬體型 MFA 存取 ， AWS 而不必協調員工之間單一硬體裝置的實體交換。
+ 針對 IAM 主體使用額外的 MFA 裝置，可讓您在日常使用期間使用一或多個 MFA 裝置，同時將實體 MFA 裝置維護在安全的實體位置 (例如文件庫)，或是用於備份和備援的安全位置。

**備註**  
您無法將安全金鑰或通行金鑰的 MFA 資訊傳遞給 AWS STS API 操作，以請求臨時憑證。您可以在使用安全金鑰或通行金鑰時，透過執行 `aws login`命令取得登入資料，以搭配 AWS CLI 和 AWS SDKs 使用。
您無法使用 AWS CLI 命令或 AWS API 操作來啟用 [FIDO 安全金鑰](id_credentials_mfa_enable_fido.md)。
同一個名稱不能用於多個根使用者或 IAM MFA 裝置。

## 其他資源
<a name="id_credentials_mfa-resources"></a>

下列資源可協助您進一步了解 MFA。
+ 如需使用 MFA 存取的詳細資訊 AWS，請參閱 [啟用 MFA 的登入](console_sign-in-mfa.md)。
+  您可以利用 IAM Identity Center 啟用 AWS 存取入口網站、IAM Identity Center 整合應用程式和 的安全 MFA 存取 AWS CLI。如需詳細資訊，請參閱[在 IAM Identity Center 中啟用 MFA](https://docs.aws.amazon.com/singlesignon/latest/userguide/mfa-getting-started.html)。

# 在 中指派通行金鑰或安全金鑰 AWS 管理主控台
<a name="id_credentials_mfa_enable_fido"></a>

通行金鑰是一種[多重要素驗證 (MFA) 裝置](id_credentials_mfa.md)，可用來保護您的 AWS 資源。 AWS 支援同步通行金鑰和裝置繫結通行金鑰，也稱為安全金鑰。

同步通行密鑰可讓 IAM 使用者在許多裝置 (甚至是新裝置) 上存取 FIDO 登入憑證，而無需在每個帳戶上重新註冊每個裝置。同步通行密鑰包含 Google、Apple 和 Microsoft 等第一方憑證管理員，以及 1Password、Dashlane 和 Bitwarden 等第三方憑證管理員，作為第二個要素。您也可以使用裝置上的生物識別技術 (例如 TouchID、FaceID) 來解除鎖定您選擇的憑證管理員，以使用通行密鑰。

或者，裝置綁定的通行密鑰會綁定至 FIDO 安全金鑰，您可以將其插入電腦上的 USB 連接埠，然後在出現提示時點選以安全地完成登入程序。若您已搭配其他服務使用 FIDO 安全金鑰，並且它具備 [AWS 支援的組態](id_credentials_mfa_fido_supported_configurations.md) (例如來自 Yubico 的 YubiKey 5)，您也可以搭配 AWS來使用它。否則，若您希望在 AWS中使用 MFA 的 WebAuthn，您需要購買 FIDO 安全金鑰。此外，FIDO 安全金鑰可以支援同一裝置上的多個 IAM 或根使用者，從而增強其公用程式以確保帳戶安全。如需兩種裝置類型的規格及購買資訊，請參閱[多重要素驗證](https://aws.amazon.com/iam/details/mfa/)。

您可以向 AWS 帳戶根使用者 和 IAM 使用者註冊最多**八個**[目前支援 MFA 類型之任何組合的 MFA](https://aws.amazon.com/iam/features/mfa/) 裝置。使用多個 MFA 裝置時，您只需一個 MFA 裝置登入 ， AWS 管理主控台 或透過 以該使用者 AWS CLI 身分建立工作階段。我們建議您註冊多個 MFA 裝置。例如，您可以註冊內建驗證器，也可以註冊存放在實體安全位置的安全金鑰。如果無法使用內建驗證器，則可以使用已註冊的安全金鑰。對於驗證器應用程式，我們也建議您在這些應用程式中啟用雲端備份或同步功能，以協助避免在具有驗證器應用程式的裝置遺失或損壞時，失去對帳戶的存取權限。

**注意**  
存取 AWS時，我們建議您要求人類使用者使用暫時性憑證。您的使用者可以 AWS 與身分提供者聯合到 ，並在其中使用其公司登入資料和 MFA 組態進行身分驗證。若要管理對 AWS 和商業應用程式的存取，建議您使用 IAM Identity Center。如需詳細資訊，請參閱 [IAM Identity Center 使用者指南](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)。

**Topics**
+ [必要許可](#enable-fido-mfa-for-iam-user-permissions-required)
+ [為您自己的 IAM 使用者啟用通行密鑰或安全金鑰 (主控台)](#enable-fido-mfa-for-own-iam-user)
+ [為另一個 IAM 使用者啟用通行密鑰或安全金鑰 (主控台)](#enable-fido-mfa-for-iam-user)
+ [取代通行密鑰或安全金鑰](#replace-fido-mfa)
+ [使用通行密鑰和安全金鑰的支援組態](id_credentials_mfa_fido_supported_configurations.md)

## 必要許可
<a name="enable-fido-mfa-for-iam-user-permissions-required"></a>

若要管理您自己的 IAM 使用者的 FIDO 通行密鑰，同時保護敏感的 MFA 相關動作，您必須擁有下列政策的許可：

**注意**  
ARN 值是靜態值，不是哪項協定被用來註冊驗證器的指示器。我們已棄用 U2F，因此所有新的實作都採用 WebAuthn。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowManageOwnUserMFA",
            "Effect": "Allow",
            "Action": [
                "iam:DeactivateMFADevice",
                "iam:EnableMFADevice",
                "iam:GetUser",
                "iam:ListMFADevices",
                "iam:ResyncMFADevice"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "DenyAllExceptListedIfNoMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:EnableMFADevice",
                "iam:GetUser",
                "iam:ListMFADevices",
                "iam:ResyncMFADevice"
            ],
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}
```

------

## 為您自己的 IAM 使用者啟用通行密鑰或安全金鑰 (主控台)
<a name="enable-fido-mfa-for-own-iam-user"></a>

您只能從 為您自己的 IAM 使用者啟用通行金鑰或安全金鑰 AWS 管理主控台 ，不能從 AWS CLI 或 AWS API 啟用。在可以啟用安全金鑰之前，您必須擁有對裝置的實體存取權。

**若要為您自己的 IAM 使用者啟用通行密鑰或安全金鑰 (主控台)**

1. 使用 AWS 您的帳戶 ID 或帳戶別名、IAM 使用者名稱和密碼登入 [IAM 主控台](https://console.aws.amazon.com/iam)。
**注意**  
為了方便起見， AWS 登入頁面會使用瀏覽器 Cookie 來記住您的 IAM 使用者名稱和帳戶資訊。如果您先前以不同的使用者身分登入，請選擇在頁面底部附近的 **Sign in to a different account** (登入不同的帳戶)，返回主要登入頁面。從那裡，您可以輸入要重新導向至 AWS 您帳戶的 IAM 使用者登入頁面的帳戶 ID 或帳戶別名。

   若要取得您的 AWS 帳戶 ID，請聯絡您的管理員。

1. 在右上方的導覽列中，選擇您的使用者名稱，然後選擇 **安全憑證** 。  
![\[AWS 管理主控台 安全登入資料連結\]](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/security-credentials-user.shared.console.png)

1. 在選取的 IAM 使用者頁面上，選擇**安全憑證**索引標籤。

1. 在 **Multi-Factor Authentication (MFA)** (多重要素驗證 (MFA)) 區段下方，選擇 **Assign MFA device** (指派 MFA 裝置)。

1. 在 **MFA 裝置名稱**頁面上，輸入**裝置名稱**，選擇**通行密鑰或安全金鑰**，然後選擇**下一步**。

1. 在**設定裝置**上，設定您的通行密鑰。使用臉部或指紋等生物識別資料、裝置 PIN，或將 FIDO 安全金鑰插入電腦的 USB 連接埠並點選，由此建立通行密鑰。

1. 遵循瀏覽器上的說明進行操作，然後選擇**繼續**。

您現在已註冊要與 搭配使用的通行金鑰或安全金鑰 AWS。如需搭配 使用 MFA 的詳細資訊 AWS 管理主控台，請參閱 [啟用 MFA 的登入](console_sign-in-mfa.md)。

## 為另一個 IAM 使用者啟用通行密鑰或安全金鑰 (主控台)
<a name="enable-fido-mfa-for-iam-user"></a>

您只能從 為其他 IAM 使用者啟用通行金鑰或安全性 AWS 管理主控台 ，而不能從 AWS CLI 或 AWS API 啟用。

**若要為另一個 IAM 使用者啟用通行密鑰或安全 (主控台)**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 的 IAM 主控台。

1. 在導覽窗格中，選擇**使用者** 。

1. 在**使用者**下，選擇要為其啟用 MFA 的使用者名稱。

1. 在選取的 IAM 使用者頁面上，選擇**安全憑證**索引標籤。

1. 在 **Multi-Factor Authentication (MFA)** (多重要素驗證 (MFA)) 區段下方，選擇 **Assign MFA device** (指派 MFA 裝置)。

1. 在 **MFA 裝置名稱**頁面上，輸入**裝置名稱**，選擇**通行密鑰或安全金鑰**，然後選擇**下一步**。

1. 在**設定裝置**上，設定您的通行密鑰。使用臉部或指紋等生物識別資料、裝置 PIN，或將 FIDO 安全金鑰插入電腦的 USB 連接埠並點選，由此建立通行密鑰。

1. 遵循瀏覽器上的說明進行操作，然後選擇**繼續**。

您現在已為另一個 IAM 使用者註冊通行密鑰或安全金鑰，以便與 AWS搭配使用。如需搭配 使用 MFA 的詳細資訊 AWS 管理主控台，請參閱 [啟用 MFA 的登入](console_sign-in-mfa.md)。

## 取代通行密鑰或安全金鑰
<a name="replace-fido-mfa"></a>

您的 AWS 帳戶根使用者 和 IAM 使用者一次最多可以有八個 MFA 裝置指派給使用者[目前支援的 MFA 類型](https://aws.amazon.com/iam/features/mfa/)任意組合。如果使用者遺失 FIDO 驗證器或因為任何原因需要更換，您必須先停用舊的 FIDO 驗證器。然後，再為使用者新增新的 MFA 裝置。
+ 如需停用目前與 IAM 使用者相關聯的裝置，請參閱 [停用 MFA 裝置](id_credentials_mfa_disable.md)。
+ 若要為 IAM 使用者新增新的 FIDO 安全性金鑰，請參閱 [為您自己的 IAM 使用者啟用通行密鑰或安全金鑰 (主控台)](#enable-fido-mfa-for-own-iam-user)。

如果您無法存取新的通行密鑰或安全金鑰，您可以啟用新的虛擬 MFA 裝置或硬體 TOTP 權杖。請參閱以下其中一項以取得說明：
+ [在 中指派虛擬 MFA 裝置 AWS 管理主控台](id_credentials_mfa_enable_virtual.md) 
+ [在 中指派硬體 TOTP 字符 AWS 管理主控台](id_credentials_mfa_enable_physical.md) 

# 使用通行密鑰和安全金鑰的支援組態
<a name="id_credentials_mfa_fido_supported_configurations"></a>

您可以使用 FIDO2 裝置綁定的通行密鑰 (亦稱為安全金鑰)，作為使用目前支援組態的 IAM 的多重要素驗證 (MFA) 方法。其中包括 IAM 支援的 FIDO2 裝置，以及支援 FIDO2 的瀏覽器。註冊 FIDO2 裝置之前，檢查您使用的是最新的瀏覽器和作業系統 (OS) 版本。功能在不同的瀏覽器、驗證器和作業系統用戶端上的行為可能有所不同。如果您的裝置在某個瀏覽器上註冊失敗，您可以嘗試使用其他瀏覽器註冊。

FIDO2 是 FIDO U2F 的開放認證標準，也是 FIDO U2F 的延伸，可根據公有金鑰加密技術提供相同的高度安全性。FIDO2 由 W3C Web Authentication 規範 (WebAuthn API) 和 FIDO Alliance Client-to-Authenticator Protocol (CTAP，一個應用程式層通訊協定) 組成。CTAP 可透過外部驗證器在用戶端或平台之間進行通訊，例如瀏覽器或作業系統。當您在 中啟用 FIDO 認證驗證器時 AWS，安全金鑰會建立新的金鑰對，僅用於 AWS。首先，您需要輸入您的憑證。出現提示時，您需要點選安全金鑰，回應 AWS發出的身分驗證查問。若要進一步了解 FIDO2 標準，請參閱 [FIDO2 專案](https://en.wikipedia.org/wiki/FIDO2_Project)。

## 支援的 FIDO2 裝置 AWS
<a name="id_credentials_mfa_fido_supported_devices"></a>

IAM 支援透過 USB、Bluetooth 或 NFC 連線到裝置的 FIDO2 安全裝置。IAM 也支援平台驗證器，例如 TouchID 或 FaceID。IAM 不支援 Windows Hello 的本機通行密鑰註冊。若要建立和使用通行密鑰，Windows 使用者應該使用[跨裝置身分驗證](https://passkeys.dev/docs/reference/terms/#cross-device-authentication-cda)，您在其中使用諸如行動裝置等裝置的通行密鑰或硬體安全金鑰，登入諸如筆記型電腦等其他裝置。

**注意**  
AWS 需要存取電腦上的實體 USB 連接埠，才能驗證 FIDO2 裝置。安全金鑰無法與虛擬機器、遠端連線或瀏覽器無痕模式搭配使用。

FIDO Alliance 會維護與 FIDO 規範相容之所有 [FIDO2 產品](https://fidoalliance.org/certification/fido-certified-products/)的清單。

## 支援 FIDO2 的瀏覽器
<a name="id_credentials_mfa_fido_browsers"></a>

在 Web 瀏覽器中執行的 FIDO2 安全裝置的可用性取決於瀏覽器和作業系統的組合。以下瀏覽器目前支援使用安全金鑰：


****  

| Web 瀏覽器 | macOS 10.15\$1 | Windows 10 | Linux | iOS 14.5\$1 | Android 7\$1 | 
| --- | --- | --- | --- | --- | --- | 
| Chrome | 是 | 是 | 是 | 是 | 否 | 
| Safari | 是 | 否 | 否 | 是 | 否 | 
| Edge | 是 | 是 | 否 | 是 | 否 | 
| Firefox | 是 | 是 | 否 | 是 | 否 | 

**注意**  
依預設，目前支援 FIDO2 的大多數 Firefox 版本都不會啟用支援。如需在 Firefox 中啟用 FIDO2 支援的說明，請參閱 [對通行密鑰和 FIDO 安全金鑰進行疑難排解](troubleshoot_mfa-fido.md)。  
macOS 上的 Firefox 可能無法完全支援通行密鑰的跨裝置身分驗證工作流程。您可能會收到觸控安全金鑰的提示，而不是繼續進行跨裝置身分驗證。建議您使用不同的瀏覽器 (例如 Chrome 或 Safari)，在 macOS 上使用通行密鑰登入。

如需有關 YubiKey 等 FIDO2 認證的裝置的瀏覽器支援的詳細資訊，請參閱 [FIDO2 和 U2F 的作業系統和 Web 瀏覽器支援](https://support.yubico.com/hc/en-us/articles/360016615020-Operating-system-and-web-browser-support-for-FIDO2-and-U2F)。

### 瀏覽器外掛程式
<a name="id_credentials_mfa_fido_plugins"></a>

AWS 僅支援原生支援 FIDO2 AWS 的瀏覽器。不支援使用外掛程式來新增 FIDO2 瀏覽器支援。有些瀏覽器外掛程式與 FIDO2 標準不相容，可能會導致未預期的 FIDO2 安全金鑰結果。

如需停用瀏覽器外掛程式和其他故障診斷提示，請參閱 [我無法啟用 FIDO 安全性金鑰](troubleshoot_mfa-fido.md#troubleshoot_mfa-fido-cant-enable)。

## 裝置認證
<a name="id_credentials_mfa_fido_certifications"></a>

我們只會在註冊安全金鑰期間擷取和指派與裝置相關的認證，例如 FIPS 驗證和 FIDO 認證等級。從 [FIDO Alliance Metadata Service (MDS)](https://fidoalliance.org/metadata/) 中擷取裝置認證。如果安全金鑰的認證狀態或等級發生變更，它將不會自動反映在裝置標籤中。若要更新裝置的認證資訊，請再次註冊裝置以擷取更新的認證資訊。

AWS 在裝置註冊期間提供下列認證類型作為條件索引鍵，可從 FIDO MDS 中取得：FIPS-140-2、FIPS-140-3 和 FIDO 認證等級。您可以根據偏好的認證類型和等級，在其 IAM 政策中指定特定驗證器的註冊。如需詳細資訊，請參閱以下政策。

### 裝置認證的範例政策
<a name="id_credentials_mfa_fido_certifications_policies"></a>

下列使用案例顯示可讓您使用 FIPS 認證註冊 MFA 裝置的範例政策。

**Topics**
+ [使用案例 1：僅允許註冊具有 FIPS-140-2 L2 認證的裝置](#id_credentials_mfa_fido_certifications_policies_use_case_1)
+ [使用案例 2：允許註冊具有 FIPS-140-2 L2 和 FIDO L1 認證的裝置](#id_credentials_mfa_fido_certifications_policies_use_case_2)
+ [使用案例 3：允許註冊具有 FIPS-140-2 L2 或 FIPS-140-3 L2 認證的裝置](#id_credentials_mfa_fido_certifications_policies_use_case_3)
+ [使用案例 4：允許註冊具有 FIPS-140-2 L2 憑證的裝置，並支援其他 MFA 類型，例如虛擬身分驗證器和硬體 TOTP](#id_credentials_mfa_fido_certifications_policies_use_case_4)

#### 使用案例 1：僅允許註冊具有 FIPS-140-2 L2 認證的裝置
<a name="id_credentials_mfa_fido_certifications_policies_use_case_1"></a>

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Create"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Activate",
                    "iam:FIDO-FIPS-140-2-certification": "L2"
                }
            }
        }
    ]
}
```

------

#### 使用案例 2：允許註冊具有 FIPS-140-2 L2 和 FIDO L1 認證的裝置
<a name="id_credentials_mfa_fido_certifications_policies_use_case_2"></a>

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Create"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Activate",
                    "iam:FIDO-FIPS-140-2-certification": "L2",
                    "iam:FIDO-certification": "L1"
                }
            }
        }
    ]
}
```

------

#### 使用案例 3：允許註冊具有 FIPS-140-2 L2 或 FIPS-140-3 L2 認證的裝置
<a name="id_credentials_mfa_fido_certifications_policies_use_case_3"></a>

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Create"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Activate",
                    "iam:FIDO-FIPS-140-2-certification": "L2"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Activate",
                    "iam:FIDO-FIPS-140-3-certification": "L2"
                }
            }
        }
    ]
}
```

------

#### 使用案例 4：允許註冊具有 FIPS-140-2 L2 憑證的裝置，並支援其他 MFA 類型，例如虛擬身分驗證器和硬體 TOTP
<a name="id_credentials_mfa_fido_certifications_policies_use_case_4"></a>

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iam:EnableMFADevice",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "iam:RegisterSecurityKey": "Create"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "iam:EnableMFADevice",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "iam:RegisterSecurityKey": "Activate",
          "iam:FIDO-FIPS-140-2-certification": "L2"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "iam:EnableMFADevice",
      "Resource": "*",
      "Condition": {
        "Null": {
          "iam:RegisterSecurityKey": "true"
        }
      }
    }
  ]
}
```

------

## AWS CLI 和 AWS API
<a name="id_credentials_mfa_fido_cliapi"></a>

AWS 僅支援在 中使用通行金鑰和安全金鑰 AWS 管理主控台。[AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/) 和 [AWS API](https://aws.amazon.com/tools/) 不支援使用通行密鑰和安全金鑰進行 MFA，或用以存取[受 MFA 保護的 API 操作](id_credentials_mfa_configure-api-require.md)。

## 其他資源
<a name="id_credentials_mfa_fido_additional_resources"></a>
+ 如需在 中使用通行金鑰和安全金鑰的詳細資訊 AWS，請參閱 [在 中指派通行金鑰或安全金鑰 AWS 管理主控台](id_credentials_mfa_enable_fido.md)。
+ 如需在 中對通行金鑰和安全金鑰進行故障診斷的說明 AWS，請參閱 [對通行密鑰和 FIDO 安全金鑰進行疑難排解](troubleshoot_mfa-fido.md)。
+ 如需有關 FIDO2 支援的一般行業資訊，請參閱 [FIDO2 專案](https://en.wikipedia.org/wiki/FIDO2_Project)。

# 在 中指派虛擬 MFA 裝置 AWS 管理主控台
<a name="id_credentials_mfa_enable_virtual"></a>

**重要**  
AWS 建議您 AWS盡可能使用 MFA 的通行金鑰或安全金鑰。如需詳細資訊，請參閱[在 中指派通行金鑰或安全金鑰 AWS 管理主控台](id_credentials_mfa_enable_fido.md)。

您可以使用手機或其他裝置，做為虛擬多重要素驗證 (MFA) 裝置。若要執行此操作，安裝與 [RFC 6238 (以標準為基礎的 TOTP (以時間為基礎的單次密碼) 演算法)](https://datatracker.ietf.org/doc/html/rfc6238) 相容的行動應用程式。這些應用程式產生六位數的身分驗證代碼。由於驗證器可以在不安全的行動裝置上執行，而且程式碼可能會與未經授權的對象共用，因此以 TOTP 為基礎的 MFA 不提供與 [FIDO2](https://en.wikipedia.org/wiki/FIDO_Alliance#FIDO2) 安全金鑰和通行金鑰等網路釣魚防護選項相同的安全層級。我們建議您使用 MFA 的通行金鑰或安全金鑰，以最強大的防護來防範網路釣魚等攻擊。

如果您還無法使用通行金鑰或安全金鑰，建議您在等待任何硬體購買核准或硬體送達時，使用虛擬 MFA 裝置做為臨時措施。

大多數虛擬 MFA 應用程式支援建立多個虛擬裝置，可讓您為多個 AWS 帳戶 或 使用者使用相同的應用程式。您最多可以向 AWS 帳戶根使用者 和 IAM 使用者註冊**任意**組合 MFA [類型的八個 MFA](https://aws.amazon.com/iam/features/mfa/) 裝置。您只需一個 MFA 裝置即可登入 AWS 管理主控台 或透過 建立工作階段 AWS CLI。我們建議您註冊多個 MFA 裝置。對於驗證器應用程式，我們也建議您啟用雲端備份或同步功能，以協助避免在裝置遺失或損壞時，失去對帳戶的存取權。

AWS 需要產生六位數 OTP 的虛擬 MFA 應用程式。如需您可以使用的虛擬 MFA 應用程式清單，請參閱[多重要素驗證](https://aws.amazon.com/iam/features/mfa/?audit=2019q1)。

**Topics**
+ [必要許可](#mfa_enable_virtual_permissions-required)
+ [針對 IAM 使用者啟用虛擬 MFA 裝置 (主控台)](#enable-virt-mfa-for-iam-user)
+ [取代虛擬 MFA 裝置](#replace-virt-mfa)

## 必要許可
<a name="mfa_enable_virtual_permissions-required"></a>

若要為 IAM 使用者[AWS：允許經過 MFA 驗證的 IAM 使用者在「安全憑證」頁面中管理其自己的 MFA 裝置](reference_policies_examples_aws_my-sec-creds-self-manage-mfa-only.md)管理虛擬 MFA 裝置時，您必須擁有以下政策的許可：。

## 針對 IAM 使用者啟用虛擬 MFA 裝置 (主控台)
<a name="enable-virt-mfa-for-iam-user"></a>

您可以在 中使用 IAM AWS 管理主控台 ，為帳戶中的 IAM 使用者啟用和管理虛擬 MFA 裝置。您可以將標籤連接至 IAM 資源 (包括虛擬 MFA 裝置)，以識別、整理和控制其存取權。您只能在使用 AWS CLI 或 AWS API 時標記虛擬 MFA 裝置。若要使用 AWS CLI 或 AWS API 啟用和管理 MFA 裝置，請參閱 [在 AWS CLI 或 AWS API 中指派 MFA 裝置](id_credentials_mfa_enable_cliapi.md)。如需標記 IAM 資源的詳細資訊，請參閱 [AWS Identity and Access Management 資源的標籤](id_tags.md)。

**注意**  
您必須擁有實體存取託管使用者的虛擬 MFA 裝置的硬體，才能設定 MFA。例如，您可以為使用者設定 MFA，該使用者將使用在智慧型手機上執行的虛擬 MFA 裝置。在這種情況下，您必須有可用的智慧型手機，才能完成精靈。因此，您可能想要讓使用者設定和管理自己的虛擬 MFA 裝置。在這種情況下，您必須授予使用者執行必要 IAM 動作的許可。如需詳細資訊以及授予這些許可的 IAM 政策範例，請參閱 [IAM 教學課程：允許使用者管理其憑證和 MFA 設定](tutorial_users-self-manage-mfa-and-creds.md) 和範例政策 [AWS：允許經過 MFA 驗證的 IAM 使用者在「安全憑證」頁面中管理其自己的 MFA 裝置](reference_policies_examples_aws_my-sec-creds-self-manage-mfa-only.md)。

**為 IAM 使用者啟用虛擬 MFA 裝置 (主控台)**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 的 IAM 主控台。

1. 在導覽窗格中，選擇**使用者** 。

1. 在**使用者**清單中選擇 IAM 使用者名稱。

1. 選擇 **安全憑證** 標籤。在 **Multi-Factor Authentication (MFA)** (多重要素驗證 (MFA)) 區段下方，選擇 **Assign MFA device** (指派 MFA 裝置)。

1. 在精靈中輸入 **Device name**，然後選擇 **驗證器應用程式**，再選擇 **下一步**。

   IAM 將產生並顯示虛擬 MFA 裝置的配置資訊，包括 QR 碼圖形。此圖形代表「私密組態金鑰」，可用來在不支援 QR 碼的裝置上手動輸入。

1. 開啟您的虛擬 MFA 應用程式。如需可以用於託管虛擬 MFA 裝置的應用程式清單，請參閱[多重要素驗證](https://aws.amazon.com/iam/details/mfa/)。

   如果虛擬 MFA 應用程式支援多個虛擬 MFA 裝置或帳戶，請選擇對應的選項以建立新的虛擬 MFA 裝置或帳戶。

1. 判定 MFA 應用程式是否支援 QR 碼，然後執行以下操作之一：
   + 從精靈中，選擇 **Show QR code (顯示 QR 碼)**，然後使用應用程式掃描 QR 碼。這可能是攝影機圖示或使用裝置的攝影機掃描代碼的**掃描代碼**選項。
   + 在精靈中，選擇 **Show secret key** (顯示私密金鑰)，然後在您的 MFA 應用程式中輸入私密金鑰。

   完成操作後，虛擬 MFA 裝置會開始產生一次性密碼。

1. 在 **設定裝置** 頁面中的 **MFA 代碼 1** 方塊內輸入虛擬 MFA 裝置上目前顯示的一次性密碼。請等待 30 秒，裝置將產生新的一次性密碼。然後將第二個一次性密碼輸入 **MFA code 2 (MFA 代碼 2)** 方塊中。選擇 **Add MFA** (新增 MFA)。
**重要**  
產生代碼之後立即提交您的請求。如果在產生代碼後等待很長時間才提交請求，MFA 裝置會成功地與使用者建立關聯，但 MFA 裝置不同步。會發生這種情況是因為定時式的一次性密碼 (TOTP) 在過了一小段時間後就會過期。這種情況下，您可以[重新同步裝置](id_credentials_mfa_sync.md)。

虛擬 MFA 裝置現在可以與 搭配使用 AWS。如需搭配 使用 MFA 的詳細資訊 AWS 管理主控台，請參閱 [啟用 MFA 的登入](console_sign-in-mfa.md)。

**注意**  
當您透過 AWS 管理主控台 或在登入程序期間新增新的虛擬 MFA 裝置時， AWS 帳戶 會刪除 中未指派的虛擬 MFA 裝置。未指派的虛擬 MFA 裝置是指位於您帳戶中但帳戶根使用者或 IAM 使用者並未在登入程序中使用的裝置。將這些裝置刪除後，便可將新的虛擬 MFA 裝置新增至您的帳戶。刪除這些裝置後，您還可以重複使用裝置名稱。  
若要檢視帳戶中未指派的虛擬 MFA 裝置，您可以使用 [list-virtual-mfa-devices](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/list-virtual-mfa-devices.html) AWS CLI 命令或 [API](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListVirtualMFADevices.html) 呼叫。
若要停用虛擬 MFA 裝置，您可以使用 [deactivate-mfa-device](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/deactivate-mfa-device.html) AWS CLI 命令或 [API](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeactivateMFADevice.html) 呼叫。停用後，裝置會變成未指派狀態。
若要將未指派的虛擬 MFA 裝置連接至 AWS 帳戶 根使用者或 IAM 使用者，您需要裝置產生的驗證碼，以及 [enable-mfa-device](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/enable-mfa-device.html) AWS CLI 命令或 [API](https://docs.aws.amazon.com/IAM/latest/APIReference/API_EnableMFADevice.html) 呼叫。

## 取代虛擬 MFA 裝置
<a name="replace-virt-mfa"></a>

您的 AWS 帳戶根使用者 和 IAM 使用者可以註冊最多**八個** MFA 裝置，任何 MFA 類型的組合。如果使用者遺失裝置或基於任何原因需要更換，請停用舊裝置。然後，再為使用者加入新的裝置。
+ 如需停用目前與另一個 IAM 使用者相關聯的裝置，請參閱 [停用 MFA 裝置](id_credentials_mfa_disable.md)。
+ 若要新增另一個 IAM 使用者的取代用虛擬 MFA 裝置，請遵循上方 [針對 IAM 使用者啟用虛擬 MFA 裝置 (主控台)](#enable-virt-mfa-for-iam-user) 程序中的步驟。
+ 若要為 新增替代虛擬 MFA 裝置 AWS 帳戶根使用者，請遵循程序 中的步驟[針對根使用者啟用虛擬 MFA 裝置 (主控台)](enable-virt-mfa-for-root.md)。

# 在 中指派硬體 TOTP 字符 AWS 管理主控台
<a name="id_credentials_mfa_enable_physical"></a>

**重要**  
AWS 建議您 AWS盡可能使用 MFA 的通行金鑰或安全金鑰。如需詳細資訊，請參閱[在 中指派通行金鑰或安全金鑰 AWS 管理主控台](id_credentials_mfa_enable_fido.md)。

硬體 TOTP 權杖會在以時間為基礎的一次性密碼 (TOTP) 演算法的基礎上產生六位數字程式碼。使用者必須在登入程序期間出現提示時輸入裝置中的有效代碼。指派給使用者的每個 MFA 裝置必須是唯一的；使用者不能從另一個使用者的裝置中輸入代碼進行身分驗證。MFA 裝置無法跨帳戶或使用者共用。

硬體 TOTP 權杖與 [FIDO 安全金鑰](id_credentials_mfa_enable_fido.md)都是您購買的實體裝置。硬體 MFA 裝置會在您登入時產生 TOTP 代碼以進行身分驗證 AWS。它們依賴電池，這可能需要 AWS 隨著時間的推移替換和重新同步。FIDO 安全金鑰使用公有金鑰加密，不需要電池並提供無縫的身分驗證程序。我們建議使用 FIDO 安全金鑰來防禦網路釣魚，這為 TOTP 裝置提供了更安全的替代方案。此外，FIDO 安全金鑰可以支援同一裝置上的多個 IAM 或根使用者，從而增強其公用程式以確保帳戶安全。如需兩種裝置類型的規格及購買資訊，請參閱[多重要素驗證](https://aws.amazon.com/iam/details/mfa/)。



您可以從 、 AWS 管理主控台命令列或 IAM API 為 IAM 使用者啟用硬體 TOTP 字符。若要為您的 啟用 MFA 裝置 AWS 帳戶根使用者，請參閱 [針對根使用者啟用硬體 TOTP 權杖 (主控台)](enable-hw-mfa-for-root.md)。

您可以向 AWS 帳戶根使用者 和 IAM 使用者註冊最多**八個** MFA 裝置，其為[目前支援的 MFA 類型](https://aws.amazon.com/iam/features/mfa/)的任何組合。使用多個 MFA 裝置時，您只需一個 MFA 裝置即可登入 ， AWS 管理主控台 或透過 以該使用者 AWS CLI 身分建立工作階段。

**重要**  
建議您為您的使用者啟用多台 MFA 裝置，以便在一台 MFA 裝置遺失或無法存取時繼續存取您的帳戶。

**注意**  
如果您想要從命令列啟用 MFA 裝置，請使用 [https://docs.aws.amazon.com/cli/latest/reference/iam/enable-mfa-device.html](https://docs.aws.amazon.com/cli/latest/reference/iam/enable-mfa-device.html)。若要使用 IAM API 啟用 MFA 裝置，請使用 [https://docs.aws.amazon.com/IAM/latest/APIReference/API_EnableMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_EnableMFADevice.html) 操作。

**Topics**
+ [必要許可](#enable-hw-mfa-for-iam-user-permissions-required)
+ [啟用您 IAM 使用者的硬體 TOTP 權杖 (主控台)](#enable-hw-mfa-for-own-iam-user)
+ [啟用另一個 IAM 使用者的硬體 TOTP 權杖 (主控台)](#enable-hw-mfa-for-iam-user)
+ [取代實體 MFA 裝置](#replace-phys-mfa)

## 必要許可
<a name="enable-hw-mfa-for-iam-user-permissions-required"></a>

若要管理您 IAM 使用者的硬體 TOTP 權杖，同時保護敏感的 MFA 相關動作，您必須擁有下列政策的許可：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowManageOwnUserMFA",
            "Effect": "Allow",
            "Action": [
                "iam:DeactivateMFADevice",
                "iam:EnableMFADevice",
                "iam:GetUser",
                "iam:ListMFADevices",
                "iam:ResyncMFADevice"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "DenyAllExceptListedIfNoMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:EnableMFADevice",
                "iam:GetUser",
                "iam:ListMFADevices",
                "iam:ResyncMFADevice"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}
```

------

## 啟用您 IAM 使用者的硬體 TOTP 權杖 (主控台)
<a name="enable-hw-mfa-for-own-iam-user"></a>

 您可以從 AWS 管理主控台啟用您自己的硬體 TOTP 權杖。

**注意**  
在您可以啟用硬體 TOTP 權杖之前，您必須擁有裝置的實體存取權。

**要啟用您 IAM 使用者的硬體 TOTP 權杖 (主控台)**

1. 使用 AWS 您的帳戶 ID 或帳戶別名、IAM 使用者名稱和密碼登入 [IAM 主控台](https://console.aws.amazon.com/iam)。
**注意**  
為了方便起見， AWS 登入頁面會使用瀏覽器 Cookie 來記住您的 IAM 使用者名稱和帳戶資訊。如果您先前以不同的使用者身分登入，請選擇在頁面底部附近的 **Sign in to a different account** (登入不同的帳戶)，返回主要登入頁面。從那裡，您可以輸入 AWS 您的帳戶 ID 或帳戶別名，以重新導向至您帳戶的 IAM 使用者登入頁面。

   若要取得您的 AWS 帳戶 ID，請聯絡您的管理員。

1. 在右上方的導覽列中，選擇您的使用者名稱，然後選擇 **安全憑證** 。  
![\[AWS 管理主控台 安全登入資料連結\]](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/security-credentials-user.shared.console.png)

1. 在 **AWS IAM credentials** ( IAM 憑證) 索引標籤上，在 **Multi-factor authentication (MFA)** (多重要素驗證 (MFA)) 區段，選擇 **Assign MFA device** (指派 MFA 裝置)。

1. 在精靈中，輸入一個**裝置名稱**，然後選取 **Hardware TOTP token** (硬體 TOTP 權杖)，再選擇 **Next** (下一步)。

1. 輸入裝置序號。序號通常位於裝置的背面。

1. 在 **MFA code 1 (MFA 代碼 1)** 方塊中，輸入 MFA 裝置顯示的六位數字。您可能需要按下裝置正面的按鈕以顯示數字。  
![\[IAM 儀表板，MFA 裝置\]](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/MFADevice.png)

1. 當裝置在重新整理代碼時，等候 30 秒時間後，在 **MFA code 2 (MFA 代碼 2)** 方塊中輸入六位數字。您可能需要再次按下裝置正面的按鈕以顯示第二個數字。

1. 選擇 **Add MFA** (新增 MFA)。
**重要**  
產生驗證代碼之後立即提交您的請求。如果在產生代碼後等待很長時間才提交請求，MFA 裝置會成功地與使用者建立關聯，但 MFA 裝置卻變成不同步。會發生這種情況是因為定時式的一次性密碼 (TOTP) 在過了一小段時間後就會過期。這種情況下，您可以[重新同步裝置](id_credentials_mfa_sync.md)。

裝置已準備好與 搭配使用 AWS。如需與 AWS 管理主控台一起使用 MFA 的詳細資訊，請參閱 [啟用 MFA 的登入](console_sign-in-mfa.md)。

## 啟用另一個 IAM 使用者的硬體 TOTP 權杖 (主控台)
<a name="enable-hw-mfa-for-iam-user"></a>

 您可以從 AWS 管理主控台啟用另一個 IAM 使用者的硬體 TOTP 權杖。

**要啟用另一個 IAM 使用者的硬體 TOTP 權杖 (主控台)**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**使用者** 。

1. 選擇要為其啟用 MFA 的使用者名稱。

1. 選擇 **安全憑證** 標籤。在 **Multi-Factor Authentication (MFA)** (多重要素驗證 (MFA)) 區段下方，選擇 **Assign MFA device** (指派 MFA 裝置)。

1. 在精靈中，輸入一個**裝置名稱**，然後選取 **Hardware TOTP token** (硬體 TOTP 權杖)，再選擇 **Next** (下一步)。

1. 輸入裝置序號。序號通常位於裝置的背面。

1. 在 **MFA code 1 (MFA 代碼 1)** 方塊中，輸入 MFA 裝置顯示的六位數字。您可能需要按下裝置正面的按鈕以顯示數字。  
![\[IAM 儀表板，MFA 裝置\]](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/MFADevice.png)

1. 當裝置在重新整理代碼時，等候 30 秒時間後，在 **MFA code 2 (MFA 代碼 2)** 方塊中輸入六位數字。您可能需要再次按下裝置正面的按鈕以顯示第二個數字。

1. 選擇 **Add MFA** (新增 MFA)。
**重要**  
產生驗證代碼之後立即提交您的請求。如果在產生代碼後等待很長時間才提交請求，MFA 裝置會成功地與使用者建立關聯，但 MFA 裝置卻變成不同步。會發生這種情況是因為定時式的一次性密碼 (TOTP) 在過了一小段時間後就會過期。這種情況下，您可以[重新同步裝置](id_credentials_mfa_sync.md)。

裝置已準備好與 搭配使用 AWS。如需與 AWS 管理主控台一起使用 MFA 的詳細資訊，請參閱 [啟用 MFA 的登入](console_sign-in-mfa.md)。

## 取代實體 MFA 裝置
<a name="replace-phys-mfa"></a>

您的 AWS 帳戶根使用者 和 IAM 使用者一次最多可以有八個 MFA 裝置指派給使用者[目前支援的 MFA 類型](https://aws.amazon.com/iam/features/mfa/)任意組合。如果使用者遺失裝置或基於任何原因需要汰換，您必須先停用舊裝置。然後，再為使用者加入新的裝置。
+ 如需停用目前與使用者相關聯的裝置，請參閱 [停用 MFA 裝置](id_credentials_mfa_disable.md)。
+ 若要新增 IAM 使用者適用的替代硬體 TOTP 權杖，請遵循本主題稍早介紹的 [啟用另一個 IAM 使用者的硬體 TOTP 權杖 (主控台)](#enable-hw-mfa-for-iam-user) 程序。
+ 若要為 新增替換硬體 TOTP 權杖 AWS 帳戶根使用者，請遵循本主題[針對根使用者啟用硬體 TOTP 權杖 (主控台)](enable-hw-mfa-for-root.md)先前程序中的步驟。

# 在 AWS CLI 或 AWS API 中指派 MFA 裝置
<a name="id_credentials_mfa_enable_cliapi"></a>

您可以使用 AWS CLI 命令或 AWS API 操作，為 IAM 使用者啟用虛擬 MFA 裝置。您無法使用 AWS 帳戶根使用者 AWS CLI、 AWS API、Tools for Windows PowerShell 或任何其他命令列工具為 啟用 MFA 裝置。不過，您可以使用 AWS 管理主控台 為根使用者啟用 MFA 裝置。

當您從 啟用 MFA 裝置時 AWS 管理主控台，主控台會為您執行多個步驟。如果您改為使用 AWS CLI、Tools for Windows PowerShell 或 AWS API 建立虛擬裝置，則必須以正確的順序手動執行步驟。例如，如果要建立虛擬 MFA 裝置，則必須建立 IAM 物件，將程式碼擷取為字串或 QR 碼圖形，然後同步該裝置並將其與 IAM 使用者建立關聯。請參閱 [New-IAMVirtualMFADevice](https://docs.aws.amazon.com/powershell/latest/reference/Index.html?page=New-IAMVirtualMFADevice.html&tocid=New-IAMVirtualMFADevice) 中的**範例**章節以了解更多詳細資訊。對於實體裝置，您可以跳過建立步驟，直接同步該裝置並將其與使用者建立關聯。

您可以將標籤連接至 IAM 資源 (包括虛擬 MFA 裝置)，以識別、整理和控制其存取權。您只能在使用 AWS CLI 或 AWS API 時標記虛擬 MFA 裝置。

使用 SDK 或 CLI 的 IAM 使用者可以透過呼叫 [https://docs.aws.amazon.com/IAM/latest/APIReference/API_EnableMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_EnableMFADevice.html) 啟用額外的 MFA 裝置，或者透過呼叫 [https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeactivateMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeactivateMFADevice.html) 停用現有的 MFA 裝置。若要成功執行此動作，這些使用者必須先使用現有的 MFA 裝置呼叫 [https://docs.aws.amazon.com/STS/latest/APIReference/API_GetSessionToken.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetSessionToken.html) 並提交 MFA 代碼。此呼叫會傳回暫時的安全憑證，然後可使用此憑證簽署需要 MFA 身分驗證的 API 作業。如需要求和回應的範例，請參閱 [`GetSessionToken` - 不受信任環境中使用者的暫時憑證](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_getsessiontoken)。

**在 IAM 中建立虛擬裝置實體來代表虛擬 MFA 裝置**  
這些命令提供在以下許多命令中代替序號的裝置 ARN。
+ AWS CLI: [https://docs.aws.amazon.com/cli/latest/reference/iam/create-virtual-mfa-device.html](https://docs.aws.amazon.com/cli/latest/reference/iam/create-virtual-mfa-device.html) 
+ AWS API： [https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateVirtualMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateVirtualMFADevice.html)

**啟用 MFA 裝置以搭配 使用 AWS**  
這些命令會將裝置與 同步， AWS 並將其與使用者建立關聯。如果裝置是虛擬裝置，則將虛擬裝置的 ARN 做為序號使用。

**重要**  
產生驗證代碼之後立即提交您的請求。如果在產生代碼後等待很長時間才提交請求，MFA 裝置會成功地與使用者建立關聯，但 MFA 裝置卻變成不同步。會發生這種情況是因為定時式的一次性密碼 (TOTP) 在過了一小段時間後就會過期。如果發生這種情況，可以使用下面介紹的命令重新同步裝置。
+ AWS CLI: [https://docs.aws.amazon.com/cli/latest/reference/iam/enable-mfa-device.html](https://docs.aws.amazon.com/cli/latest/reference/iam/enable-mfa-device.html) 
+ AWS API： [https://docs.aws.amazon.com/IAM/latest/APIReference/API_EnableMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_EnableMFADevice.html)

**停用裝置**  
這些命令將取消裝置與使用者間的關聯並停用裝置。如果裝置是虛擬裝置，則將虛擬裝置的 ARN 做為序號使用。您也必須單獨刪除虛擬裝置實體。
+ AWS CLI: [https://docs.aws.amazon.com/cli/latest/reference/iam/deactivate-mfa-device.html](https://docs.aws.amazon.com/cli/latest/reference/iam/deactivate-mfa-device.html) 
+ AWS API： [https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeactivateMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeactivateMFADevice.html)

**列出虛擬 MFA 裝置實體**  
使用這些命令來列出虛擬 MFA 裝置的實體。
+ AWS CLI: [https://docs.aws.amazon.com/cli/latest/reference/iam/list-virtual-mfa-devices.html](https://docs.aws.amazon.com/cli/latest/reference/iam/list-virtual-mfa-devices.html) 
+ AWS API： [https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListVirtualMFADevices.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListVirtualMFADevices.html)

**標記虛擬 MFA 裝置**  
使用這些指令來標記虛擬 MFA 裝置。
+ AWS CLI: [https://docs.aws.amazon.com/cli/latest/reference/iam/tag-mfa-device.html](https://docs.aws.amazon.com/cli/latest/reference/iam/tag-mfa-device.html) 
+ AWS API： [https://docs.aws.amazon.com/IAM/latest/APIReference/API_TagMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_TagMFADevice.html)

**列出虛擬 MFA 裝置的標籤**  
使用這些命令列出連接至虛擬 MFA 裝置的標籤。
+ AWS CLI: [https://docs.aws.amazon.com/cli/latest/reference/iam/list-mfa-device-tags.html](https://docs.aws.amazon.com/cli/latest/reference/iam/list-mfa-device-tags.html) 
+ AWS API： [https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListMFADeviceTags.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListMFADeviceTags.html)

**取消標記虛擬 MFA 裝置**  
使用這些命令移除連接至虛擬 MFA 裝置的標籤。
+ AWS CLI: [https://docs.aws.amazon.com/cli/latest/reference/iam/untag-mfa-device.html](https://docs.aws.amazon.com/cli/latest/reference/iam/untag-mfa-device.html) 
+ AWS API： [https://docs.aws.amazon.com/IAM/latest/APIReference/API_UntagMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UntagMFADevice.html)

**重新同步 MFA 裝置**  
如果裝置正在產生 不接受的代碼，請使用這些命令 AWS。如果裝置是虛擬裝置，則將虛擬裝置的 ARN 做為序號使用。
+ AWS CLI: [https://docs.aws.amazon.com/cli/latest/reference/iam/resync-mfa-device.html](https://docs.aws.amazon.com/cli/latest/reference/iam/resync-mfa-device.html) 
+ AWS API： [https://docs.aws.amazon.com/IAM/latest/APIReference/API_ResyncMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ResyncMFADevice.html)

**刪除 IAM 中的虛擬 MFA 裝置實體**  
在裝置與使用者取消關聯後，您可以刪除裝置實體。
+ AWS CLI: [https://docs.aws.amazon.com/cli/latest/reference/iam/delete-virtual-mfa-device.html](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-virtual-mfa-device.html) 
+ AWS API： [https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteVirtualMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteVirtualMFADevice.html)

**復原遺失或無法運作的虛擬 MFA 裝置**  
有時，主控虛擬 MFA 應用程式的使用者的裝置會發生遺失、遭到替換，或無法運作。當這種情況發生時，使用者無法自行復原。使用者必須聯絡管理員以停用裝置。如需詳細資訊，請參閱[在 IAM 中復原受 MFA 保護的身分](id_credentials_mfa_lost-or-broken.md)。

# 檢查 MFA 狀態
<a name="id_credentials_mfa_checking-status"></a>

使用 IAM 主控台來檢查 AWS 帳戶根使用者 或 IAM 使用者是否已啟用有效的 MFA 裝置。

**若要查看根使用者的 MFA 狀態**

1.  AWS 管理主控台 使用您的根使用者憑證登入 ，然後在 開啟 IAM 主控台[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在右上方的導覽列中，選擇您的使用者名稱，然後選擇 **安全憑證** 。

1. 檢查 **多重要素驗證 (MFA)** 下方，查看 MFA 是否已啟用或停用。如果 MFA 尚未啟動，則會顯示提醒符號 (![\[Alert icon\]](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/console-alert-icon.console.png)) 

如果您想要啟用 MFA 帳戶，請參閱下列其中一項：
+ [針對根使用者啟用虛擬 MFA 裝置 (主控台)](enable-virt-mfa-for-root.md)
+ [為根使用者啟用通行密鑰或安全金鑰 (主控台)](enable-fido-mfa-for-root.md)
+ [針對根使用者啟用硬體 TOTP 權杖 (主控台)](enable-hw-mfa-for-root.md)

**查看 IAM 使用者的 MFA 狀態**

1. 在 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇 **Users** (使用者)。

1. 如有必要，請透過完成以下步驟將 **MFA** 欄新增到使用者表格：

   1. 在最右側的表格上方，選擇設定圖示 (![\[Settings icon\]](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/console-settings-icon.console.png))。

   1. 在 **Manage Columns (管理欄)** 中，選取 **MFA**。

   1. (選用) 清除您不想在使用者資料表中顯示的任何資料欄標題的核取方塊。

   1. 選擇 **Close (關閉)** 返回使用者清單。

1. **MFA** 欄告訴您有關已啟用的 MFA 裝置。如果沒有給使用者作用中的 MFA 裝置，則主控台會顯示 **None (無)**。如果使用者已啟用 MFA 裝置，則 **MFA** 欄顯示啟用裝置的類型值為 **Virtual** (虛擬)、**Security Key** (安全金鑰)、**Hardware** (硬體) 或 **SMS**。
**注意**  
AWS 結束對啟用 SMS 多重要素驗證 (MFA) 的支援。建議擁有使用 SMS 簡訊式 MFA 的 IAM 使用者的客戶改為使用下列任一種替代方式：[虛擬 (軟體式) MFA 裝置](id_credentials_mfa_enable_virtual.md)、[FIDO 安全性金鑰](id_credentials_mfa_enable_fido.md)或[硬體 MFA 裝置](id_credentials_mfa_enable_physical.md)。您可以使用已分配的 SMS MFA 裝置來識別帳戶中的使用者。為此，請前往 IAM 主控台，從導覽窗格中選擇 **Users** (使用者)，然後在表的 **MFA** 列中尋找具有 **SMS** 的使用者。

1. 若要查看有關使用者的 MFA 裝置的其他資訊，請選擇要檢查其 MFA 狀態的使用者名稱。然後選擇 **Security credentials** (安全憑證) 索引標籤。

1. 如果沒有給使用者作用中的 MFA 裝置，則主控台會顯示 **無 MFA 裝置。在**多重要素驗證 (MFA) **區段中指派 MFA 裝置來改善 AWS 環境的安全性**。如果使用者有已啟用的 MFA 裝置，則 **Multi-factor authentication (MFA)** (多重要素驗證 (MFA)) 區段會顯示有關這些裝置的詳細資訊：
   + 裝置名稱
   + 裝置類型
   + 裝置識別符，例如實體裝置的序號或 AWS 虛擬裝置的 中的 ARN
   + 何時建立裝置

若要移除或重新同步裝置，請選擇裝置旁的選項按鈕，然後選取 **Remove** (移除) 或 **Resync** (重新同步)。

如需有關啟用 MFA 的詳細資訊，請參閱以下內容：
+ [在 中指派虛擬 MFA 裝置 AWS 管理主控台](id_credentials_mfa_enable_virtual.md)
+ [在 中指派通行金鑰或安全金鑰 AWS 管理主控台](id_credentials_mfa_enable_fido.md)
+ [在 中指派硬體 TOTP 字符 AWS 管理主控台](id_credentials_mfa_enable_physical.md)

# 重新同步虛擬和硬體 MFA 裝置
<a name="id_credentials_mfa_sync"></a>

您可以使用 AWS 來重新同步虛擬和硬體多重要素驗證 (MFA) 裝置。如果您的裝置在您嘗試使用時未同步，登入嘗試失敗，且 IAM 提示您重新同步裝置。

**注意**  
FIDO 安全性金鑰不會失去同步。若 FIDO 安全性金鑰遺失或損壞，您可以停用它。如需停用任何 MFA 裝置類型的說明，請參閱 [為另一個 IAM 使用者停用 MFA 裝置 (主控台)](id_credentials_mfa_disable.md#deactivate-mfa-for-user)。

身為 AWS 管理員，如果 IAM 使用者的虛擬和硬體 MFA 裝置不同步，您可以重新同步它們。

如果您的 AWS 帳戶根使用者 MFA 裝置無法運作，您可以使用 IAM 主控台重新同步裝置，無論是否完成登入程序。如果您無法成功重新同步處理裝置，您可能需要為裝置取消關聯，再重新關聯此裝置。如需如何執行此作業的資訊，請參閱 [停用 MFA 裝置](id_credentials_mfa_disable.md) 和 [AWS IAM 中的多重要素驗證](id_credentials_mfa.md)。

**Topics**
+ [必要許可](#id_credentials_mfa_sync_console-permissions-required)
+ [重新同步虛擬及硬體 MFA 裝置 (IAM 主控台)](#id_credentials_mfa_sync_console)
+ [重新同步虛擬及硬體 MFA 裝置 (AWS CLI)](#id_credentials_mfa_sync_cli)
+ [重新同步虛擬和硬體 MFA 裝置 (AWS API)](#id_credentials_mfa_sync_api)

## 必要許可
<a name="id_credentials_mfa_sync_console-permissions-required"></a>

若要為自己的 IAM 使用者重新同步虛擬或硬體 MFA 裝置，您必須擁有以下政策的許可。此政策不允許您建立或停用裝置。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowListActions",
            "Effect": "Allow",
            "Action": [
                "iam:ListVirtualMFADevices"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowUserToViewAndManageTheirOwnUserMFA",
            "Effect": "Allow",
            "Action": [
                "iam:ListMFADevices",
                "iam:ResyncMFADevice"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "BlockAllExceptListedIfNoMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:ListMFADevices",
                "iam:ListVirtualMFADevices",
                "iam:ResyncMFADevice"
            ],
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}
```

------

## 重新同步虛擬及硬體 MFA 裝置 (IAM 主控台)
<a name="id_credentials_mfa_sync_console"></a>

您可以使用 IAM 主控台來重新同步虛擬及硬體 MFA 裝置。

**重新同步您 IAM 使用者的虛擬或硬體 MFA 裝置 (主控台)**

1. 使用 AWS 您的帳戶 ID 或帳戶別名、IAM 使用者名稱和密碼登入 [IAM 主控台](https://console.aws.amazon.com/iam)。
**注意**  
為了方便起見， AWS 登入頁面會使用瀏覽器 Cookie 來記住您的 IAM 使用者名稱和帳戶資訊。如果您先前以不同的使用者身分登入，請選擇在頁面底部附近的 **Sign in to a different account** (登入不同的帳戶)，返回主要登入頁面。在那裡，您可以輸入要重新導向至 AWS 您帳戶的 IAM 使用者登入頁面的帳戶 ID 或帳戶別名。

   若要取得您的 AWS 帳戶 ID，請聯絡您的管理員。

1. 在右上方的導覽列中，選擇您的使用者名稱，然後選擇 **安全憑證** 。  
![\[AWS 管理主控台安全登入資料連結\]](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/security-credentials-user.shared.console.png)

1. 在 **AWS IAM 憑證** 標籤的 **多重要素驗證 (MFA)** 區段選擇 MFA 裝置旁的選項按鈕，然後選擇 **重新同步**。

1. 將裝置接下來連續產生的兩個代碼輸入 **MFA code 1 (MFA 代碼 1)** 和 **MFA code 2 (MFA 代碼 2)**。然後選擇 **Resync** (重新同步)。
**重要**  
產生代碼之後立即提交您的請求。如果您產生代碼，然後等太久而無法提交請求、請求會出現運作，但裝置保持未同步。會發生這種情況是因為定時式的一次性密碼 (TOTP) 在過了一小段時間後就會過期。

**重新同步另一個 IAM 使用者的虛擬或硬體 MFA 裝置 (主控台)**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇 **Users (使用者)**，然後選擇需要重新同步 MFA 裝置的使用者名稱。

1. 選擇 **Security credentials** (安全憑證) 索引標籤。在 **多重要素驗證 (MFA)** 區段中選擇 MFA 裝置旁的選項按鈕，然後選擇 **重新同步**。

1. 將裝置接下來連續產生的兩個代碼輸入 **MFA code 1 (MFA 代碼 1)** 和 **MFA code 2 (MFA 代碼 2)**。然後選擇 **Resync** (重新同步)。
**重要**  
產生代碼之後立即提交您的請求。如果您產生代碼，然後等太久而無法提交請求、請求會出現運作，但裝置保持未同步。會發生這種情況是因為定時式的一次性密碼 (TOTP) 在過了一小段時間後就會過期。

**登入前重新同步根使用者 MFA (主控台)**

1. 在 **Amazon Web Services Sign In With Authentication Device** (使用身分驗證裝置登入 Amazon Web Services) 頁面上，選擇 **Having problems with your authentication device? (您的身分驗證裝置登有問題？ )。Click here (請點選此處)**。
**注意**  
您可能會看到不同的文字，例如**使用 MFA 登入**和**對您的身分驗證裝置進行疑難排解**。不過，其功能是相同的。

1. 在 **Re-Sync With Our Servers (與我們的伺服器重新同步)** 區段中，將裝置接下來連續產生的兩個代碼輸入 **MFA code 1 (MFA 代碼 1)** 和 **MFA code 2 (MFA 代碼 2)**。然後選擇 **Re-sync authentication device (重新同步身分驗證裝置)**。

1. 如果必要，再次輸入密碼，然後選擇**登入**。然後，使用您的 MFA 裝置完成登入。

**登入後重新同步根使用者 MFA 裝置 (主控台)**

1. 選擇**根使用者**並輸入 AWS 帳戶 您的電子郵件地址，以帳戶擁有者身分登入 [IAM 主控台](https://console.aws.amazon.com/iam/)。在下一頁中，輸入您的密碼。
**注意**  
根使用者無法登入 **以 IAM 使用者身分登入** 頁面。如果您看到 **以 IAM 使用者身分登入** 頁面，請選擇頁面底部附近的 **使用根使用者電子郵件登入**。如需以根使用者身分登入的說明，請參閱*AWS 登入 《 使用者指南*》中的[以根使用者 AWS 管理主控台 身分登入](https://docs.aws.amazon.com/signin/latest/userguide/introduction-to-          root-user-sign-in-tutorial.html) 。

1. 在導覽列右側選擇您的帳戶名稱，然後選擇 **安全憑證** 。如有需要，選擇 **Continue to Security Credentials** (繼續至安全憑證)。  
![\[在導覽選單中的安全憑證\]](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/security-credentials-root.shared.console.png)

1. 展開頁面上的 **Multi-factor authentication (MFA)** (多重要素驗證 (MFA)) 區段。

1. 選擇裝置旁的選項按鈕，然後選取 **Resync** (重新同步)。

1. 在 **Resync MFA device** (重新同步 MFA 裝置) 對話方塊中，將裝置接下來連續產生的兩個代碼輸入 **MFA code 1** (MFA 代碼 1) 和 **MFA code 2** (MFA 代碼 2)。然後選擇 **Resync** (重新同步)。
**重要**  
產生代碼之後立即提交您的請求。如果在產生代碼後等待很長時間才提交請求，MFA 裝置會成功地與使用者建立關聯，但 MFA 裝置將不同步。會發生這種情況是因為定時式的一次性密碼 (TOTP) 在過了一小段時間後就會過期。

## 重新同步虛擬及硬體 MFA 裝置 (AWS CLI)
<a name="id_credentials_mfa_sync_cli"></a>

您可以從 AWS CLI重新同步虛擬及硬體 MFA 裝置。

**重新同步 IAM 使用者的虛擬或硬體 MFA 裝置 (AWS CLI)**  
在命令提示字元中，發出 [aws iam resync-mfa-device](https://docs.aws.amazon.com/cli/latest/reference/iam/resync-mfa-device.html) 命令：
+ 虛擬 MFA 裝置：將裝置的 Amazon Resource Name (ARN) 指定為序號。

  ```
  aws iam resync-mfa-device --user-name Richard --serial-number arn:aws:iam::123456789012:mfa/RichardsMFA --authentication-code1 123456 --authentication-code2 987654
  ```
+ 硬體 MFA 裝置：將硬體裝置的序號指定為序號。格式為廠商特定。例如，您可以從 Amazon 購買 gemalto 權杖。其序號通常是四個字母，後面接著四個數字。

  ```
  aws iam resync-mfa-device --user-name Richard --serial-number ABCD12345678 --authentication-code1 123456 --authentication-code2 987654
  ```

**重要**  
產生代碼之後立即提交您的請求。如果您產生代碼，然後因等太久而無法提交請求、請求會因代碼在不久後過期而失敗。

## 重新同步虛擬和硬體 MFA 裝置 (AWS API)
<a name="id_credentials_mfa_sync_api"></a>

IAM 有一個執行同步化的 API 呼叫。在這種情況下，建議您提供您的虛擬及硬體 MFA 裝置使用者許可，讓其存取此 API 呼叫。然後根據該 API 呼叫建置工具，讓使用者在需要時能隨時重新同步他們的裝置。

**重新同步 IAM 使用者 (AWS API) 的虛擬或硬體 MFA 裝置**
+ 傳送 [ResyncMFADevice](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ResyncMFADevice.html) 請求。

# 停用 MFA 裝置
<a name="id_credentials_mfa_disable"></a>

如果您無法將多重要素驗證 (MFA) 裝置作為 IAM 使用者登入，請聯絡您的管理員尋求協助。

身為管理員，您可以停用另一個 IAM 使用者的裝置。這可讓使用者在不使用 MFA 的情況下登入。在更換 MFA 裝置或裝置暫時不可用時，您可以將此做為臨時解決方案。但是，我們建議您盡快為使用者啟用新的裝置。若要了解如何啟用新的 MFA 裝置，請參閱 [AWS IAM 中的多重要素驗證](id_credentials_mfa.md)。

**注意**  
如果您使用 API AWS CLI 或 從中刪除使用者 AWS 帳戶，則必須停用或刪除使用者的 MFA 裝置。您將此變更做為移除使用者的過程的一部分。如需有關移除使用者的詳細資訊，請參閱 [移除或停用 IAM 使用者](id_users_remove.md)。

**Topics**
+ [停用 MFA 裝置 (主控台)](#deactive-mfa-console)
+ [停用 MFA 裝置 (AWS CLI)](#deactivate-mfa-cli)
+ [停用 MFA 裝置 (AWS API)](#deactivate-mfa-api)

## 停用 MFA 裝置 (主控台)
<a name="deactive-mfa-console"></a><a name="deactivate-mfa-for-user"></a>

**為另一個 IAM 使用者停用 MFA 裝置 (主控台)**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇 **Users** (使用者)。

1. 若要為使用者停用 MFA 裝置，請選擇要移除其 MFA 的使用者的名稱。

1. 選擇 **Security credentials** (安全憑證) 索引標籤。

1. 在 **多重要素驗證 (MFA)** 下方選擇 MFA 裝置旁的選項按鈕、選擇 **移除**，然後選擇 **移除**。

   裝置已從中移除 AWS。在重新啟用請求並與 AWS 使用者或 建立關聯之前，它無法用來登入或驗證請求 AWS 帳戶根使用者。<a name="deactivate-mfa-for-root"></a>

**停用 AWS 帳戶根使用者 （主控台） 的 MFA 裝置**

1. 選擇**根使用者**並輸入 AWS 帳戶 您的電子郵件地址，以帳戶擁有者身分登入 [IAM 主控台](https://console.aws.amazon.com/iam/)。在下一頁中，輸入您的密碼。
**注意**  
根使用者無法登入 **以 IAM 使用者身分登入** 頁面。如果您看到 **以 IAM 使用者身分登入** 頁面，請選擇頁面底部附近的 **使用根使用者電子郵件登入**。如需以根使用者身分登入的說明，請參閱*AWS 登入 《 使用者指南*》中的[以根使用者 AWS 管理主控台 身分登入](https://docs.aws.amazon.com/signin/latest/userguide/introduction-to-          root-user-sign-in-tutorial.html) 。

1. 在導覽列右側選擇您的帳戶名稱，然後選擇 **安全憑證** 。如有需要，選擇 **Continue to Security Credentials** (繼續至安全憑證)。  
![\[在導覽選單中的安全憑證\]](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/security-credentials-root.shared.console.png)

1. 在 **Multi-factor authentication (MFA)** (多重要素驗證 (MFA)) 區段中，選擇您想要停用的 MFA 裝置旁的選項按鈕，然後選擇 **Remove** (移除)。

1. 選擇**移除**。

   已為 AWS 帳戶停用 MFA 裝置。檢查與您的 相關聯的電子郵件， AWS 帳戶 以取得來自 Amazon Web Services 的確認訊息。該電子郵件會通知您，Amazon Web Services 多重要素驗證 (MFA) 已停用。訊息來自於 `@amazon.com` 或 `@aws.amazon.com`。

**注意**  
當您透過 AWS 管理主控台 或在登入程序期間新增新的虛擬 MFA 裝置時， AWS 帳戶 將刪除 中未指派的虛擬 MFA 裝置。未指派的虛擬 MFA 裝置是指位於您帳戶中但帳戶根使用者或 IAM 使用者並未在登入程序中使用的裝置。將這些裝置刪除後，便可將新的虛擬 MFA 裝置新增至您的帳戶。刪除這些裝置後，您還可以重複使用裝置名稱。

## 停用 MFA 裝置 (AWS CLI)
<a name="deactivate-mfa-cli"></a>

**為 IAM 使用者停用 MFA 裝置 (AWS CLI)**
+ 執行此命令：[https://docs.aws.amazon.com/cli/latest/reference/iam/deactivate-mfa-device.html](https://docs.aws.amazon.com/cli/latest/reference/iam/deactivate-mfa-device.html)

## 停用 MFA 裝置 (AWS API)
<a name="deactivate-mfa-api"></a>

**停用 IAM 使用者的 MFA 裝置 (AWS API)**
+ 呼叫此操作：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeactivateMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeactivateMFADevice.html)

# 在 IAM 中復原受 MFA 保護的身分
<a name="id_credentials_mfa_lost-or-broken"></a>

如果您的[虛擬 MFA 裝置](id_credentials_mfa_enable_virtual.md)或[硬體 TOTP 字符](id_credentials_mfa_enable_physical.md)似乎正常運作，但您無法使用它來存取您的 AWS 資源，則它可能會與 不同步 AWS。如需同步虛擬 MFA 裝置或硬體 MFA 裝置的資訊，請參閱 [重新同步虛擬和硬體 MFA 裝置](id_credentials_mfa_sync.md)。[FIDO 安全性金鑰](id_credentials_mfa_enable_fido.md)不會失去同步。

如果 AWS 帳戶根使用者 的 [MFA 裝置](id_credentials_mfa.md)遺失、損壞或無法運作，您可以復原對帳戶的存取。IAM 使用者必須聯絡管理員以停用裝置。

**重要**  
我們建議您啟用多個 MFA 裝置。註冊多個 MFA 裝置有助於確保在裝置遺失或損壞時持續存取。您的 AWS 帳戶根使用者 和 IAM 使用者可以註冊最多八個任何類型的 MFA 裝置。

## 先決條件 – 使用另一個 MFA 裝置
<a name="mfa-lost-or-broken-prerequisites"></a>

如果您的[多重要素驗證 (MFA) 裝置](id_credentials_mfa.md)遺失、損毀或無法運作，您可以使用另一個註冊到相同根使用者或 IAM 使用者的 MFA 裝置登入。

**若要使用另一個 MFA 裝置登入**

1. 使用您的 AWS 帳戶 ID 或帳戶別名和密碼登入 [AWS 管理主控台](url-comsole-domain;iam)。

1. 在**需要其他驗證**頁面或**多重要素驗證**頁面上，選擇**嘗試其他 MFA 方法**。

1. 使用您選取的 MFA 裝置類型進行驗證。

1. 下一個步驟根據您是否成功使用替代 MFA 裝置登入而有所不同。
   + 如果您已成功登入，您可以[重新同步虛擬和硬體 MFA 裝置](id_credentials_mfa_sync.md)，這可能會解決此問題。如果您的 MFA 裝置遺失或損壞，您可以予以停用。如需停用任何 MFA 裝置類型的說明，請參閱 [停用 MFA 裝置](id_credentials_mfa_disable.md)。
   + 如果您無法使用 MFA 登入，請使用[復原根使用者 MFA 裝置](#root-mfa-lost-or-broken)或[復原 IAM 使用者 MFA 裝置](#iam-user-mfa-lost-or-broken)中的步驟來復原受 MFA 保護的身分。



## 復原根使用者 MFA 裝置
<a name="root-mfa-lost-or-broken"></a>

如果無法透過 MFA 登入，您可以使用其他身分驗證方法進行登入，即採用您帳戶中註冊的電子郵件和主要聯絡人電話號碼進行身分驗證。

確認在使用其他驗證要素以根使用者身分登入之前，您可以存取與您的帳戶關聯的電子郵件和主要聯絡人電話號碼。如果需要更新主要聯絡人電話號碼，請使用*管理員*存取權 (而非根使用者) 以 IAM 使用者的身分登入。如需了解有關更新帳戶聯絡人資訊的更多指示，請參閱 *AWS Billing 使用者指南*中的[編輯聯絡人資訊](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-update-contact-primary.html)。如果無權存取電子郵件和主要聯絡人電話號碼，則您必須聯絡 [AWS 支援](https://support.aws.amazon.com/#/contacts/aws-mfa-support)。

**重要**  
建議您保持電子郵件地址及聯絡人電話號碼與您的根使用者的關聯處於最新狀態，以成功地復原帳戶。如需詳細資訊，請參閱*《AWS 帳戶管理 參考指南》*中的[更新您 AWS 帳戶的主要連絡人](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-update-contact-primary.html)。

**使用身分驗證的替代因素做為 登入 AWS 帳戶根使用者**

1.  選擇**根使用者**並輸入 AWS 帳戶 您的電子郵件地址，以帳戶擁有者[AWS 管理主控台](https://console.aws.amazon.com/)身分登入 。在下一頁中，輸入您的密碼。

1. 在**需要其他驗證**頁面上，選取要用來進行驗證的 MFA 方法，然後選擇**下一步**。
**注意**  
您可能會看到替代文字，例如**使用 MFA 登入**、**對您的驗證裝置進行故障診斷**，或**對 MFA 進行故障診斷**，但功能是相同的。您不能使用其他驗證要素來驗證您的帳戶電子郵件地址和主要聯絡人電話號碼，請聯絡 [AWS 支援](https://support.aws.amazon.com/#/contacts/aws-mfa-support) 停用您的 MFA 裝置。

1. 視您使用的 MFA 類型而定，您會看到不同的頁面，但 **MFA 疑難排解**選項的功能相同。在**需要其他驗證**頁面或**多重要素驗證**頁面上，選擇 **MFA 疑難排解**。

1. 如果必要，再次輸入密碼，然後選擇 **Sign in (登入)**。

1. 在**使用其他驗證要素登入**區段中的**驗證裝置疑難排解**頁面上，選擇**使用其他要素登入**。

1. 在**使用其他驗證要素登入**頁面上，透過驗證電子郵件地址來驗證您的帳戶，然後選擇**傳送驗證電子郵件**。

1. 檢查與您的 相關聯的電子郵件 AWS 帳戶 是否有來自 Amazon Web Services (recover-mfa-no-reply@verify.signin.aws) 的訊息。請遵循電子郵件中的指示進行。

   如果您沒看到帳戶中有電子郵件，請檢查您的垃圾郵件資料夾，或返回瀏覽器，然後選擇 **Resend the email (重新傳送電子郵件)**。

1. 驗證電子郵件地址後，您可以繼續驗證您的帳戶。若要驗證主要聯絡人電話號碼，請選擇 **Call me now** (立即呼叫我)。

1. 接聽來自 的呼叫， AWS 並在出現提示時，在電話鍵盤上輸入網站上的 AWS 6 位數號碼。

   如果您沒有收到來自 的通話 AWS，請選擇**登入**以再次登入主控台並重新開始。或者，請參閱[遺失或無法使用的多重要素驗證 (MFA) 裝置](https://support.aws.amazon.com/#/contacts/aws-mfa-support)來聯絡支援中心以尋求協助。

1. 驗證您的電話號碼之後，您可以選擇 **Sign in to the console (登入主控台)** 登入您的帳戶。

1. 下一步取決於您使用的 MFA 類型：
   + 針對虛擬 MFA 裝置，請從您的裝置移除帳戶。然後，請前往 [AWS Security Credentials](https://console.aws.amazon.com/iam/home?#security_credential) (AWS 安全憑證) 頁面，並刪除舊 MFA 虛擬裝置實體，再建立新的實體。
   + 針對 FIDO 安全性金鑰，請前往 [AWS Security Credentials](https://console.aws.amazon.com/iam/home?#security_credential) (安全憑證) 頁面並停用舊 FIDO 安全性金鑰，然後再啟用新金鑰。
   + 針對硬體 TOTP 權杖，請聯絡第三方供應商，請其協助修復或更換裝置。您可以繼續使用其他身分驗證方法登入，直到收到新的裝置為止。擁有新的硬體 MFA 裝置之後，前往 [AWS 安全憑證](https://console.aws.amazon.com/iam/home?#security_credential)頁面，並刪除舊 MFA 裝置。
**注意**  
您無須將遺失或遭竊的 MFA 裝置更換成相同類型的裝置。例如，若您損壞了 FIDO 安全金鑰並訂購了新的金鑰，您可以使用虛擬 MFA 或硬體 TOTP 權杖，直到新的 FIDO 金鑰到達。

**重要**  
如果您的 MFA 裝置遺失或遭竊，請在登入並建立取代用 MFA 裝置後變更您的根使用者密碼。攻擊者可能竊取了驗證裝置，也可能擁有您目前的密碼。如需詳細資訊，請參閱[變更 的密碼 AWS 帳戶根使用者](root-user-password.md)。

## 復原 IAM 使用者 MFA 裝置
<a name="iam-user-mfa-lost-or-broken"></a>

如果您是無法使用 MFA 進行登入的 IAM 使用者，則無法自行復原 MFA 裝置。您必須聯絡管理員以停用裝置。然後，您就可以啟用新裝置。

**以 IAM 使用者身分取得 MFA 裝置的相關協助**

1. 請聯絡 AWS 管理員或為您提供 IAM 使用者使用者名稱和密碼的其他人員。管理員必須依 [停用 MFA 裝置](id_credentials_mfa_disable.md) 中所述停用 MFA 裝置，如此您才可以登入。

1. 下一步取決於您使用的 MFA 類型：
   + 針對虛擬 MFA 裝置，請從您的裝置移除帳戶。然後依 [在 中指派虛擬 MFA 裝置 AWS 管理主控台](id_credentials_mfa_enable_virtual.md) 所述啟用虛擬裝置。
   + 針對 FIDO 安全金鑰，請聯絡第三方供應商，請其協助更換裝置。當您收到新的 FIDO 安全性金鑰時，請遵循 [在 中指派通行金鑰或安全金鑰 AWS 管理主控台](id_credentials_mfa_enable_fido.md) 中所述的程序來啟用它。
   + 針對硬體 TOTP 權杖，請聯絡第三方供應商，請其協助修復或更換裝置。在擁有新的實體 MFA 裝置後，依 [在 中指派硬體 TOTP 字符 AWS 管理主控台](id_credentials_mfa_enable_physical.md) 所述啟用裝置。
**注意**  
您無須將遺失或遭竊的 MFA 裝置更換成相同類型的裝置。您最多可以有八台任意組合的 MFA 裝置。例如，若您損壞了 FIDO 安全金鑰並訂購了新的金鑰，您可以使用虛擬 MFA 或硬體 TOTP 權杖，直到新的 FIDO 金鑰到達。

1. 若您的 MFA 裝置遺失或遭竊，請同時變更您的 密碼，以防攻擊者竊取身分驗證裝置，同時還可能擁有您目前的密碼。如需詳細資訊，請參閱[管理 IAM 使用者的密碼](id_credentials_passwords_admin-change-user.md)

# 透過 MFA 實現安全的 API 存取
<a name="id_credentials_mfa_configure-api-require"></a>

利用 IAM 政策，可以指定允許使用者呼叫的 API 操作。您可以套用額外安全性，方法是先要求使用者透過多重要素驗證 (MFA) 進行身分驗證，然後再允許使用者執行特別敏感的動作。

例如，您可能擁有允許使用者執行 Amazon EC2 `RunInstances`、`DescribeInstances` 與 `StopInstances` 動作的政策。但您可能想要限制類似 的破壞性動作，`TerminateInstances`並確保使用者只有在使用 AWS MFA 裝置進行身分驗證時，才能執行該動作。

**Topics**
+ [概觀](#MFAProtectedAPI-overview)
+ [使用案例：跨帳戶委派的 MFA 防護](#MFAProtectedAPI-cross-account-delegation)
+ [使用案例：目前帳戶中 API 操作存取的 MFA 防護](#MFAProtectedAPI-user-mfa)
+ [使用案例：擁有以資源為基礎的政策之資源的 MFA 防護](#MFAProtectedAPI-resource-policies)

## 概觀
<a name="MFAProtectedAPI-overview"></a>

新增 MFA 防護到 API 操作將包括以下任務：

1. 管理員會為每個必須提出需要 AWS MFA 身分驗證之 API 請求的使用者設定 MFA 裝置。如需詳細資訊，請參閱[AWS IAM 中的多重要素驗證](id_credentials_mfa.md)。

1. 管理員會為使用者建立政策，其中包含檢查使用者是否使用 AWS MFA 裝置進行身分驗證的 `Condition` 元素。

1. 使用者呼叫其中一個支援 MFA 參數的 AWS STS API 操作：[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) 或 [GetSessionToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetSessionToken.html)。作為呼叫的一部分，使用者包含與其關聯的裝置的裝置識別碼。使用者也包含裝置產生之以時間為基礎的單次密碼 (TOTP)。在任一情況下，使用者都會取回稍後用來向 AWS發出其他請求的臨時安全憑證。
**注意**  
只有在服務支援臨時安全憑證時，才可使用該服務的 API 操作的 MFA 防護。如需這些服務的清單，請參閱[使用暫時安全憑證存取 AWS](https://docs.aws.amazon.com/STS/latest/UsingSTS/UsingTokens.html)。

如果授權失敗， 會 AWS 傳回存取遭拒錯誤訊息 （如同任何未經授權的存取）。使用受 MFA 保護的 API 政策時，如果使用者嘗試在沒有有效 MFA 身分驗證的情況下呼叫 API 操作， 會 AWS 拒絕存取政策中指定的 API 操作。如果 API 操作請求的時間戳記在政策中指定的允許範圍之外，也會拒絕該操作。使用者必須使用 MFA 代碼和裝置序號來請求新的臨時安全性憑證，並透過 MFA 重新進行身分驗證。

### 含有 MFA 條件的 IAM 政策
<a name="MFAProtectedAPI-policies"></a>

含有 MFA 條件的政策可連接到以下項目：
+ IAM 使用者或群組
+ 資源，例如 Amazon S3 儲存貯體、Amazon SQS 佇列或者 Amazon SNS 主題
+ 可由使用者擔任的 IAM 角色的信任政策

可使用政策中的 MFA 條件來檢查以下屬性：
+ 存在 - 如果只是驗證使用者是否已使用 MFA 進行身分驗證，請檢查 `aws:MultiFactorAuthPresent` 金鑰在 `Bool` 條件中是否為 `True`。只有在使用者使用短期憑證進行驗證時，索引鍵才會存在。長期憑證，例如存取金鑰，則不包括此鍵。
+ 持續時間 - 如果您只希望在 MFA 身分驗證後的指定時間內授予存取權限，請使用數值條件類型將 `aws:MultiFactorAuthAge` 索引鍵的有效期與某個值 (如 3600 秒) 進行比較。請注意，如果未使用 MFA，則 `aws:MultiFactorAuthAge` 索引鍵不會顯示。

以下範例顯示 IAM 角色的信任政策，該政策包含一個 MFA 條件，用於測試是否存在 MFA 身分驗證。使用此政策，來自 `Principal`元素中 AWS 帳戶 指定 (`ACCOUNT-B-ID`以有效的 AWS 帳戶 ID 取代） 的使用者可以擔任此政策所連接的角色。不過，如果使用者使用 MFA 進行身分驗證，這類的使用者只能擔任該角色。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Principal": {"AWS": "ACCOUNT-B-ID"},
    "Action": "sts:AssumeRole",
    "Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}}
  }
}
```

------

如需有關 MFA 條件類型的詳細資訊，請參閱[AWS 全域條件內容索引鍵](reference_policies_condition-keys.md)、[數位條件運算子](reference_policies_elements_condition_operators.md#Conditions_Numeric) 與 [用於檢查條件索引鍵是否存在的條件運算子](reference_policies_elements_condition_operators.md#Conditions_Null)。

### 在 GetSessionToken 和 AssumeRole 之間選擇
<a name="scenarios"></a>

AWS STS 提供兩種 API 操作，可讓使用者傳遞 MFA 資訊： `GetSessionToken`和 `AssumeRole`。使用者呼叫以獲取臨時安全憑證的 API 操作取決於適用於以下哪個案例。

**針對以下案例使用 `GetSessionToken`：**
+ 呼叫 API 操作，以存取 AWS 帳戶 與發出請求的 IAM 使用者相同的 中的資源。請注意，*只有在*`GetSessionToken`憑證請求中包含 MFA 資訊時，請求中的臨時憑證才能存取 IAM 和 AWS STS API 操作。由於 `GetSessionToken` 傳回的臨時憑證包含 MFA 資訊，因此您可以檢查由該憑證發出的個別 API 操作中的 MFA。
+ 存取受到以資源為基礎且包含 MFA 條件的政策所保護的資源。

`GetSessionToken` 操作的目的是使用 MFA 驗證使用者的身分。您不能使用政策來控制驗證操作。

**針對以下案例使用 `AssumeRole`：**
+ 呼叫存取相同的或不同的 AWS 帳戶中的資源的 API 操作。API 呼叫可以包含任何 IAM 或 AWS STS API。請注意，要保護存取，您可以在使用者擔任角色時強制執行 MFA。由 `AssumeRole` 傳回的臨時憑證未將 MFA 資訊包含在上下文中，因此您無法檢查 MFA 的單一 API 操作。這就是您必須使用 `GetSessionToken` 限制對受到以資源為基礎之政策保護的資源的存取的原因。

**注意**  
AWS CloudTrail 當 IAM 使用者使用 MFA 登入時， 日誌將包含 MFA 資訊。如果 IAM 使用者擔任 IAM 角色，CloudTrail 也會將 `mfaAuthenticated: true` 記錄在使用該擔任角色執行的動作的 `sessionContext` 屬性中。不過，CloudTrail 記錄與使用擔任角色的憑證進行 API 呼叫時 IAM 所需的記錄是分開的。如需詳細資訊，請參閱 [CloudTrail userIdentity 元素](https://docs.aws.amazon.com//awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html)。

本文件稍後將提供有關如何實施這些使用案例的詳細資訊。

### 有關受 MFA 保護的 API 存取的要點
<a name="MFAProtectedAPI-important-points"></a>

瞭解 API 操作的 MFA 防護有下列數個層面非常重要：
+ MFA 防護僅透過使用臨時安全性憑證供，而該憑證必須使用 `AssumeRole` 或 `GetSessionToken` 來取得。
+ 您無法搭配 AWS 帳戶根使用者 登入資料使用受 MFA 保護的 API 存取。
+ 無法搭配 U2F 安全性金鑰使用受 MFA 保護的 API 存取。
+ 聯合身分使用者無法獲指派 MFA 裝置以搭配 AWS 服務使用，因此無法存取 MFA 控制 AWS 的資源。(請查看下一要點。) 
+ 傳回暫時登入資料的其他 AWS STS API 操作不支援 MFA。對於 `AssumeRoleWithWebIdentity`和 `AssumeRoleWithSAML`，使用者由外部提供者進行驗證， AWS 無法判斷該提供者是否需要 MFA。對於 `GetFederationToken`，MFA 不一定要與特定使用者相關聯。
+ 同樣地，長期憑證 (IAM 使用者存取金鑰和根使用者存取金鑰) 無法用於受 MFA 保護的 API 存取，因為此類憑證不會過期。
+ 也可以在沒有 MFA 資訊的情況下呼叫 `AssumeRole` 與 `GetSessionToken`。在此情況下，呼叫者將取回臨時安全性憑證，但這些臨時憑證的工作階段資訊不會顯示使用 MFA 進行身分驗證的使用者。
+ 若要建立 API 操作的 MFA 防護，可將 MFA 條件加入到政策。政策必須包含 `aws:MultiFactorAuthPresent` 條件索引鍵，才能強制使用 MFA。對於跨帳戶委派，該角色的信任政策必須包含條件索引鍵。
+ 當您允許另一個 AWS 帳戶 存取您帳戶中的資源時，資源的安全性取決於受信任帳戶的組態 （另一個帳戶，而不是您的帳戶）。即使您要求多重要素驗證，也是如此。有權建立虛擬 MFA 裝置的可信帳戶中的任何身分都可以建構 MFA 宣告，以滿足角色信任政策的該部分。在允許另一個帳戶的成員存取需要多重要素驗證 AWS 的資源之前，您應該確保信任帳戶的擁有者遵循安全最佳實務。例如，信任的帳戶應該限制存取敏感 API 操作 (例如 MFA 裝置管理 API 操作) 至特定的信任身分。
+ 如果政策包含 MFA 條件，則在以下情況下將拒絕請求：使用者未進行 MFA 身分驗證或使用者提供了無效的 MFA 裝置識別碼或無效的 TOTP。

## 使用案例：跨帳戶委派的 MFA 防護
<a name="MFAProtectedAPI-cross-account-delegation"></a>

在此案例中，您想要將存取權委派給另一個帳戶中的 IAM 使用者，但前提是使用者已使用 AWS MFA 裝置進行身分驗證。如需有關跨帳戶委派的詳細資訊，請參閱 [角色術語和概念](id_roles.md#id_roles_terms-and-concepts)。

假設您有一個帳戶 A (擁有要存取的資源的信任帳戶)，其 IAM 使用者 Anaya 擁有管理員許可。她希望對帳戶 B (可信任的帳戶) 中的使用者 Richard 授予存取權，但希望確保 Richard 在擔任該角色之前已使用 MFA 進行身分驗證。

1. 在信任帳戶 A 中，Anaya 會建立名為 的 IAM 角色，`CrossAccountRole`並將角色信任政策中的委託人設定為帳戶 B 的帳戶 ID。信任政策會將 AWS STS 許可授予 `AssumeRole`動作。Anaya 也將 MFA 條件加入到信任政策中，如以下範例中所示。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": {
       "Effect": "Allow",
       "Principal": {"AWS": "ACCOUNT-B-ID"},
       "Action": "sts:AssumeRole",
       "Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}}
     }
   }
   ```

------

1. Anaya 在該角色新增一個許可政策，以指定允許該角色執行的操作。具有 MFA 防護的角色許可政策與任何其他角色許可政策沒有差別。以下範例顯示 Anaya 新增到角色的政策；它允許假定的使用者在帳戶 A 中的 `Books` 資料表上執行任何 Amazon DynamoDB 動作。此政策也允許 `dynamodb:ListTables` 動作，而這是在主控台中執行動作的必要項目。
**注意**  
該許可政策不包含 MFA 條件。了解 MFA 身分驗證僅用於確定使用者是否可以擔任此角色這點非常重要。在使用者擔任此角色後，將不會進行進一步的 MFA 檢查。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "TableActions",
               "Effect": "Allow",
               "Action": "dynamodb:*",
               "Resource": "arn:aws:dynamodb:*:111122223333:table/Books"
           },
           {
               "Sid": "ListTables",
               "Effect": "Allow",
               "Action": "dynamodb:ListTables",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. 在受信任帳戶 B 中，管理員會確定 IAM 使用者 Richard 已設定 AWS MFA 裝置，而且他知道裝置的 ID。如果是硬體 MFA 裝置，則裝置 ID 是序號，或如果是虛擬 MFA 裝置，裝置是 ARN。

1. 在帳戶 B 中，管理員將以下政策連接到使用者 Richard (或該使用者所在的群組)，該政策允許使用者呼叫 `AssumeRole` 動作。資源被設定到 Anaya 在第 1 步中所建立的角色 ARN。注意，該政策不包含 MFA 條件。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sts:AssumeRole"
               ],
               "Resource": [
                   "arn:aws:iam::111122223333:role/CrossAccountRole"
               ]
           }
       ]
   }
   ```

------

1. 在帳戶 B 中，Richard (或 Richard 正在執行的應用程式) 呼叫 `AssumeRole`。API 呼叫包含要擔任角色的 ARN (`arn:aws:iam::ACCOUNT-A-ID:role/CrossAccountRole`)、MFA 裝置的 ID 和 Richard 從其裝置中取得的目前 TOTP。

   當 Richard 呼叫 時`AssumeRole`， AWS 判斷他是否擁有有效的登入資料，包括 MFA 的需求。如果是這種情況，Richard 將成功取得角色，並且可在使用角色的臨時憑證時對帳戶 A 中名為 `Books` 的表格執行任何 DynamoDB 動作。

   有關呼叫 `AssumeRole` 的程式之範例，請參閱 [使用 MFA 身分驗證呼叫 AssumeRole](id_credentials_mfa_sample-code.md#MFAProtectedAPI-example-assumerole)。

## 使用案例：目前帳戶中 API 操作存取的 MFA 防護
<a name="MFAProtectedAPI-user-mfa"></a>

在此案例中，您應該確保 中的使用者只有在使用 AWS MFA 裝置驗證使用者時 AWS 帳戶 ，才能存取敏感的 API 操作。

假設您擁有帳戶 A，其中包含一組需要使用 EC2 執行個體的開發人員。普通開發人員可以使用執行個體，但他們未獲得 `ec2:StopInstances` 或 `ec2:TerminateInstances` 操作的許可。您希望僅允許幾個可信任的使用者執行這些「破壞性」特權操作，因此您將 MFA 防護加入到允許這些敏感 Amazon EC2 動作的政策中。

在此使用案例中，使用者 Sofía 是可信任的使用者之一。使用者 Anaya 是帳戶 A 中的管理員。

1. Anaya 確保 Sofía 已設定 AWS MFA 裝置，且 Sofía 知道裝置的 ID。如果是硬體 MFA 裝置，則裝置 ID 是序號，或如果是虛擬 MFA 裝置，裝置是 ARN。

1. Anaya 建立一個名為 `EC2-Admins` 的群組並將使用者 Sofía 加入到該群組中。

1. Anaya 將以下政策連接到 `EC2-Admins` 群組。此政策授予使用者呼叫 Amazon EC2 `StopInstances` 與 `TerminateInstances` 動作的許可，但前提是該使用者已使用 MFA 進行身分驗證。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [{
       "Effect": "Allow",
       "Action": [
         "ec2:StopInstances",
         "ec2:TerminateInstances"
       ],
       "Resource": ["*"],
       "Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}}
     }]
   }
   ```

------

1. 
**注意**  
要讓此政策生效，使用者必須先登出，然後再次登入。

   如果使用者 Sofía 需要停止或終止 Amazon EC2 執行個體，她 (或執行中的應用程式) 會呼叫 `GetSessionToken`。此 API 操作傳遞 MFA 裝置的 ID，以及 Sofía 從其裝置取得的目前 TOTP。

1. 使用者 Sofía (或 Sofía 正在使用的應用程式) 使用由 `GetSessionToken` 提供的臨時憑證來呼叫 Amazon EC2 `StopInstances` 或者 `TerminateInstances` 動作。

   有關呼叫 `GetSessionToken` 的程式之範例，請參閱本文件後述的 [使用 MFA 身分驗證呼叫 GetSessionToken](id_credentials_mfa_sample-code.md#MFAProtectedAPI-example-getsessiontoken)。

## 使用案例：擁有以資源為基礎的政策之資源的 MFA 防護
<a name="MFAProtectedAPI-resource-policies"></a>

在此案例中，您是 S3 儲存貯體、SQS 佇列或 SNS 主題的擁有者。您想要確保來自任何存取資源 AWS 帳戶 的使用者都經過 AWS MFA 裝置驗證。

此使用案例介紹了一種提供跨帳戶 MFA 防護的方法，無需使用者先擔任角色。在此情況下，若符合三個條件，使用者便可存取資源。使用者必須通過 MFA 的身分驗證，能夠從 `GetSessionToken` 取得臨時安全性憑證，並且在資源政策所信任的帳戶中。

假設您在帳戶 A 中並建立一個 S3 儲存貯體。您想要將此儲存貯體的存取權授予位於數個不同 中的使用者 AWS 帳戶，但前提是這些使用者已使用 MFA 進行身分驗證。

在此方案中，使用者 Anaya 是帳戶 A 中的管理員。使用者 Nikhil 是帳戶 C 中的 IAM 使用者。

1. 在帳戶 A 中，Anaya 建立一個名為 `Account-A-bucket` 的儲存貯體。

1. Anaya 將儲存貯體政策加入到儲存貯體。該政策允許帳戶 A、帳戶 B 或帳戶 C 中的所有使用者執行儲存貯體中的 Amazon S3 `PutObject` 和 `DeleteObject` 動作。該政策包含 MFA 條件。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [{
       "Effect": "Allow",
       "Principal": {"AWS": [
         "ACCOUNT-A-ID",
         "ACCOUNT-B-ID",
         "ACCOUNT-C-ID"
       ]},
       "Action": [
         "s3:PutObject",
         "s3:DeleteObject"
       ],
       "Resource": ["arn:aws:s3:::ACCOUNT-A-BUCKET-NAME/*"],
       "Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}}
     }]
   }
   ```

------
**注意**  
Amazon S3 (僅) 針對*根*帳戶存取提供「MFA 刪除」功能。在您設定儲存貯體的版本控制狀態時，可啟用 Amazon S3 MFA Delete 功能。Amazon S3 MFA Delete 功能不適用於 IAM 使用者，在管理時獨立於 MFA 防護的 API 存取。即使 IAM 使用者有刪除儲存貯體的許可，但在啟用 Amazon S3 MFA Delete 功能時，也無法執行刪除。如需有關 Amazon S3 MFA Delete 的詳細資訊，請參閱 [MFA Delete](https://docs.aws.amazon.com/AmazonS3/latest/dev/MultiFactorAuthenticationDelete.html)。

1. 在帳戶 C 中，管理員確定使用者 Nikhil 以 AWS MFA 裝置設定，而且知道裝置的 ID。如果是硬體 MFA 裝置，則裝置 ID 是序號，或如果是虛擬 MFA 裝置，裝置是 ARN。

1. 在帳戶 C 中，Nikhil (或該使用者正在執行的應用程式) 呼叫 `GetSessionToken`。此呼叫包括 MFA 裝置的 ID 或 ARN 以及 Nikhil 從其裝置中取得的目前 TOTP。

1. Nikhil (或 Nikhil 正在使用的應用程式) 使用由 `GetSessionToken` 傳回的暫時憑證來呼叫 Amazon S3 `PutObject` 動作，上傳檔案到 `Account-A-bucket`。

   有關呼叫 `GetSessionToken` 的程式之範例，請參閱本文件後述的 [使用 MFA 身分驗證呼叫 GetSessionToken](id_credentials_mfa_sample-code.md#MFAProtectedAPI-example-getsessiontoken)。
**注意**  
`AssumeRole` 傳回的暫時憑證在此案例中則不會運作。雖然使用者可以提供 MFA 資訊以取得角色，`AssumeRole` 傳回的暫時憑證不會包含 MFA 資訊。有了這項資訊，才能符合政策中的 MFA 條件。

# 範本程式碼：使用多重要素驗證請求憑證
<a name="id_credentials_mfa_sample-code"></a>

以下範例顯示如何呼叫 `GetSessionToken` 和 `AssumeRole` 操作，並傳遞 MFA 驗證參數。呼叫 `GetSessionToken` 不需要許可，但您必須擁有一個可讓您呼叫 `AssumeRole` 的政策。傳回的憑證隨後用於列出帳戶中的所有 S3 儲存貯體。

## 使用 MFA 身分驗證呼叫 GetSessionToken
<a name="MFAProtectedAPI-example-getsessiontoken"></a>

以下範例說明如何呼叫 `GetSessionToken` 並傳遞 MFA 身分驗證資訊。然後，由 `GetSessionToken` 操作傳回的臨時安全憑證用於列出帳戶中的所有 S3 儲存貯體。

連接到執行此程式碼的使用者的政策 (或群組中的使用者)，會針對傳回的臨時憑證提供許可。對於此範本程式碼，政策必須授予使用者許可來請求 Amazon S3 `ListBuckets` 操作。

下列程式碼範例示範如何使用 `GetSessionToken`。

------
#### [ CLI ]

**AWS CLI**  
**為 IAM 身分取得一組短期憑證**  
下列 `get-session-token` 命令會為進行呼叫的 IAM 身分擷取一組短期憑證。產生的憑證可用於政策要求多重要素驗證 (MFA) 的請求。憑證會在產生後的 15 分鐘過期。  

```
aws sts get-session-token \
    --duration-seconds 900 \
    --serial-number "YourMFADeviceSerialNumber" \
    --token-code 123456
```
輸出：  

```
{
    "Credentials": {
        "AccessKeyId": "ASIAIOSFODNN7EXAMPLE",
        "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY",
        "SessionToken": "AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtpZ3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE",
        "Expiration": "2020-05-19T18:06:10+00:00"
    }
}
```
如需詳細資訊，請參閱《AWS IAM 使用者指南》**中的[請求臨時安全憑證](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_getsessiontoken)。  
+  如需 API 詳細資訊，請參閱《AWS CLI 命令參考》**中的 [GetSessionToken](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/get-session-token.html)。

------
#### [ PowerShell ]

**Tools for PowerShell V4**  
**範例 1：傳回 `Amazon.RuntimeAWSCredentials` 執行個體，其中包含有效期為設定時間段的臨時憑證。從目前 Shell 預設值中推斷出用於請求臨時憑證的憑證。若要指定其他憑證，請使用 -ProfileName 或 -AccessKey/-SecretKey 參數。**  

```
Get-STSSessionToken
```
**輸出：**  

```
AccessKeyId                             Expiration                              SecretAccessKey                        SessionToken
-----------                             ----------                              ---------------                        ------------
EXAMPLEACCESSKEYID                      2/16/2015 9:12:28 PM                    examplesecretaccesskey...              SamPleTokeN.....
```
**範例 2：傳回 `Amazon.RuntimeAWSCredentials` 執行個體，其中包含有效期為一小時的臨時憑證。從指定的設定檔中取得用於提出請求的憑證。**  

```
Get-STSSessionToken -DurationInSeconds 3600 -ProfileName myprofile
```
**輸出：**  

```
AccessKeyId                             Expiration                              SecretAccessKey                        SessionToken
-----------                             ----------                              ---------------                        ------------
EXAMPLEACCESSKEYID                      2/16/2015 9:12:28 PM                    examplesecretaccesskey...              SamPleTokeN.....
```
**範例 3：使用在設定檔 'myprofilename' 中指定其憑證的帳戶關聯的 MFA 裝置識別碼和裝置提供的值，傳回 `Amazon.RuntimeAWSCredentials` 執行個體，其中包含有效期為一小時的臨時憑證。**  

```
Get-STSSessionToken -DurationInSeconds 3600 -ProfileName myprofile -SerialNumber YourMFADeviceSerialNumber -TokenCode 123456
```
**輸出：**  

```
AccessKeyId                             Expiration                              SecretAccessKey                        SessionToken
-----------                             ----------                              ---------------                        ------------
EXAMPLEACCESSKEYID                      2/16/2015 9:12:28 PM                    examplesecretaccesskey...              SamPleTokeN.....
```
+  如需 API 詳細資訊，請參閱《AWS Tools for PowerShell Cmdlet 參考 (V4)》**中的 [GetSessionToken](https://docs.aws.amazon.com/powershell/v4/reference)。

**Tools for PowerShell V5**  
**範例 1：傳回 `Amazon.RuntimeAWSCredentials` 執行個體，其中包含有效期為設定時間段的臨時憑證。從目前 Shell 預設值中推斷出用於請求臨時憑證的憑證。若要指定其他憑證，請使用 -ProfileName 或 -AccessKey/-SecretKey 參數。**  

```
Get-STSSessionToken
```
**輸出：**  

```
AccessKeyId                             Expiration                              SecretAccessKey                        SessionToken
-----------                             ----------                              ---------------                        ------------
EXAMPLEACCESSKEYID                      2/16/2015 9:12:28 PM                    examplesecretaccesskey...              SamPleTokeN.....
```
**範例 2：傳回 `Amazon.RuntimeAWSCredentials` 執行個體，其中包含有效期為一小時的臨時憑證。從指定的設定檔中取得用於提出請求的憑證。**  

```
Get-STSSessionToken -DurationInSeconds 3600 -ProfileName myprofile
```
**輸出：**  

```
AccessKeyId                             Expiration                              SecretAccessKey                        SessionToken
-----------                             ----------                              ---------------                        ------------
EXAMPLEACCESSKEYID                      2/16/2015 9:12:28 PM                    examplesecretaccesskey...              SamPleTokeN.....
```
**範例 3：使用在設定檔 'myprofilename' 中指定其憑證的帳戶關聯的 MFA 裝置識別碼和裝置提供的值，傳回 `Amazon.RuntimeAWSCredentials` 執行個體，其中包含有效期為一小時的臨時憑證。**  

```
Get-STSSessionToken -DurationInSeconds 3600 -ProfileName myprofile -SerialNumber YourMFADeviceSerialNumber -TokenCode 123456
```
**輸出：**  

```
AccessKeyId                             Expiration                              SecretAccessKey                        SessionToken
-----------                             ----------                              ---------------                        ------------
EXAMPLEACCESSKEYID                      2/16/2015 9:12:28 PM                    examplesecretaccesskey...              SamPleTokeN.....
```
+  如需 API 詳細資訊，請參閱《AWS Tools for PowerShell Cmdlet 參考 (V5)》**中的 [GetSessionToken](https://docs.aws.amazon.com/powershell/v5/reference)。

------
#### [ Python ]

**適用於 Python 的 SDK (Boto3)**  
 GitHub 上提供更多範例。尋找完整範例，並了解如何在 [AWS 程式碼範例儲存庫](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/sts#code-examples)中設定和執行。
透過傳遞 MFA 字符取得工作階段字符，並使用它列出該帳戶的 Amazon S3 儲存貯體。  

```
def list_buckets_with_session_token_with_mfa(mfa_serial_number, mfa_totp, sts_client):
    """
    Gets a session token with MFA credentials and uses the temporary session
    credentials to list Amazon S3 buckets.

    Requires an MFA device serial number and token.

    :param mfa_serial_number: The serial number of the MFA device. For a virtual MFA
                              device, this is an Amazon Resource Name (ARN).
    :param mfa_totp: A time-based, one-time password issued by the MFA device.
    :param sts_client: A Boto3 STS instance that has permission to assume the role.
    """
    if mfa_serial_number is not None:
        response = sts_client.get_session_token(
            SerialNumber=mfa_serial_number, TokenCode=mfa_totp
        )
    else:
        response = sts_client.get_session_token()
    temp_credentials = response["Credentials"]

    s3_resource = boto3.resource(
        "s3",
        aws_access_key_id=temp_credentials["AccessKeyId"],
        aws_secret_access_key=temp_credentials["SecretAccessKey"],
        aws_session_token=temp_credentials["SessionToken"],
    )

    print(f"Buckets for the account:")
    for bucket in s3_resource.buckets.all():
        print(bucket.name)
```
+  如需 API 詳細資訊，請參閱 *AWS SDK for Python (Boto3) API Reference* 中的 [GetSessionToken](https://docs.aws.amazon.com/goto/boto3/sts-2011-06-15/GetSessionToken)。

------

## 使用 MFA 身分驗證呼叫 AssumeRole
<a name="MFAProtectedAPI-example-assumerole"></a>

以下範例說明如何呼叫 `AssumeRole` 並傳遞 MFA 身分驗證資訊。然後，由 `AssumeRole` 傳回的臨時安全憑證用於列出帳戶中的所有 Amazon S3 儲存貯體。

如需有關此案例的詳細資訊，請參閱 [使用案例：跨帳戶委派的 MFA 防護](id_credentials_mfa_configure-api-require.md#MFAProtectedAPI-cross-account-delegation)。

下列程式碼範例示範如何使用 `AssumeRole`。

------
#### [ .NET ]

**適用於 .NET 的 SDK**  
 GitHub 上提供更多範例。尋找完整範例，並了解如何在 [AWS 程式碼範例儲存庫](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/STS#code-examples)中設定和執行。

```
using System;
using System.Threading.Tasks;
using Amazon;
using Amazon.SecurityToken;
using Amazon.SecurityToken.Model;

namespace AssumeRoleExample
{
    class AssumeRole
    {
        /// <summary>
        /// This example shows how to use the AWS Security Token
        /// Service (AWS STS) to assume an IAM role.
        ///
        /// NOTE: It is important that the role that will be assumed has a
        /// trust relationship with the account that will assume the role.
        ///
        /// Before you run the example, you need to create the role you want to
        /// assume and have it trust the IAM account that will assume that role.
        ///
        /// See https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html
        /// for help in working with roles.
        /// </summary>

        // A region property may be used if the profile or credentials loaded do not specify a region,
        // or to use a specific region.
        private static readonly RegionEndpoint REGION = RegionEndpoint.USWest2;

        static async Task Main()
        {
            // Create the SecurityToken client and then display the identity of the
            // default user.
            var roleArnToAssume = "arn:aws:iam::123456789012:role/testAssumeRole";

            var client = new Amazon.SecurityToken.AmazonSecurityTokenServiceClient(REGION);

            // Get and display the information about the identity of the default user.
            var callerIdRequest = new GetCallerIdentityRequest();
            var caller = await client.GetCallerIdentityAsync(callerIdRequest);
            Console.WriteLine($"Original Caller: {caller.Arn}");

            // Create the request to use with the AssumeRoleAsync call.
            var assumeRoleReq = new AssumeRoleRequest()
            {
                DurationSeconds = 1600,
                RoleSessionName = "Session1",
                RoleArn = roleArnToAssume
            };

            var assumeRoleRes = await client.AssumeRoleAsync(assumeRoleReq);

            // Now create a new client based on the credentials of the caller assuming the role.
            var client2 = new AmazonSecurityTokenServiceClient(credentials: assumeRoleRes.Credentials, REGION);

            // Get and display information about the caller that has assumed the defined role.
            var caller2 = await client2.GetCallerIdentityAsync(callerIdRequest);
            Console.WriteLine($"AssumedRole Caller: {caller2.Arn}");
        }
    }
}
```
+  如需 API 詳細資訊，請參閱 *適用於 .NET 的 AWS SDK API Reference* 中的 [AssumeRole](https://docs.aws.amazon.com/goto/DotNetSDKV3/sts-2011-06-15/AssumeRole)。

------
#### [ Bash ]

**AWS CLI 使用 Bash 指令碼**  
 GitHub 上提供更多範例。尋找完整範例，並了解如何在 [AWS 程式碼範例儲存庫](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/aws-cli/bash-linux/iam#code-examples)中設定和執行。

```
###############################################################################
# function iecho
#
# This function enables the script to display the specified text only if
# the global variable $VERBOSE is set to true.
###############################################################################
function iecho() {
  if [[ $VERBOSE == true ]]; then
    echo "$@"
  fi
}

###############################################################################
# function errecho
#
# This function outputs everything sent to it to STDERR (standard error output).
###############################################################################
function errecho() {
  printf "%s\n" "$*" 1>&2
}

###############################################################################
# function sts_assume_role
#
# This function assumes a role in the AWS account and returns the temporary
#  credentials.
#
# Parameters:
#       -n role_session_name -- The name of the session.
#       -r role_arn -- The ARN of the role to assume.
#
# Returns:
#       [access_key_id, secret_access_key, session_token]
#     And:
#       0 - If successful.
#       1 - If an error occurred.
###############################################################################
function sts_assume_role() {
  local role_session_name role_arn response
  local option OPTARG # Required to use getopts command in a function.

  # bashsupport disable=BP5008
  function usage() {
    echo "function sts_assume_role"
    echo "Assumes a role in the AWS account and returns the temporary credentials:"
    echo "  -n role_session_name -- The name of the session."
    echo "  -r role_arn -- The ARN of the role to assume."
    echo ""
  }

  while getopts n:r:h option; do
    case "${option}" in
      n) role_session_name=${OPTARG} ;;
      r) role_arn=${OPTARG} ;;
      h)
        usage
        return 0
        ;;
      \?)
        echo "Invalid parameter"
        usage
        return 1
        ;;
    esac
  done

  response=$(aws sts assume-role \
    --role-session-name "$role_session_name" \
    --role-arn "$role_arn" \
    --output text \
    --query "Credentials.[AccessKeyId, SecretAccessKey, SessionToken]")

  local error_code=${?}

  if [[ $error_code -ne 0 ]]; then
    aws_cli_error_log $error_code
    errecho "ERROR: AWS reports create-role operation failed.\n$response"
    return 1
  fi

  echo "$response"

  return 0
}
```
+  如需 API 詳細資訊，請參閱《AWS CLI 命令參考》**中的 [AssumeRole](https://docs.aws.amazon.com/goto/aws-cli/sts-2011-06-15/AssumeRole)。

------
#### [ C\$1\$1 ]

**適用於 C\$1\$1 的 SDK**  
 GitHub 上提供更多範例。尋找完整範例，並了解如何在 [AWS 程式碼範例儲存庫](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sts#code-examples)中設定和執行。

```
bool AwsDoc::STS::assumeRole(const Aws::String &roleArn,
                             const Aws::String &roleSessionName,
                             const Aws::String &externalId,
                             Aws::Auth::AWSCredentials &credentials,
                             const Aws::Client::ClientConfiguration &clientConfig) {
    Aws::STS::STSClient sts(clientConfig);
    Aws::STS::Model::AssumeRoleRequest sts_req;

    sts_req.SetRoleArn(roleArn);
    sts_req.SetRoleSessionName(roleSessionName);
    sts_req.SetExternalId(externalId);

    const Aws::STS::Model::AssumeRoleOutcome outcome = sts.AssumeRole(sts_req);

    if (!outcome.IsSuccess()) {
        std::cerr << "Error assuming IAM role. " <<
                  outcome.GetError().GetMessage() << std::endl;
    }
    else {
        std::cout << "Credentials successfully retrieved." << std::endl;
        const Aws::STS::Model::AssumeRoleResult result = outcome.GetResult();
        const Aws::STS::Model::Credentials &temp_credentials = result.GetCredentials();

        // Store temporary credentials in return argument.
        // Note: The credentials object returned by assumeRole differs
        // from the AWSCredentials object used in most situations.
        credentials.SetAWSAccessKeyId(temp_credentials.GetAccessKeyId());
        credentials.SetAWSSecretKey(temp_credentials.GetSecretAccessKey());
        credentials.SetSessionToken(temp_credentials.GetSessionToken());
    }

    return outcome.IsSuccess();
}
```
+  如需 API 詳細資訊，請參閱 *適用於 C\$1\$1 的 AWS SDK API Reference* 中的 [AssumeRole](https://docs.aws.amazon.com/goto/SdkForCpp/sts-2011-06-15/AssumeRole)。

------
#### [ CLI ]

**AWS CLI**  
**擔任角色**  
下列 `assume-role` 命令會為 IAM 角色 `s3-access-example` 擷取一組短期憑證。  

```
aws sts assume-role \
    --role-arn arn:aws:iam::123456789012:role/xaccounts3access \
    --role-session-name s3-access-example
```
輸出：  

```
{
    "AssumedRoleUser": {
        "AssumedRoleId": "AROA3XFRBF535PLBIFPI4:s3-access-example",
        "Arn": "arn:aws:sts::123456789012:assumed-role/xaccounts3access/s3-access-example"
    },
    "Credentials": {
        "SecretAccessKey": "9drTJvcXLB89EXAMPLELB8923FB892xMFI",
        "SessionToken": "AQoXdzELDDY//////////wEaoAK1wvxJY12r2IrDFT2IvAzTCn3zHoZ7YNtpiQLF0MqZye/qwjzP2iEXAMPLEbw/m3hsj8VBTkPORGvr9jM5sgP+w9IZWZnU+LWhmg+a5fDi2oTGUYcdg9uexQ4mtCHIHfi4citgqZTgco40Yqr4lIlo4V2b2Dyauk0eYFNebHtYlFVgAUj+7Indz3LU0aTWk1WKIjHmmMCIoTkyYp/k7kUG7moeEYKSitwQIi6Gjn+nyzM+PtoA3685ixzv0R7i5rjQi0YE0lf1oeie3bDiNHncmzosRM6SFiPzSvp6h/32xQuZsjcypmwsPSDtTPYcs0+YN/8BRi2/IcrxSpnWEXAMPLEXSDFTAQAM6Dl9zR0tXoybnlrZIwMLlMi1Kcgo5OytwU=",
        "Expiration": "2016-03-15T00:05:07Z",
        "AccessKeyId": "ASIAJEXAMPLEXEG2JICEA"
    }
}
```
該命令的輸出包含存取金鑰、私密金鑰以及可用來向 AWS進行驗證的工作階段字符。  
對於 AWS CLI 使用，您可以設定與角色相關聯的具名設定檔。當您使用設定檔時，CLI AWS 會呼叫 assume-role 並為您管理登入資料。如需詳細資訊，請參閱《[CLI 使用者指南》中的在 AWS CLI 中使用 IAM 角色](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html)。 *AWS *  
+  如需 API 詳細資訊，請參閱《AWS CLI 命令參考》**中的 [AssumeRole](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/assume-role.html)。

------
#### [ Java ]

**SDK for Java 2.x**  
 GitHub 上提供更多範例。尋找完整範例，並了解如何在 [AWS 程式碼範例儲存庫](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sts#code-examples)中設定和執行。

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sts.StsClient;
import software.amazon.awssdk.services.sts.model.AssumeRoleRequest;
import software.amazon.awssdk.services.sts.model.StsException;
import software.amazon.awssdk.services.sts.model.AssumeRoleResponse;
import software.amazon.awssdk.services.sts.model.Credentials;
import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Locale;

/**
 * To make this code example work, create a Role that you want to assume.
 * Then define a Trust Relationship in the AWS Console. You can use this as an
 * example:
 *
 * {
 * "Version":"2012-10-17",		 	 	 
 * "Statement": [
 * {
 * "Effect": "Allow",
 * "Principal": {
 * "AWS": "<Specify the ARN of your IAM user you are using in this code example>"
 * },
 * "Action": "sts:AssumeRole"
 * }
 * ]
 * }
 *
 * For more information, see "Editing the Trust Relationship for an Existing
 * Role" in the AWS Directory Service guide.
 *
 * Also, set up your development environment, including your credentials.
 *
 * For information, see this documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class AssumeRole {
    public static void main(String[] args) {
        final String usage = """

                Usage:
                    <roleArn> <roleSessionName>\s

                Where:
                    roleArn - The Amazon Resource Name (ARN) of the role to assume (for example, arn:aws:iam::000008047983:role/s3role).\s
                    roleSessionName - An identifier for the assumed role session (for example, mysession).\s
                """;

        if (args.length != 2) {
            System.out.println(usage);
            System.exit(1);
        }

        String roleArn = args[0];
        String roleSessionName = args[1];
        Region region = Region.US_EAST_1;
        StsClient stsClient = StsClient.builder()
                .region(region)
                .build();

        assumeGivenRole(stsClient, roleArn, roleSessionName);
        stsClient.close();
    }

    public static void assumeGivenRole(StsClient stsClient, String roleArn, String roleSessionName) {
        try {
            AssumeRoleRequest roleRequest = AssumeRoleRequest.builder()
                    .roleArn(roleArn)
                    .roleSessionName(roleSessionName)
                    .build();

            AssumeRoleResponse roleResponse = stsClient.assumeRole(roleRequest);
            Credentials myCreds = roleResponse.credentials();

            // Display the time when the temp creds expire.
            Instant exTime = myCreds.expiration();
            String tokenInfo = myCreds.sessionToken();

            // Convert the Instant to readable date.
            DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)
                    .withLocale(Locale.US)
                    .withZone(ZoneId.systemDefault());

            formatter.format(exTime);
            System.out.println("The token " + tokenInfo + "  expires on " + exTime);

        } catch (StsException e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }
    }
}
```
+  如需 API 詳細資訊，請參閱 *AWS SDK for Java 2.x API Reference* 中的 [AssumeRole](https://docs.aws.amazon.com/goto/SdkForJavaV2/sts-2011-06-15/AssumeRole)。

------
#### [ JavaScript ]

**SDK for JavaScript (v3)**  
 GitHub 上提供更多範例。尋找完整範例，並了解如何在 [AWS 程式碼範例儲存庫](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sts#code-examples)中設定和執行。
建立用戶端。  

```
import { STSClient } from "@aws-sdk/client-sts";
// Set the AWS Region.
const REGION = "us-east-1";
// Create an AWS STS service client object.
export const client = new STSClient({ region: REGION });
```
擔任 IAM 角色。  

```
import { AssumeRoleCommand } from "@aws-sdk/client-sts";

import { client } from "../libs/client.js";

export const main = async () => {
  try {
    // Returns a set of temporary security credentials that you can use to
    // access Amazon Web Services resources that you might not normally
    // have access to.
    const command = new AssumeRoleCommand({
      // The Amazon Resource Name (ARN) of the role to assume.
      RoleArn: "ROLE_ARN",
      // An identifier for the assumed role session.
      RoleSessionName: "session1",
      // The duration, in seconds, of the role session. The value specified
      // can range from 900 seconds (15 minutes) up to the maximum session
      // duration set for the role.
      DurationSeconds: 900,
    });
    const response = await client.send(command);
    console.log(response);
  } catch (err) {
    console.error(err);
  }
};
```
+  如需 API 詳細資訊，請參閱 *適用於 JavaScript 的 AWS SDK API Reference* 中的 [AssumeRole](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sts/command/AssumeRoleCommand)。

**SDK for JavaScript (v2)**  
 GitHub 上提供更多範例。尋找完整範例，並了解如何在 [AWS 程式碼範例儲存庫](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascript/example_code/sts#code-examples)中設定和執行。

```
// Load the AWS SDK for Node.js
const AWS = require("aws-sdk");
// Set the region
AWS.config.update({ region: "REGION" });

var roleToAssume = {
  RoleArn: "arn:aws:iam::123456789012:role/RoleName",
  RoleSessionName: "session1",
  DurationSeconds: 900,
};
var roleCreds;

// Create the STS service object
var sts = new AWS.STS({ apiVersion: "2011-06-15" });

//Assume Role
sts.assumeRole(roleToAssume, function (err, data) {
  if (err) console.log(err, err.stack);
  else {
    roleCreds = {
      accessKeyId: data.Credentials.AccessKeyId,
      secretAccessKey: data.Credentials.SecretAccessKey,
      sessionToken: data.Credentials.SessionToken,
    };
    stsGetCallerIdentity(roleCreds);
  }
});

//Get Arn of current identity
function stsGetCallerIdentity(creds) {
  var stsParams = { credentials: creds };
  // Create STS service object
  var sts = new AWS.STS(stsParams);

  sts.getCallerIdentity({}, function (err, data) {
    if (err) {
      console.log(err, err.stack);
    } else {
      console.log(data.Arn);
    }
  });
}
```
+  如需 API 詳細資訊，請參閱 *適用於 JavaScript 的 AWS SDK API Reference* 中的 [AssumeRole](https://docs.aws.amazon.com/goto/AWSJavaScriptSDK/sts-2011-06-15/AssumeRole)。

------
#### [ PowerShell ]

**Tools for PowerShell V4**  
**範例 1：傳回一組臨時登入資料 （存取金鑰、私密金鑰和工作階段字符），可用於存取請求使用者通常無法存取 AWS 的資源一小時。傳回的憑證擁有所擔任角色之存取政策和提供的政策所允許的許可 (您無法使用提供的政策來授予超過所擔任角色之存取政策所定義的許可)。**  

```
Use-STSRole -RoleSessionName "Bob" -RoleArn "arn:aws:iam::123456789012:role/demo" -Policy "...JSON policy..." -DurationInSeconds 3600
```
**範例 2：傳回一組臨時憑證，有效期為一小時，這些憑證擁有所擔任角色之存取政策中定義的相同許可。**  

```
Use-STSRole -RoleSessionName "Bob" -RoleArn "arn:aws:iam::123456789012:role/demo" -DurationInSeconds 3600
```
**範例 3：傳回一組臨時憑證，提供序號，以及與用於執行 cmdlet 之使用者憑證相關聯的 MFA 產生的權杖。**  

```
Use-STSRole -RoleSessionName "Bob" -RoleArn "arn:aws:iam::123456789012:role/demo" -DurationInSeconds 3600 -SerialNumber "GAHT12345678" -TokenCode "123456"
```
**範例 4：傳回一組臨時憑證，這些臨時憑證擔任了客戶帳戶中定義的角色。對於第三方可以擔任的每個角色，客戶帳戶必須使用識別符來建立角色，必須在每次擔任角色時在 -ExternalId 參數中傳遞該識別符。**  

```
Use-STSRole -RoleSessionName "Bob" -RoleArn "arn:aws:iam::123456789012:role/demo" -DurationInSeconds 3600 -ExternalId "ABC123"
```
+  如需 API 詳細資訊，請參閱《AWS Tools for PowerShell Cmdlet 參考 (V4)》**中的 [AssumeRole](https://docs.aws.amazon.com/powershell/v4/reference)。

**Tools for PowerShell V5**  
**範例 1：傳回一組臨時登入資料 （存取金鑰、私密金鑰和工作階段字符），可用於存取請求使用者通常無法存取 AWS 的資源一小時。傳回的憑證擁有所擔任角色之存取政策和提供的政策所允許的許可 (您無法使用提供的政策來授予超過所擔任角色之存取政策所定義的許可)。**  

```
Use-STSRole -RoleSessionName "Bob" -RoleArn "arn:aws:iam::123456789012:role/demo" -Policy "...JSON policy..." -DurationInSeconds 3600
```
**範例 2：傳回一組臨時憑證，有效期為一小時，這些憑證擁有所擔任角色之存取政策中定義的相同許可。**  

```
Use-STSRole -RoleSessionName "Bob" -RoleArn "arn:aws:iam::123456789012:role/demo" -DurationInSeconds 3600
```
**範例 3：傳回一組臨時憑證，提供序號，以及與用於執行 cmdlet 之使用者憑證相關聯的 MFA 產生的權杖。**  

```
Use-STSRole -RoleSessionName "Bob" -RoleArn "arn:aws:iam::123456789012:role/demo" -DurationInSeconds 3600 -SerialNumber "GAHT12345678" -TokenCode "123456"
```
**範例 4：傳回一組臨時憑證，這些臨時憑證擔任了客戶帳戶中定義的角色。對於第三方可以擔任的每個角色，客戶帳戶必須使用識別符來建立角色，必須在每次擔任角色時在 -ExternalId 參數中傳遞該識別符。**  

```
Use-STSRole -RoleSessionName "Bob" -RoleArn "arn:aws:iam::123456789012:role/demo" -DurationInSeconds 3600 -ExternalId "ABC123"
```
+  如需 API 詳細資訊，請參閱《AWS Tools for PowerShell Cmdlet 參考 (V5)》**中的 [AssumeRole](https://docs.aws.amazon.com/powershell/v5/reference)。

------
#### [ Python ]

**適用於 Python 的 SDK (Boto3)**  
 GitHub 上提供更多範例。尋找完整範例，並了解如何在 [AWS 程式碼範例儲存庫](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/sts#code-examples)中設定和執行。
擔任需要 MFA 字符的 IAM 角色，並使用暫時性憑證列出該帳戶的 Amazon S3 儲存貯體。  

```
def list_buckets_from_assumed_role_with_mfa(
    assume_role_arn, session_name, mfa_serial_number, mfa_totp, sts_client
):
    """
    Assumes a role from another account and uses the temporary credentials from
    that role to list the Amazon S3 buckets that are owned by the other account.
    Requires an MFA device serial number and token.

    The assumed role must grant permission to list the buckets in the other account.

    :param assume_role_arn: The Amazon Resource Name (ARN) of the role that
                            grants access to list the other account's buckets.
    :param session_name: The name of the STS session.
    :param mfa_serial_number: The serial number of the MFA device. For a virtual MFA
                              device, this is an ARN.
    :param mfa_totp: A time-based, one-time password issued by the MFA device.
    :param sts_client: A Boto3 STS instance that has permission to assume the role.
    """
    response = sts_client.assume_role(
        RoleArn=assume_role_arn,
        RoleSessionName=session_name,
        SerialNumber=mfa_serial_number,
        TokenCode=mfa_totp,
    )
    temp_credentials = response["Credentials"]
    print(f"Assumed role {assume_role_arn} and got temporary credentials.")

    s3_resource = boto3.resource(
        "s3",
        aws_access_key_id=temp_credentials["AccessKeyId"],
        aws_secret_access_key=temp_credentials["SecretAccessKey"],
        aws_session_token=temp_credentials["SessionToken"],
    )

    print(f"Listing buckets for the assumed role's account:")
    for bucket in s3_resource.buckets.all():
        print(bucket.name)
```
+  如需 API 詳細資訊，請參閱 *AWS SDK for Python (Boto3) API Reference* 中的 [AssumeRole](https://docs.aws.amazon.com/goto/boto3/sts-2011-06-15/AssumeRole)。

------
#### [ Ruby ]

**SDK for Ruby**  
 GitHub 上提供更多範例。尋找完整範例，並了解如何在 [AWS 程式碼範例儲存庫](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/ruby/example_code/iam#code-examples)中設定和執行。

```
  # Creates an AWS Security Token Service (AWS STS) client with specified credentials.
  # This is separated into a factory function so that it can be mocked for unit testing.
  #
  # @param key_id [String] The ID of the access key used by the STS client.
  # @param key_secret [String] The secret part of the access key used by the STS client.
  def create_sts_client(key_id, key_secret)
    Aws::STS::Client.new(access_key_id: key_id, secret_access_key: key_secret)
  end

  # Gets temporary credentials that can be used to assume a role.
  #
  # @param role_arn [String] The ARN of the role that is assumed when these credentials
  #                          are used.
  # @param sts_client [AWS::STS::Client] An AWS STS client.
  # @return [Aws::AssumeRoleCredentials] The credentials that can be used to assume the role.
  def assume_role(role_arn, sts_client)
    credentials = Aws::AssumeRoleCredentials.new(
      client: sts_client,
      role_arn: role_arn,
      role_session_name: 'create-use-assume-role-scenario'
    )
    @logger.info("Assumed role '#{role_arn}', got temporary credentials.")
    credentials
  end
```
+  如需 API 詳細資訊，請參閱 *適用於 Ruby 的 AWS SDK API Reference* 中的 [AssumeRole](https://docs.aws.amazon.com/goto/SdkForRubyV3/sts-2011-06-15/AssumeRole)。

------
#### [ Rust ]

**適用於 Rust 的 SDK**  
 GitHub 上提供更多範例。尋找完整範例，並了解如何在 [AWS 程式碼範例儲存庫](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/rustv1/examples/sts/#code-examples)中設定和執行。

```
async fn assume_role(config: &SdkConfig, role_name: String, session_name: Option<String>) {
    let provider = aws_config::sts::AssumeRoleProvider::builder(role_name)
        .session_name(session_name.unwrap_or("rust_sdk_example_session".into()))
        .configure(config)
        .build()
        .await;

    let local_config = aws_config::from_env()
        .credentials_provider(provider)
        .load()
        .await;
    let client = Client::new(&local_config);
    let req = client.get_caller_identity();
    let resp = req.send().await;
    match resp {
        Ok(e) => {
            println!("UserID :               {}", e.user_id().unwrap_or_default());
            println!("Account:               {}", e.account().unwrap_or_default());
            println!("Arn    :               {}", e.arn().unwrap_or_default());
        }
        Err(e) => println!("{:?}", e),
    }
}
```
+  如需 API 詳細資訊，請參閱《適用於 Rust 的AWS SDK API 參考》**中的 [AssumeRole](https://docs.rs/aws-sdk-sts/latest/aws_sdk_sts/client/struct.Client.html#method.assume_role)。

------
#### [ Swift ]

**適用於 Swift 的 SDK**  
 GitHub 上提供更多範例。尋找完整範例，並了解如何在 [AWS 程式碼範例儲存庫](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/swift/example_code/iam#code-examples)中設定和執行。

```
import AWSSTS

    public func assumeRole(role: IAMClientTypes.Role, sessionName: String)
        async throws -> STSClientTypes.Credentials
    {
        let input = AssumeRoleInput(
            roleArn: role.arn,
            roleSessionName: sessionName
        )
        do {
            let output = try await stsClient.assumeRole(input: input)

            guard let credentials = output.credentials else {
                throw ServiceHandlerError.authError
            }

            return credentials
        } catch {
            print("Error assuming role: ", dump(error))
            throw error
        }
    }
```
+  如需 API 詳細資訊，請參閱 *《適用於 Swift 的AWS SDK API 參考》*中的 [AssumeRole](https://sdk.amazonaws.com/swift/api/awssts/latest/documentation/awssts/stsclient/assumerole(input:))。

------