

# IAM の AWS 多要素認証
<a name="id_credentials_mfa"></a>

セキュリティを向上させるには、多要素認証 (MFA) を設定して AWS リソースを保護することを推奨します。スタンドアロンアカウント、管理アカウント、メンバーアカウントを含むすべての AWS アカウント の AWS アカウントのルートユーザー と、IAM ユーザーに対して MFA を有効にできます。可能な限り、パスキーやセキュリティキーなどのフィッシング耐性のある MFA を使用することをお勧めします。これらの FIDO ベースの認証はパブリックキー暗号化を使用し、フィッシング、中間者攻撃、リプレイ攻撃に耐性があり、TOTP ベースのオプションよりも強力なレベルのセキュリティを提供します。

MFA は、ルートユーザーのすべてのアカウントタイプに適用されます。詳細については、「[AWS Organizations アカウントのルートユーザーの認証情報です。](root-user-best-practices.md#ru-bp-organizations)」を参照してください。

ルートユーザーの MFA を有効化すると、ルートユーザーの認証情報のみが影響を受けます。アカウントの IAM ユーザーは固有の認証情報を持つ独立した ID であり、各 ID には固有の MFA 設定があります。ルートユーザーを保護するための MFA の使用の詳細については、「[AWS アカウントのルートユーザー の多要素認証](enable-mfa-for-root.md)」を参照してください。

AWS アカウントのルートユーザー と IAM ユーザーは、任意のタイプの MFA デバイスを最大 8 台登録できます。複数の MFA デバイスを登録すると、柔軟性をもたせることができ、1 つのデバイスが紛失または損傷した場合にアクセスが中断するリスクを軽減できるようになります。AWS マネジメントコンソールにログインしたり、AWS CLI を使用してセッションを確立したりするには、MFA デバイスが 1 台あれば十分です。

**注記**  
人間のユーザーが AWS にアクセスする際は、一時的な認証情報の使用を必須とすることをお勧めします。AWS IAM アイデンティティセンター の使用を検討したことのある場合 IAM Identity Center を使用すると、複数の AWS アカウント へのアクセスを一元的に管理できます。ユーザーには、割り当てられたすべてのアカウントに対する MFA で保護された Single Sign-On によるアクセスを、1 つの場所から提供することができます。IAM Identity Center では、 その内部でユーザー ID の作成および管理を行います。あるいは、既存の SAML 2.0 互換 ID プロバイダーにも簡単に接続することができます。詳細については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[What is IAM Identity Center?](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)」(IAM Identity Center とは?) を参照してください。

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 は、デバイスバインドパスキー (セキュリティキー) と同期パスキーの 2 種類のパスキーをサポートしています。
+ **セキュリティキー**: これらは YubiKey などの物理デバイスで、認証の 2 番目の要素として使用されます。1 つのセキュリティキーで、複数のルートユーザーアカウントと IAM ユーザーをサポートできます。
+ **同期パスキー**: これらは、Google、Apple、Microsoft アカウントなどのプロバイダーの認証情報マネージャー、および 1Password、Dashlane、Bitwarden などのサードパーティーサービスを 2 番目の要素として使用します。

Apple MacBook の 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 仕様と互換性のあるすべての [FIDO 認定製品](https://fidoalliance.org/certification/fido-certified-products/)のリストが、FIDO アライアンスから提供されています。

### 仮想認証アプリケーション
<a name="virtual-auth-apps-for-iam-users"></a>

仮想認証アプリケーションは、電話やその他のデバイスで実行され、物理デバイスをエミュレートします。仮想認証アプリは、[タイムベースドワンタイムパスワード (TOTP)](https://datatracker.ietf.org/doc/html/rfc6238) アルゴリズムを実装しており、単一デバイスで複数のトークンをサポートします。ユーザーは、サインイン中にプロンプトが表示されたら、デバイスから有効なコードを入力する必要があります。ユーザーに割り当てられた各トークンは一意であることが必要です。ユーザーは、別のユーザーのトークンからコードを入力して認証を受けることはできません。

最も強力な保護を実現するために、[パスキーやセキュリティキー](#passkeys-security-keys-for-iam-users)などのフィッシング耐性のある MFA を使用することをお勧めします。パスキーまたはセキュリティキーをまだ使用できない場合は、ハードウェアの購入承認の待機中、またはハードウェアの到着を待つ間の暫定措置として、仮想 MFA デバイスを使用することをお勧めします。仮想 MFA デバイスとして使用可能なサポートされているアプリケーションのリストについては、「[多要素認証 (MFA)](https://aws.amazon.com/iam/features/mfa/?audit=2019q1)」を参照してください。

IAM ユーザーの仮想 MFA デバイスを設定する手順については、「[AWS マネジメントコンソールで仮想 MFA デバイスを割り当てる](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)に基づいて 6 桁の数値コードが生成されます。サインイン時に、ユーザーはデバイスから取得した有効なコードを 2 番目のウェブページに入力する必要があります。

これらのトークンは AWS アカウント でのみ使用されます。AWS とセキュアに共有された一意のトークンシードを持つトークンのみを使用できます。トークンシードは、トークンの生成時に生成されるシークレットキーです。他のソースから購入したトークンは、IAM では機能しません。互換性を確保するには、[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 デバイスの詳細については、「[多要素認証 (MFA)](https://aws.amazon.com/iam/features/mfa/?audit=2019q1)」を参照してください。
+ 物理 MFA デバイスを使用する場合は、ハードウェア TOTP デバイスの代わりにセキュリティキーを使用することをお勧めします。セキュリティキーは、バッテリー要件がなく、フィッシングへの耐性があり、1 つのデバイスで複数のユーザーをサポートします。

パスキーまたはセキュリティ キーは、AWS CLI または AWS API からではなく、AWS マネジメントコンソール からのみ有効にできます。セキュリティキーを有効にするには、そのデバイスに物理的にアクセスできる必要があります。

IAM ユーザーのハードウェア TOTP トークンを設定する手順については、「[AWS マネジメントコンソールでハードウェア TOTP トークンを割り当てる](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 コンソールに移動して、ナビゲーションペインの [**ユーザー**] を選択し、テーブルの [**MFA**] 列の [**SMS**] を使用してユーザーを探します。

## MFA 奨励事項
<a name="id_credentials_mfa-recommendations"></a>

AWS ID を保護するには、MFA 認証に関する以下の推奨事項に従ってください。
+ [パスキーやセキュリティキー](#passkeys-security-keys-for-iam-users)などのフィッシング耐性のある MFA を MFA デバイスとして使用することをお勧めします。これらの FIDO ベースの認証機能は、フィッシングなどの攻撃に対して最も強力な保護を提供します。
+ AWS アカウント 内の AWS アカウントのルートユーザー と IAM ユーザーに対しては、複数の MFA デバイスを有効にすることをお勧めします。これにより、AWS アカウント のセキュリティレベルを引き上げ、AWS アカウントのルートユーザー などの権限の高いユーザーに対するアクセスの管理を簡素化できます。
+ AWS アカウントのルートユーザー および IAM ユーザーに対し、「[現在サポートされている MFA タイプ](https://aws.amazon.com/iam/features/mfa/)」の任意の組み合わせで、最大 **8** 台の MFA デバイスを登録できます。MFA デバイスが複数ある場合でも、そのユーザとして AWS マネジメントコンソール にログインしたり、AWS CLI を使用してセッションを作成したりするのに必要なのは、1 台の MFA デバイスだけです。IAM ユーザーは既存の MFA デバイスで認証して、追加の MFA デバイスを有効または無効にする必要があります。
+ MFA デバイスが紛失、盗難、またはアクセス不能になった場合は、残りの MFA デバイスのいずれかを使用して、AWS アカウント での回復手順を実行することなく AWS アカウント にアクセスできます。MFA デバイスが紛失または盗難に遭った場合は、関連付けられている IAM プリンシパルからそのデバイスを切り離してください。
+ 複数の MFA を使用すると、地理的に離れた場所にいる従業員やリモートで作業している従業員は、ハードウェアベースの MFA 使用して AWS にアクセスできます。ハードウェアデバイスを 1 台送付したり、1 台のハードウェアデバイスを従業員間で物理的に交換したりする必要はありません。
+ IAM プリンシパルに追加の MFA デバイスを使用すると、1 つ以上の MFA を日常的に使用できると同時に、物理 MFA デバイスをボールドなどの安全な物理的な場所に保存したり、バックアップや冗長性を確保したりできます。

**注意事項**  
セキュリティキーまたはパスキーの MFA 情報を AWS STS API オペレーションに渡して一時的認証情報をリクエストすることはできません。セキュリティキーまたはパスキーを使用する場合は、 `aws login` コマンドを実行して、AWS CLI および AWS SDK で使用する認証情報を取得できます。
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 アイデンティティセンターを活用して、AWS アクセスポータル、IAM アイデンティティセンター統合アプリケーション、AWS CLI への安全な MFA アクセスを有効にすることができます。詳細については、「[IAM アイデンティティセンターで MFA を有効化する](https://docs.aws.amazon.com/singlesignon/latest/userguide/mfa-getting-started.html)」を参照してください。

# AWS マネジメントコンソールでパスキーやセキュリティキーを割り当てる
<a name="id_credentials_mfa_enable_fido"></a>

パスキーは、AWS リソースを保護するために使用できる[多要素認証 (MFA) デバイス](id_credentials_mfa.md)の一種です。AWS は、同期パスキーと、セキュリティキーとも呼ばれるデバイスにバインドされたパスキーをサポートします。

同期パスキーを使用すると、IAM ユーザーは、多くのデバイスで (新しいデバイスであっても)、FIDO サインイン認証情報にアクセスできます。すべてのアカウントですべてのデバイスを再登録する必要はありません。同期パスキーには、Google、Apple、Microsoft などのファーストパーティ認証情報マネージャーと、1Password 、Dashlane、Bitwarden などのサードパーティー認証情報マネージャーが 2 番目の要素として含まれます。デバイス上の生体認証 (TouchID、FaceID など) を使用して、選択した認証情報マネージャーのロックを解除してパスキーを使用することもできます。

または、デバイスにバインドされたパスキーは、コンピュータの USB ポートに接続する FIDO セキュリティキーにバインドされます。プロンプトが表示されたらタップしてサインインプロセスを安全に完了します。すでに他のサービスで 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 タイプ]](https://aws.amazon.com/iam/features/mfa/)の任意の組み合わせで、最大 **8** 台の MFA デバイスを登録できます。MFA デバイスが複数ある場合でも、そのユーザとして AWS マネジメントコンソール にログインしたり、AWS CLI を使用してセッションを作成したりするのに必要なのは、1 台の MFA デバイスだけです。複数の MFA デバイスを登録することをお勧めします。例えば、組み込みの認証アプリを登録し、物理的に安全な場所に保管するセキュリティキーも登録することができます。組み込みの認証アプリを使用できない場合は、登録済みのセキュリティキーを使用できます。認証アプリについては、認証アプリが搭載されたデバイスを紛失したり破損したりした場合に、アカウントにアクセスできなくなるのを防ぐため、それらのアプリのクラウドバックアップまたは同期機能を有効にすることもお勧めします。

**注記**  
人間のユーザーが AWS にアクセスする場合には、一時的な認証情報の使用を推奨します。ユーザーは、ID プロバイダーを使用して 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>

重要な MFA 関連のアクションを保護しながら、独自の IAM ユーザー用に FIDO パスキーを管理するには、次のポリシーのアクセス許可が必要です。

**注記**  
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 CLI API や AWS API からではなく、AWS マネジメントコンソール からのみ有効にできます。セキュリティキーを有効にするには、そのデバイスに物理的にアクセスできる必要があります。

**自身の IAM ユーザーのパスキーまたはセキュリティキーを有効にするには (コンソール)**

1. AWS アカウント ID またはアカウントエイリアス、IAM ユーザー名、およびパスワードを使用して [IAM コンソール](https://console.aws.amazon.com/iam)にサインインします。
**注記**  
利便性のため、AWS サインインページは、ブラウザ cookie を使用して IAM ユーザー名とアカウント情報を記憶します。以前に別のユーザーとしてサインインしたことがある場合は、ページの下部にある**[別のアカウントにサインイン]**を選択し、メインのサインインページに戻ります。そこから、AWS アカウント ID またはアカウントエイリアスを入力して、アカウントの IAM ユーザーサインインページにリダイレクトされるようにすることができます。

   AWS アカウント アカウント ID の取得については、管理者にお問い合わせください。

1. 右上のナビゲーションバーで自分のユーザー名を選択し、続いて **[Security credentials]** (セキュリティ認証情報) を選択します。  
![\[AWS マネジメントコンソール のセキュリティ認証情報へのリンク\]](http://docs.aws.amazon.com/ja_jp/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 を使用、またはコンピュータの USB ポートに FIDO セキュリティキーを挿入してタップすることで、パスキーを作成します。

1. ブラウザの指示に従って、**[続行]** を選択します。

これで、AWS で使用するパスキーまたはセキュリティキーが登録されました。AWS マネジメントコンソールでの MFA 利用の詳細については、「[MFA 対応のサインイン](console_sign-in-mfa.md)」を参照してください。

## 別の IAM ユーザーのパスキーまたはセキュリティキーを有効にする (コンソール)
<a name="enable-fido-mfa-for-iam-user"></a>

別の IAM ユーザーのパスキーまたはセキュリティキーは、AWS CLI API や AWS API からではなく、AWS マネジメントコンソール からのみ有効にすることができます。

**別の IAM ユーザーのパスキーまたはセキュリティキーを有効にするには (コンソール)**

1. AWS マネジメントコンソールにサインインして、IAM コンソールを開きます [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. ナビゲーションペインで [**Users (ユーザー)**] を選択します。

1. **[ユーザー]** で、MFA を有効化するユーザーの名前を選択します。

1. 選択した IAM ユーザーのページで、**[セキュリティ認証情報]** タブを選択します。

1. **[Multi-factor authentication (MFA)** (多要素認証 (MFA)) で、**[Assign MFA device]** (MFA デバイスの割り当て) を選択します。

1. **[MFA デバイス名]** ページで、**[デバイス名]** を入力し、**[パスキーまたはセキュリティキー]** を選択し、**[次へ]** を選択します。

1. **[デバイスの設定]** で、パスキーを設定します。顔や指紋などの生体認証データを使用、デバイス PIN を使用、またはコンピュータの USB ポートに FIDO セキュリティキーを挿入してタップすることで、パスキーを作成します。

1. ブラウザの指示に従って、**[続行]** を選択します。

これで、別の IAM ユーザーが AWS で使用するパスキーまたはセキュリティキーが登録されました。AWS マネジメントコンソールでの MFA 利用の詳細については、「[MFA 対応のサインイン](console_sign-in-mfa.md)」を参照してください。

## パスキーまたはセキュリティキーを置き換える
<a name="replace-fido-mfa"></a>

[現在サポートされている MFA タイプ](https://aws.amazon.com/iam/features/mfa/)の任意の組み合わせで、一度に最大 8 台の MFA デバイスを、AWS アカウントのルートユーザー および IAM ユーザーに割り当てることができます。ユーザーが FIDO の認証装置を紛失した場合や、何らかの理由で交換する必要がある場合、最初に古い FIDO 認証装置を無効化する必要があります。その後、そのユーザー用に新しい MFA デバイスを追加できます。
+ IAM ユーザーに関連付けられているデバイスを非アクティブ化するには、「[MFA デバイスを無効にする](id_credentials_mfa_disable.md)」を参照してください。
+ IAM ユーザー用に新しい FIDO セキュリティキーを追加するには、「[自身の IAM ユーザーのパスキーまたはセキュリティキーを有効にする (コンソール)](#enable-fido-mfa-for-own-iam-user)」を参照してください。

新しいパスキーまたはセキュリティキーにアクセスできない場合は、新しい仮想 MFA デバイスまたはハードウェア TOTP トークンを有効化します。手順については、以下のいずれかを参照してください。
+ [AWS マネジメントコンソールで仮想 MFA デバイスを割り当てる](id_credentials_mfa_enable_virtual.md) 
+ [AWS マネジメントコンソールでハードウェア TOTP トークンを割り当てる](id_credentials_mfa_enable_physical.md) 

# パスキーとセキュリティキーを使用するためのサポートされる設定
<a name="id_credentials_mfa_fido_supported_configurations"></a>

現在サポートされている設定を使用して、IAM での 多要素認証 (MFA) メソッドとして、FIDO2 のデバイスにバインドされたパスキー (セキュリティキーとも呼ばれます) を使用できます。これには、IAM でサポートされている FIDO2 デバイスや、FIDO2 をサポートしているブラウザなどが含まれます。FIDO2 デバイスを登録する前に、お使いのブラウザとオペレーティングシステム (OS) のバージョンが最新であることを確認してください。機能の動作は、ブラウザ、認証システム、および OS クライアントによって異なる場合があります。あるブラウザでデバイスの登録に失敗した場合は、別のブラウザで登録を試みることができます。

FIDO2 はオープンな認証標準の FIDO U2F の拡張であり、公開鍵暗号に基づくセキュリティと同等の高レベルのセキュリティを提供します。FIDO2 は、W3C Web 認証仕様 (WebAuthn API) と、アプリケーション層プロトコルである FIDO アライアンスの Client-to-Authenticator Protocol (CTAP) で構成されています。CTAP は、ブラウザやオペレーティングシステムなどのクライアントまたはプラットフォームと外部認証システムとの間の通信を可能にします。AWS で FIDO 認定の認証機能を有効にすると、セキュリティキーにより、AWS でのみ使用するための新しいキーペアが作成されます。まず、認証情報を入力します。プロンプトが表示されたら、AWS によって発行された認証チャレンジに応答するセキュリティキーをタップします。FIDO2 標準の詳細については、「[FIDO2 プロジェクト](https://en.wikipedia.org/wiki/FIDO2_Project)」を参照してください。

## AWS でサポートされている FIDO2 デバイス
<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 は、FIDO2 デバイスを検証するためにコンピュータの物理的 USB ポートにアクセスする必要があります。セキュリティキーは、仮想マシン、リモート接続、またはブラウザのシークレットモードでは機能しません。

FIDO アライアンスでは、FIDO 仕様と互換性のあるすべての [FIDO2 製品](https://fidoalliance.org/certification/fido-certified-products/)のリストを公開しています。

## FIDO2 をサポートするブラウザ
<a name="id_credentials_mfa_fido_browsers"></a>

ウェブブラウザで実行される FIDO2 セキュリティデバイスの可用性は、ブラウザとオペレーティングシステムの組み合わせによって異なります。現在、以下のブラウザでセキュリティキーの使用がサポートされています。


****  

| ウェブブラウザ | macOS 10.15\$1 | Windows 10 | Linux | IOS 14.5 以降 | Android 7 以降 | 
| --- | --- | --- | --- | --- | --- | 
| Chrome | あり | はい | はい | あり | なし | 
| Safari | はい | なし | なし | あり | なし | 
| Edge | はい | あり | なし | あり | なし | 
| Firefox | あり | あり | なし | あり | なし | 

**注記**  
現在、FIDO2 をサポートしている Firefox のほとんどのバージョンでは、デフォルト状態で、そのサポートが有効になっていません。Firefox で FIDO2 のサポートを有効にする手順については、「[FIDO セキュリティキーをトラブルシューティングする](troubleshoot_mfa-fido.md)」を参照してください。  
macOS の Firefox は、パスキーのクロスデバイス認証ワークフローを完全にはサポートしていない場合があります。クロスデバイス認証に進む代わりに、セキュリティキーをタッチするように求めるプロンプトが表示される場合があります。macOS でパスキーを使用してサインインするには、Chrome や Safari などの別のブラウザを使用することをお勧めします。

YubiKey など、FIDO2 認定デバイスのブラウザのサポートについては、「[FIDO2 および U2F のオペレーティングシステムとウェブブラウザのサポート](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 ブラウザのサポートを追加するためのプラグインの使用をサポートしていません。一部のブラウザプラグインは FIDO と互換性がなく、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 認証を持ち、仮想認証システムやハードウェア TOTP などのその他の種類の MFA をサポートするデバイスの登録を許可する](#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 認証を持ち、仮想認証システムやハードウェア TOTP などのその他の種類の MFA をサポートするデバイスの登録を許可する
<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 マネジメントコンソール でのみサポートしています。MFA に対するパスキーとセキュリティキーの使用は [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/) と [AWS API](https://aws.amazon.com/tools/) ではサポートされていません。また、[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)」を参照してください。

# AWS マネジメントコンソールで仮想 MFA デバイスを割り当てる
<a name="id_credentials_mfa_enable_virtual"></a>

**重要**  
AWS では、AWS への MFA に可能な限りパスキーまたはセキュリティキーを使用することをお勧めします。詳細については、「[AWS マネジメントコンソールでパスキーやセキュリティキーを割り当てる](id_credentials_mfa_enable_fido.md)」を参照してください。

電話や他のデバイスを仮想多要素認証 (MFA) デバイスとして使用できます。これを行うには、[標準ベースの TOTP (時刻ベースのワンタイムパスワード) アルゴリズムである RFC 6238](https://datatracker.ietf.org/doc/html/rfc6238) に準拠するモバイルアプリをインストールします。これらのアプリは、6 桁の認証コードを生成します。認証はセキュリティで保護されていないモバイルデバイスで実行することができ、コードはアクセス許可のない当事者と共有される可能性があるため、TOTP ベースの MFA は [FIDO2](https://en.wikipedia.org/wiki/FIDO_Alliance#FIDO2) セキュリティキーやパスキーなどのフィッシング耐性オプションと同等のセキュリティを提供しません。フィッシングなどの攻撃に対して最も強力な保護を実現するには、MFA にパスキーまたはセキュリティキーを使用することをお勧めします。

パスキーまたはセキュリティキーをまだ使用できない場合は、ハードウェア購入の承認またはハードウェアの到着を待つ間、暫定措置として仮想 MFA デバイスを使用することをお勧めします。

一般的な仮想 MFA アプリでは、複数の仮想デバイスの作成がサポートされているため、複数の AWS アカウント またはユーザーに対しても同じアプリを使用できます。[MFA タイプ](https://aws.amazon.com/iam/features/mfa/)を任意に組み合わせた最大 **8** 台の MFA デバイスを AWS アカウントのルートユーザーおよび IAM ユーザーと共に登録できます。AWS マネジメントコンソールにログインしたり、AWS CLI を使用してセッションを確立したりするには、MFA デバイスが 1 台あれば十分です。複数の MFA デバイスを登録することをお勧めします。また、認証アプリ搭載のデバイスを紛失または損傷した場合にアカウントにアクセスできなくなるのを防ぐため、クラウドバックアップや同期機能を有効にすることをお勧めします。

AWS では、6 桁の 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 ユーザーの仮想 MFA デバイスを更新するには、次のポリシーのアクセス許可が必要です: [AWS: MFA で認証された IAM ユーザーが [セキュリティ認証情報] ページで自分の MFA デバイスを管理できるようにします](reference_policies_examples_aws_my-sec-creds-self-manage-mfa-only.md)。

## IAM ユーザーの仮想 MFA デバイスの有効化 (コンソール)
<a name="enable-virt-mfa-for-iam-user"></a>

AWS マネジメントコンソール で IAM を使用して、アカウントの IAM ユーザーの仮想 MFA デバイスを有効化および管理することができます。IAM リソース (仮想 MFA デバイスを含む) にタグをアタッチして、タグへのアクセスを特定、整理、制御することができます。仮想 MFA デバイスにタグを付けることができるのは、AWS CLI または AWS API を使用する場合のみです。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 マネジメントコンソールにサインインして、IAM コンソールを開きます [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. ナビゲーションペインで [**Users (ユーザー)**] を選択します。

1. **[Users]** (ユーザー) のリストで、IAM ユーザー名を選択します。

1. [**Security Credentials**] タブを選択します。**[Multi-factor authentication (MFA)** (多要素認証 (MFA)) で、**[Assign MFA device]** (MFA デバイスの割り当て) を選択します。

1. ウィザードで **[デバイス名]** を入力し、**[認証アプリ]**、**[次へ]** の順に選択します。

   IAM が QR コードを含む仮想 MFA デバイスの設定情報を生成して表示します。図は、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)**] ボックスに 2 つ目のワンタイムパススワードを入力します。**[Add MFA]** (MFA を追加) を選択します。
**重要**  
コードを生成したら、即時にリクエストを送信します。コードを生成した後にリクエストを送信するまで時間がかかりすぎる場合、MFA デバイスはユーザーとは正常に関連付けられますが、その MFA デバイスは同期されません。これは、タイムベースドワンタイムパスワード (TOTP) の有効期間が短いために起こります。その場合は、[デバイスの再同期](id_credentials_mfa_sync.md)ができます。

これで仮想 MFA デバイスを AWS で使用できます。AWS マネジメントコンソールでの MFA 利用の詳細については、「[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 タイプを任意に組み合わせた最大 **8** 台の MFA デバイスを登録できます。ユーザーがデバイスを紛失したか、何らかの理由で交換する必要がある場合は、古いデバイスを非アクティブ化します。その後、新しいデバイスをユーザーに追加できます。
+ 別の IAM ユーザーに関連付けられているデバイスを非アクティブ化するには、「[MFA デバイスを無効にする](id_credentials_mfa_disable.md)」を参照してください。
+ 別の IAM ユーザーの交換用の仮想 MFA デバイスを追加するには、上記の「[IAM ユーザーの仮想 MFA デバイスの有効化 (コンソール)](#enable-virt-mfa-for-iam-user)」の手順に従います。
+ AWS アカウントのルートユーザー ユーザーの交換用の仮想 MFA デバイスを追加するには、[ルートユーザーの仮想 MFA デバイスを有効にする (コンソール)](enable-virt-mfa-for-root.md) の手順に従います。

# AWS マネジメントコンソールでハードウェア TOTP トークンを割り当てる
<a name="id_credentials_mfa_enable_physical"></a>

**重要**  
AWS では、AWS への MFA に可能な限りパスキーまたはセキュリティキーを使用することをお勧めします。詳細については、「[AWS マネジメントコンソールでパスキーやセキュリティキーを割り当てる](id_credentials_mfa_enable_fido.md)」を参照してください。

ハードウェア TOTP トークンは、タイムベースドワンタイムパスワード (TOTP) アルゴリズムに基づいて、6 桁の数値コードを生成します。ユーザーは、サインインプロセス中に求められたら、デバイスから有効なコードを入力する必要があります。ユーザーに割り当てられる各 MFA デバイスは一意であり、他のユーザーのデバイス向けのコードでは認証されません。MFA デバイスをアカウント間またはユーザー間で共有することはできません。

ハードウェア TOTP トークンと [FIDO セキュリティキー](id_credentials_mfa_enable_fido.md)は、いずれもお客様が購入する物理デバイスです。ハードウェア MFA デバイスは、ユーザーが AWS にサインインすると認証用の TOTP コードを生成します。バッテリーに依存しているため、時間の経過とともにバッテリーの交換と AWS との再同期が必要になる場合があります。パブリックキー暗号化を利用した FIDO セキュリティキーは、バッテリーを必要とせず、シームレスな認証プロセスを提供します。フィッシング耐性を高めるためには、FIDO セキュリティキーを使用することをお勧めします。FIDO セキュリティキーは、TOTP デバイスの代わりに使用できる、よりセキュアな手段です。さらに、FIDO セキュリティキーは、同じデバイスで複数の IAM ユーザーまたはルートユーザーをサポートできるため、アカウントセキュリティのユーティリティが強化されます。両方のデバイスタイプの仕様と購入情報については、「[多要素認証](https://aws.amazon.com/iam/details/mfa/)」を参照してください。



IAM ユーザーのハードウェア TOTP デバイスは、AWS マネジメントコンソール、コマンドライン、または IAM API を使用して有効にすることができます。AWS アカウントのルートユーザー の MFA デバイス設定を有効にするには、「[のルートユーザー (コンソール) 用にハードウェア TOTP トークンを有効にします](enable-hw-mfa-for-root.md)」を参照してください。

AWS アカウントのルートユーザー および IAM ユーザーに対し、「[現在サポートされている MFA タイプ](https://aws.amazon.com/iam/features/mfa/)」の任意の組み合わせで、最大 **8** 台の MFA デバイスを登録できます。MFA デバイスが複数ある場合でも、そのユーザとして AWS マネジメントコンソール にログインしたり、AWS CLI を使用してセッションを作成したりするのに必要なのは、1 台の MFA デバイスだけです。

**重要**  
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>

重要な MFA 関連のアクションを保護しながら、IAM ユーザー用にハードウェア TOTP トークンを管理するには、以下のポリシーによるアクセス許可が必要です。

------
#### [ 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>

 自分のハードウェア TOTP トークンは、AWS マネジメントコンソール から有効化できます。

**注記**  
ハードウェア TOTP トークンを有効にする前に、そのデバイスに対し物理的なアクセス権限を持つ必要があります。

**自身の IAM ユーザーのハードウェア TOTP トークンを有効にするには (コンソール)**

1. AWS アカウント ID またはアカウントエイリアス、IAM ユーザー名、およびパスワードを使用して [IAM コンソール](https://console.aws.amazon.com/iam)にサインインします。
**注記**  
利便性のため、AWS サインインページは、ブラウザ cookie を使用して IAM ユーザー名とアカウント情報を記憶します。以前に別のユーザーとしてサインインしたことがある場合は、ページの下部にある**[別のアカウントにサインイン]**を選択し、メインのサインインページに戻ります。そこから、AWS アカウント ID またはアカウントエイリアスを入力して、アカウントの IAM ユーザーサインインページにリダイレクトされるようにすることができます。

   AWS アカウント アカウント ID の取得については、管理者にお問い合わせください。

1. 右上のナビゲーションバーで自分のユーザー名を選択し、続いて **[Security credentials]** (セキュリティ認証情報) を選択します。  
![\[AWS マネジメントコンソール のセキュリティ認証情報へのリンク\]](http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/images/security-credentials-user.shared.console.png)

1. **[AWS IAM 認証情報]** タブの **[多要素認証 (MFA)]** セクションで、**[MFA デバイスの割り当て]** を選択します。

1. ウィザード内で **[Device name]** (デバイス名) に入力した後、**[Hardware TOTP token]** (ハードウェア TOTP トークン)、**[Next]** (次へ) の順に選択します。

1. 対象デバイスのシリアルナンバーを入力します。シリアルナンバーは、通常、デバイスの背面にあります。

1. MFA デバイスに表示されている 6 桁の数字を [**MFA code 1 (MFA コード 1)**] に入力します。デバイス前面のボタンを押して数字を表示する場合があります。  
![\[IAM ダッシュボード、MFA デバイス\]](http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/images/MFADevice.png)

1. デバイスがコードを更新するまで 30 秒ほど待ち、更新後に表示された 6 桁の数字を [**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 マネジメントコンソールにサインインして、IAM コンソールを開きます [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. ナビゲーションペインで [**Users (ユーザー)**] を選択します。

1. MFA を有効化するユーザーの名前を選択します。

1. [**Security Credentials**] タブを選択します。**[Multi-factor authentication (MFA)** (多要素認証 (MFA)) で、**[Assign MFA device]** (MFA デバイスの割り当て) を選択します。

1. ウィザード内で **[Device name]** (デバイス名) に入力した後、**[Hardware TOTP token]** (ハードウェア TOTP トークン)、**[Next]** (次へ) の順に選択します。

1. 対象デバイスのシリアルナンバーを入力します。シリアルナンバーは、通常、デバイスの背面にあります。

1. MFA デバイスに表示されている 6 桁の数字を [**MFA code 1 (MFA コード 1)**] に入力します。デバイス前面のボタンを押して数字を表示する場合があります。  
![\[IAM ダッシュボード、MFA デバイス\]](http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/images/MFADevice.png)

1. デバイスがコードを更新するまで 30 秒ほど待ち、更新後に表示された 6 桁の数字を [**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>

「[現在サポートされている MFA タイプ](https://aws.amazon.com/iam/features/mfa/)」の任意の組み合わせで、一度に最大 8 台の MFA デバイスを、AWS アカウントのルートユーザー および IAM ユーザーに割り当てることができます。ユーザーがデバイスを紛失したか、何らかの理由で交換する必要がある場合、最初に古いデバイスを非アクティブ化する必要があります。その後、新しいデバイスをユーザーに追加できます。
+ 現在ユーザーに関連付けられているデバイスを非アクティブ化するには、「[MFA デバイスを無効にする](id_credentials_mfa_disable.md)」を参照してください。
+ IAM ユーザーに対し、交換用ハードウェア TOTP トークンを追加するには、このトピックの前半にある手順「[別の IAM ユーザーのハードウェア TOTP トークンを有効にする (コンソール)](#enable-hw-mfa-for-iam-user)」の各ステップに従います。
+ AWS アカウントのルートユーザー に対し、交換用ハードウェア TOTP トークンを追加するには、このトピックの上記手順「[のルートユーザー (コンソール) 用にハードウェア TOTP トークンを有効にします](enable-hw-mfa-for-root.md)」の各ステップに従います。

# AWS CLI または AWS API で MFA デバイスを割り当てる
<a name="id_credentials_mfa_enable_cliapi"></a>

IAM ユーザーの仮想 MFA デバイスを有効にするには、AWS CLI コマンドまたは AWS API オペレーションを使用します。AWS CLI、AWS API、Tools for Windows PowerShell、またはその他のコマンドラインツールを使用して AWS アカウントのルートユーザー の MFA デバイスを有効にすることはできません。ただし、AWS マネジメントコンソール を使用して、ルートユーザーの MFA デバイスを有効化することができます。

AWS マネジメントコンソール から MFA デバイスを有効にすると、コンソールがお客様に代わって複数のステップを実行します。代わりに 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) の **[Examples]** (例) セクションを参照してください。物理デバイスの場合は作成ステップを飛ばし、デバイスを同期してユーザーに関連付ける手順へ直接進んでください。

IAM リソース (仮想 MFA デバイスを含む) にタグをアタッチして、タグへのアクセスを特定、整理、制御することができます。仮想 MFA デバイスにタグを付けることができるのは、AWS CLI または AWS API を使用する場合のみです。

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 デバイスを無効にできます。これを正常に行うには、まず [https://docs.aws.amazon.com/STS/latest/APIReference/API_GetSessionToken.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetSessionToken.html) を呼び出し、既存の MFA デバイスで 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) 

**AWS を使用するように MFA デバイスを有効にするには**  
これらのコマンドでは、デバイスを 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 を復元する](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. **[Multi-factor Authentication (MFA)]** で、MFA が有効か無効かを確認します。MFA がアクティブ化されていない場合は、アラート記号 (![\[Alert icon\]](http://docs.aws.amazon.com/ja_jp/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. IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

1. ナビゲーションペインで **[ユーザー]** を選択します。

1. 必要に応じて、以下の手順を実行して、[**MFA**] 列を USERS テーブルに追加します。

   1. 右端のテーブルの上で、設定アイコン (![\[Settings icon\]](http://docs.aws.amazon.com/ja_jp/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 コンソールに移動して、ナビゲーションペインの [**ユーザー**] を選択し、テーブルの [**MFA**] 列の [**SMS**] を使用してユーザーを探します。

1. ユーザーの MFA デバイスに関する追加情報を表示するには、確認する MFA ステータスのユーザー名を選択します。次に、[**認証情報**] タブを選択します。

1. そのユーザーにアクティブな MFA デバイスがない場合は、コンソールに **[MFA デバイスなし] と表示されます。**[多要素認証 (MFA)]** セクションで [MFA デバイスを割り当てて AWS 環境のセキュリティを強化します]**。ユーザーの MFA デバイスが有効化されている場合、**[Multi-factor authentication (MFA)]** (多要素認証 (MFA)) セクションには、対象のデバイスに関する詳細が表示されます。
   + デバイス名
   + デバイスのタイプ
   + デバイスのID (物理デバイスのシリアル番号、または AWS での仮想デバイスの ARN)
   + デバイスの作成日時

デバイスを削除または再同期するには、そのデバイスの横にあるラジオボタンをオンにし、**[Remove]** (削除) または **[Resync]** (再同期) を選択します。

MFA の有効化の詳細については、以下を参照してください。
+ [AWS マネジメントコンソールで仮想 MFA デバイスを割り当てる](id_credentials_mfa_enable_virtual.md)
+ [AWS マネジメントコンソールでパスキーやセキュリティキーを割り当てる](id_credentials_mfa_enable_fido.md)
+ [AWS マネジメントコンソールでハードウェア TOTP トークンを割り当てる](id_credentials_mfa_enable_physical.md)

# 仮想 MFA デバイスとハードウェア MFA デバイスを再同期する
<a name="id_credentials_mfa_sync"></a>

AWS コンソールを使用して、仮想およびハードウェア Multi-Factor Authentication (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)」および「[IAM の AWS 多要素認証](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 ユーザー名とアカウント情報を記憶します。以前に別のユーザーとしてサインインしたことがある場合は、ページの下部にある**[別のアカウントにサインイン]**を選択し、メインのサインインページに戻ります。そこから、AWS アカウント ID またはアカウントエイリアスを入力して、アカウントの IAM ユーザーサインインページにリダイレクトされるようにすることができます。

   AWS アカウント アカウント ID の取得については、管理者にお問い合わせください。

1. 右上のナビゲーションバーで自分のユーザー名を選択し、続いて **[Security credentials]** (セキュリティ認証情報) を選択します。  
![\[AWS マネジメントコンソールのセキュリティ認証情報へのリンク\]](http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/images/security-credentials-user.shared.console.png)

1. **[AWS IAM 認証情報]** タブの **[多要素認証 (MFA)]** セクションで、MFA デバイスの横にあるラジオボタンを選択し、**[再同期]** を選択します。

1. デバイスで連続して生成された次の 2 つのコードを [**MFA コード 1**] および [**MFA コード 2**] に入力します。次に、**[Resync]** (再同期) を選択します。
**重要**  
コードを生成したら、即時にリクエストを送信します。コードを生成した後にリクエストを送信するまで時間がかかりすぎる場合、リクエスト処理中に見えますが、デバイスは同期されていません。これは、タイムベースドワンタイムパスワード (TOTP) の有効期間が短いために起こります。

**別の IAM ユーザーの仮想またはハードウェア MFA デバイスを再同期するには (コンソール)**

1. AWS マネジメントコンソール にサインインして、IAM コンソール [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) を開きます。

1. ナビゲーションペインで [**ユーザー**] を選択してから、MFA デバイスを再同期する必要があるユーザーの名前を選択します。

1. ［**Security credentials**］タブを選択します。**[多要素認証 (MFA)]** セクションで、MFA デバイスの横にあるラジオボタンを選択し、**[再同期]** を選択します。

1. デバイスで連続して生成された次の 2 つのコードを [**MFA コード 1**] および [**MFA コード 2**] に入力します。次に、**[Resync]** (再同期) を選択します。
**重要**  
コードを生成したら、即時にリクエストを送信します。コードを生成した後にリクエストを送信するまで時間がかかりすぎる場合、リクエスト処理中に見えますが、デバイスは同期されていません。これは、タイムベースドワンタイムパスワード (TOTP) の有効期間が短いために起こります。

**サインインする前に ルートユーザーMFA を再同期するには (コンソール)**

1. [**Amazon Web Services Sign In With Authentication Device (認証デバイスによる Amazon Web Services へのサインイン)**] ページで、[**認証デバイスに問題がありますか?] を選択します。[Click here]** (ここをクリックしてください)｡
**注記**  
他のテキスト (例: **MFA を使用してサインイン** や **認証デバイスのトラブルシューティング**) が表示される場合があります。ただし、提供されている機能は同じです。

1. [**Re-Sync With Our Servers (サーバーとの再同期)**] セクションで、デバイスで連続して生成された次の 2 つのコードを [**MFA code 1 (MFA コード 1)**] および [**MFA code 2 (MFA コード 2)**] に入力します。次に、[**Re-sync authentication device (認証デバイスの再同期)**] を選択します。

1. 必要に応じて、パスワードをもう一度入力し、[**サインイン**] を選択します。次に、MFA デバイスを使用してサインインを完了します。

**サインインした後に ルートユーザーMFA デバイスを再同期するには (コンソール)**

1. **[Root user]** (ルートユーザー) を選択して AWS アカウント の E メールアドレスを入力し、アカウント所有者として [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. ナビゲーションバーの右側で、使用するアカウント名を選択し、次に **[Security Credentials]** (セキュリティ認証情報) を選択します。必要に応じて、**[Continue to Security credentials]** (セキュリティ認証情報に進む) を選択します。  
![\[ナビゲーションメニューの [Security credentials] (セキュリティ認証情報)\]](http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/images/security-credentials-root.shared.console.png)

1. ページの [**Multi-Factor Authentication (MFA)**] セクションを展開します。

1. デバイスの横にあるラジオボタンを選択して、**[Resync]** (再同期) を選択します。

1. **[Resync MFA device]** (MFA デバイスを再同期) ダイアログボックスで、デバイスで連続して生成された次の 2 つのコードを **[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 デバイスまたはハードウェア MFA デバイスを再同期するには (AWS CLI)**  
コマンドプロンプトで、[aws iam resync-mfa-device](https://docs.aws.amazon.com/cli/latest/reference/iam/resync-mfa-device.html)コマンドを発行します。
+ 仮想 MFA デバイス: デバイスの Amazon リソースネーム（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 トークンを購入できます。シリアル番号は通常、4 つの文字の後に 4 つの数字が続きます。

  ```
  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 ユーザーの仮想またはハードウェア MFA デバイスを再同期するには (AWS API)**
+ [ResyncMFADevice](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ResyncMFADevice.html) リクエストを送信します。

# MFA デバイスを無効にする
<a name="id_credentials_mfa_disable"></a>

IAM ユーザーとして多要素認証 (MFA) デバイスにサインインできない場合は、管理者に連絡してください。

管理者として、他の IAM ユーザー用に端末を無効にすることができます。これにより、ユーザーは MFA を使用しないでサインインできます。MFA デバイスが置き換えられる際、またはデバイスが一時的に使用できない時に、一時的な対処方法としてれを行う場合があります。ただし、ユーザーの新しいデバイスを可能な限り速やかに有効にすることをお勧めします。MFA デバイスを有効化する方法については [IAM の AWS 多要素認証](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 マネジメントコンソールにサインインして、IAM コンソールを開きます [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/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. **[Root user]** (ルートユーザー) を選択して AWS アカウント の E メールアドレスを入力し、アカウント所有者として [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. ナビゲーションバーの右側で、使用するアカウント名を選択し、次に **[Security Credentials]** (セキュリティ認証情報) を選択します。必要に応じて、**[Continue to Security credentials]** (セキュリティ認証情報に進む) を選択します。  
![\[ナビゲーションメニューのセキュリティ認証情報\]](http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/images/security-credentials-root.shared.console.png)

1. **[Multi-factor authentication (MFA)]** (多要素認証 (MFA))セクションで、無効化する MFA デバイスの横にあるラジオボタンをオンにし、**[Remove]** (削除) を選択します。

1. **[**を削除] を選択します。

   AWS アカウント 向けの MFA デバイスの無効化が完了しました。AWS アカウント に関連付けられている E メールを Amazon Web Services からの確認メッセージで確認します。この E メールでは、Amazon Web Services の Multi-Factor Authentication (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 で保護された ID を復元する
<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 デバイスを登録すると、1 つのデバイスが紛失または損傷しても、継続的なアクセスを確保できるようになります。AWS アカウントのルートユーザー と IAM ユーザーは、任意のタイプの MFA デバイスを最大 8 台登録できます。

## 前提条件 — 別の MFA デバイスを使用する
<a name="mfa-lost-or-broken-prerequisites"></a>

[多要素認証 (MFA) デバイス](id_credentials_mfa.md)を紛失または破損したり、MFA デバイスが機能しなかったりする場合は、同じルートユーザーまたは IAM ユーザーに登録された別の MFA デバイスを使用してサインインできます。

**別の MFA デバイスを使用してサインインするには**

1. AWS アカウント ID またはアカウントのエイリアスおよびパスワードを使用して [AWS マネジメントコンソール](url-comsole-domain;iam) にサインインします。

1. **[追加の検証が必要]** ページまたは **[多要素認証]** ページで、**[別の MFA 方法を試す]** を選択します。

1. 選択した MFA デバイスのタイプで認証します。

1. 次のステップは、代替 MFA デバイスで正常にサインインしたかどうかによって異なります。
   + 正常にサインインできたら、[仮想 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 で保護された ID を復旧します。



## ルートユーザー MFA デバイスの回復
<a name="root-mfa-lost-or-broken"></a>

MFA を使用してサインインできない場合は、アカウントに登録されているメールアドレスと主な連絡先電話番号を使用して本人確認を行うことで、別の認証方法を使用してサインインできます。

代替認証要素を使用してルートユーザーとしてサインインする前に、アカウントに関連付けられている E メールと主要連絡先の電話番号にアクセスできることを確認します。主要連絡先の電話番号を更新する必要がある場合は、ルートユーザーではなく、管理者アクセス権を持つ IAM ユーザーとしてサインインします。アカウント連絡先情報の更新に関するその他の手順については、AWS Billing ユーザーガイドの「[連絡先情報の編集](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-update-contact-primary.html)」を参照してください。E メールと主要連絡先の電話番号にアクセスできない場合は、[AWS サポート](https://support.aws.amazon.com/#/contacts/aws-mfa-support) に連絡する必要があります。

**重要**  
アカウントを正常に回復するために、ルートユーザーにリンクされている E メールアドレスと連絡先電話番号を最新の状態に保つことをお勧めします。詳細については、「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 のトラブルシューティング**ですが、機能は同じです。代替認証要素を使用してアカウントの E メールアドレスと主要連絡先の電話番号を確認できない場合は、MFA デバイスを非アクティブ化するように [AWS サポート](https://support.aws.amazon.com/#/contacts/aws-mfa-support) に連絡する必要があります。

1. 使用している MFA の種類に応じて表示されるページは異なりますが、**[MFA のトラブルシューティング]** オプションの機能は同じです。**[追加の検証が必要]** ページまたは「[**多要素認証]** ページで、**[MFA のトラブルシューティング]** を選択します。

1. 必要に応じて、パスワードをもう一度入力し、[**サインイン**] を選択します。

1. **[認証デバイスのトラブルシューティング]** ページの **[別の認証要素を使用してサインイン]** セクションで **[別の要素を使用してサインイン]** を選択します。

1. 「**別の認証要素を使用してサインイン**」ページで、E メールアドレスの確認を行ってアカウントを認証します。**[確認 E メールを送信]** を選択します。

1. AWS アカウント に関連付けられているメールで、Amazon ウェブサービス (recover-mfa-no-reply@verify.signin.aws) からのメッセージを確認します。E メールの指示にしたがって操作します。

   アカウントに E メールが表示されない場合は、迷惑メールフォルダを確認するか、ブラウザに戻り、[**Resend the email (E メールの再送信)**] を選択します。

1. E メールアドレスを確認した後も、アカウントの認証を続けることができます。主要連絡先の電話番号を確認するには、**[Call me now]** (すぐに連絡を受ける) を選択します。

1. AWS からの呼び出しに応答し、プロンプトが表示されたら、AWS ウェブサイトの電話番号の 6 桁の番号を入力します。

   AWS からの呼び出しを受けない場合は、[**サインイン**] を選択してコンソールに再度サインインし、やり直してください。または、「[Lost or unusable Multi-Factor Authentication (MFA) device](https://support.aws.amazon.com/#/contacts/aws-mfa-support)」(多要素認証 (MFA) の紛失または使用不可) を参照して、サポートにお問い合わせください。

1. 電話番号を確認した後、[**Sign in to the console (コンソールにサインイン)**] を選択してアカウントにサインインすることができます。

1. 次の手順は、使用している MFA のタイプによって異なります。
   + 仮想 MFA デバイスの場合は、デバイスからアカウントを削除します。次に、[AWS セキュリティ認証情報](https://console.aws.amazon.com/iam/home?#security_credential)ページにアクセスし、古い仮想 MFA デバイスのエンティティを削除してから、新しいキーペアを作成することができます。
   + FIDO セキュリティキーの場合は、[[AWS Security Credentials]](https://console.aws.amazon.com/iam/home?#security_credential) ページに移動し、新しい FIDO セキュリティキーを有効にする前に古い FIDO セキュリティキーを非アクティブにします。
   + ハードウェア TOTP トークンの場合は、デバイスの修理または交換についてサードパーティープロバイダーにお問い合わせください。新しいデバイスを受け取るまで、認証の代替要因を使用してサインインを続けることができます。新しいハードウェア MFA デバイスを入手したら、[AWS セキュリティ認証情報](https://console.aws.amazon.com/iam/home?#security_credential)ページに移動し、古い MFA デバイスを削除します。
**注記**  
紛失または盗難された MFA デバイスを同じタイプのデバイスで置き換える必要はありません。例えば、FIDO セキュリティキーが損傷し、新しいものを注文した場合は、その新しい FIDO キーが届くまで、仮想 MFA またはハードウェア TOTP トークンを使用できます。

**重要**  
MFA デバイスが紛失または盗まれた場合は、代替の MFA デバイスにサインインして確立してから、ルートユーザーパスワードを変更します。攻撃者が認証デバイスを盗み、現在のパスワードも保持している可能性があるからです。詳細については、「[AWS アカウントのルートユーザー のパスワードを変更する](root-user-password.md)」を参照してください。

## IAM ユーザー MFA デバイスの回復
<a name="iam-user-mfa-lost-or-broken"></a>

MFA でサインインできない IAM ユーザーは、自ら MFA デバイスを復旧することはできません。管理者に連絡して、デバイスを非アクティブ化するように依頼する必要があります。その後、新しいデバイスを有効にすることができます。

**IAM ユーザーとしての MFA デバイスに関するヘルプ情報を入手するには**

1. お使いの IAM ユーザーのユーザー名やパスワードの設定を行った AWS システム管理者あるいは別の担当者にご連絡ください。管理者は､サインインできるように「[MFA デバイスを無効にする](id_credentials_mfa_disable.md)」の説明に従って、MFA デバイスを非アクティブ化する必要があります。

1. 次の手順は、使用している MFA のタイプによって異なります。
   + 仮想 MFA デバイスの場合は、デバイスからアカウントを削除します。次に、「[AWS マネジメントコンソールで仮想 MFA デバイスを割り当てる](id_credentials_mfa_enable_virtual.md)」の説明に従って､仮想デバイスを有効にします。
   + FIDO セキュリティキーの場合、デバイスの交換についてサードパーティープロバイダーにお問い合わせください。新しい FIDO セキュリティキーを受け取ったら、「[AWS マネジメントコンソールでパスキーやセキュリティキーを割り当てる](id_credentials_mfa_enable_fido.md)」で説明されているとおりに有効にします。
   + ハードウェア TOTP トークンの場合は、デバイスの修理または交換についてサードパーティープロバイダーにお問い合わせください。新しい物理 MFA デバイスを入手したら、「[AWS マネジメントコンソールでハードウェア TOTP トークンを割り当てる](id_credentials_mfa_enable_physical.md)」の説明に従ってデバイスを有効にします。
**注記**  
紛失または盗難された MFA デバイスを同じタイプのデバイスで置き換える必要はありません。任意の組み合わせの MFA デバイスを最大で 8 台用意できます。例えば、FIDO セキュリティキーが損傷し、新しいものを注文した場合は、その新しい FIDO キーが届くまで、仮想 MFA またはハードウェア TOTP トークンを使用できます。

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>

API オペレーションに MFA 保護を追加する場合、次のタスクが関連します:

1. 管理者は、MFA 認証が求められる API リクエストを行うユーザーごとに AWS MFA デバイスを設定します。詳細については、「[IAM の AWS 多要素認証](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 は他の承認されていないアクセスと同様に "Access Denied" というエラーメッセージを返します。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 を使って認証されたことを単に確認するには、`Bool` 条件で `aws:MultiFactorAuthPresent` キーが `True` であることを確認します。ユーザーが短期的な認証情報で認証した場合に限りキーが表示されます。アクセスキーのような長期的な認証情報に、このキーは含まれません。
+ 期間 - MFA 認証後、指定された期間内のみアクセス権を与える場合、数値条件タイプを使用して `aws:MultiFactorAuthAge` キーの有効期間を値 (3600 秒など) と比較します。MFA が使用されなかった場合、`aws:MultiFactorAuthAge` キーは存在しません。

以下の例は、MFA 認証の存在をテストする MFA 条件が含まれる、IAM ロールの信頼ポリシーを示します。このポリシーにより、`Principal` 要素 (`ACCOUNT-B-ID` を有効な AWS アカウント ID に置き換えます) で指定された AWS アカウント のユーザーは、このポリシーがアタッチされたロールを引き受けることができます。ただし、このようなユーザーは、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 には、ユーザーが MFA 情報を渡す際に使用できる 2 つの API オペレーションである `GetSessionToken` と `AssumeRole` があります。ユーザーが一時的な認証情報を取得するために呼び出す API オペレーションは、以下のどのシナリオがあてはまるかによって異なります。

**以下のシナリオでは、`GetSessionToken` を使用します。**
+ リクエストを作成する IAM ユーザーと同じ AWS アカウント のリソースにアクセスする API オペレーションの呼び出し。 `GetSessionToken`リクエストによる一時的な認証情報で IAM および AWS STS API にアクセスできるのは、認証情報のリクエストに MFA 情報を含めた場合*のみ*である点に注意してください。`GetSessionToken` によって返される一時的な認証情報には MFA 情報が含まれているので、認証情報によって実行される各 API オペレーションで MFA を確認できます。
+ リソースに基づくポリシー (MFA 条件を含む) で保護されているリソースへのアクセス。

`GetSessionToken` オペレーションの目的は、MFA を使用してユーザーを認証することです。認証オペレーションを制御するためにポリシーを使用することはできません。

**以下のシナリオでは、`AssumeRole` を使用します。**
+ 同じまたは異なる AWS アカウント のリソースにアクセスする API オペレーションの呼び出し。API コールには、任意の IAM または AWS STS API を含めることができます。アクセスを保護するには、ユーザーがロールを引き受けた時点で MFA を強制する必要があります。`AssumeRole` によって返される一時的な認証情報のコンテキストには MFA 情報が含まれていないので、MFA に対する個別の API オペレーションを確認できません。このため、リソースベースのポリシーで保護されたリソースへのアクセスを制限するために、`GetSessionToken` を使用する必要があります。

**注記**  
IAM ユーザーが MFA でサインインするとき、AWS CloudTrail ログには MFA 情報が含まれます。IAM ユーザーが IAM ロールを引き受けると、CloudTrail は引き受けたロールを使用して実行されたアクションの `sessionContext` 属性も `mfaAuthenticated: true` をログに記録します。ただし、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 アクセスを使用することはできません。
+ フェデレーションユーザーに AWS サービス利用のために MFA デバイスを割り当てることはできませんので、そのようなユーザーは MFA が管理する AWS リソースへアクセスできません。(次のポイントを参照してください。) 
+ 一時的な認証情報を返す他の AWS STS API オペレーションは、MFA をサポートしていません。`AssumeRoleWithWebIdentity` と `AssumeRoleWithSAML` の場合、ユーザーは外部プロバイダーによって認証されており、プロバイダーが MFA を要求したかどうかを AWS が判断することはできません。`GetFederationToken` については、MFA は必ずしも特定のユーザーに関連付けられていません。
+ 同様に、長期的な認証情報 (IAM ユーザーアクセスキーと ルートユーザーアクセスキー) は失効しないため、MFA 保護 API アクセスでは使用できません。
+ `AssumeRole` と `GetSessionToken` は、MFA 情報がない状態でも呼び出すことができます。この場合、発信者は一時的な認証情報を取り戻しますが、その一時的認証情報のセッション情報では、ユーザーが MFA を使用して認証されたことが示されません。
+ API オペレーションに対する MFA 保護を確立するには、ポリシーに MFA 条件を追加します。MFA の使用を適用するには、ポリシーに `aws:MultiFactorAuthPresent` 条件キーが含まれている必要があります。クロスアカウントの委任では、ロールの信頼ポリシーに条件キーが含まれている必要があります。
+ 別の AWS アカウント に自分のアカウントのリソースへのアクセスを許可する場合、リソースのセキュリティは、信頼されたアカウント (つまりお客様のアカウントではない他のアカウント) の設定によって決まります。これは、多要素認証を要求する場合にも当てはまります。仮想 MFA デバイスを作成するアクセス許可がある、信頼されるアカウント内のアイデンティティは、ロールの信頼ポリシーのその部分を満たすために MFA クレームを作成できます。他のアカウントのメンバーに多要素認証を必要とする自身の AWS リソースへのアクセスを許可する前に、信頼されるアカウントの所有者がセキュリティのベストプラクティスを取り入れていることを確認する必要があります。たとえば、信頼されるアカウントは、MFA デバイス管理 API オペレーションなどの機密性の高い API オペレーションへのアクセスを指定する信頼できるアイデンティティに制限する必要があります。
+ ポリシーに MFA の条件が含まれている場合、ユーザーが MFA 認証済みでないか、無効な MFA デバイス識別子または無効な TOTP を入力すると、リクエストは拒否されます。

## シナリオ: クロスアカウントの委任の MFA 保護
<a name="MFAProtectedAPI-cross-account-delegation"></a>

このシナリオでは、ユーザーが AWS MFA デバイスを使用して認証された場合にのみ、別のアカウントの IAM ユーザーにアクセスを委任します。クロスアカウントの委任に関する詳細については、「[ロールに関する用語と概念](id_roles.md#id_roles_terms-and-concepts)」を参照してください。

アカウント A (アクセス対象のリソースを所有している信頼するアカウント) があり、このアカウントに管理者権限を持つ IAM ユーザー Anaya がいると仮定します。Anaya は、アカウント B (信頼されたアカウント) のユーザー Richard にアクセス許可を付与するつもりですが、Richard がロールを引き受ける前に、MFA によって認証されていることを確認する必要があります。

1. 信頼するアカウント A で、Anaya は `CrossAccountRole` という IAM ロールを作成し、ロールの信頼ポリシーのプリンシパルをアカウント 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 デバイスを使用して設定されていること、および Richard がデバイスの ID を知っていることを確認します。ハードウェア MFA デバイスの場合には、デバイス ID はシリアル番号であり、仮想 MFA デバイスの場合には、デバイス ID はデバイスの ARN です。

1. アカウント B で、管理者は、`AssumeRole` アクションを呼び出すことを許可する次のポリシーを、ユーザー Richard (または彼が属するグループ) にアタッチします。リソースは、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 は Richard に有効な認証情報 (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 アカウント でユーザーが AWS MFA デバイスを使用して認証された場合のみ、機密性の高い API オペレーションにアクセスできるようにする必要があります。

アカウント A があり、そこに EC2 インスタンスの作業を必要としている開発者グループが存在すると仮定します。通常の開発者は、インスタンスの作業を実行できますが、`ec2:StopInstances` または `ec2:TerminateInstances` アクションへのアクセス許可を付与されていません。このようなの「有害な」特権的アクションをいくつかの信頼されたユーザーに制限するために、これらの機密性の高い Amazon EC2 アクションを許可するポリシーに MFA 保護を追加します。

このシナリオでは、信頼されたユーザーの 1 人がユーザー Sofía です。ユーザー Anaya は、アカウント A の管理者です。

1. Anaya は、Sofía が AWS MFA デバイスで設定されていること、および Sofía がこのデバイスの ID を知っていることを確認します。ハードウェア MFA デバイスの場合には、デバイス ID はシリアル番号であり、仮想 MFA デバイスの場合には、デバイス ID はデバイスの ARN です。

1. Anaya は `EC2-Admins` という名のグループを作成し、ユーザー Sofía をグループに追加します。

1. Anaya は、次のポリシーを `EC2-Admins` グループにアタッチします。このポリシーは、ユーザーが MFA を使用して認証された場合にのみ、ユーザーに Amazon EC2 `StopInstances` アクションと `TerminateInstances` アクションを呼び出すアクセス許可を与えます。

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

****  

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

------

1. 
**注記**  
このポリシーを有効にするために、ユーザーはまずサインアウトして、再度サインインする必要があります。

   ユーザー Sofía が Amazon EC2 インスタンスを停止または終了する必要がある場合、Sofía (または Sofía が実行しているアプリケーション) は `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 保護を提供する方法を説明します。この場合、ユーザーは次の 3 つの条件を満たしている場合にリソースにアクセスできます。これは、ユーザーが 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 削除機能を有効にできます。IAM ユーザーでは Amazon S3 MFA 削除機能を使うことはできず、また MFA 保護 API とは別のアクセス管理となっています。バケットの削除権限を持つ IAM ユーザーであっても、Amazon S3 MFA 削除機能を使用してバケットの削除を行うことはできません。Amazon S3 MFA 削除機能の詳細については、[MFA Delete](https://docs.aws.amazon.com/AmazonS3/latest/dev/MultiFactorAuthenticationDelete.html) を参照してください。

1. アカウント C で管理者は、ユーザー Nikhil が AWS MFA デバイスを使用して設定されていること、および Nikhil がデバイスの ID を知っていることを確認します。ハードウェア MFA デバイスの場合には、デバイス ID はシリアル番号であり、仮想 MFA デバイスの場合には、デバイス ID はデバイスの ARN です。

1. アカウント C で、Nikhil (または 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 ID のために短期間有効な認証情報のセットを取得するには**  
次の `get-session-token` コマンドは、呼び出しを実行する IAM ID のために短期間有効な認証情報のセットを取得します。結果として得られる認証情報は、ポリシーによって多要素認証 (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` インスタンスを返します。一時的な認証情報をリクエストするために使用される認証情報は、現在のシェルのデフォルトから推測されます。他の認証情報を指定するには、-ProfileName または-AccessKey/-SecretKey パラメータを使用します。**  

```
Get-STSSessionToken
```
**出力:**  

```
AccessKeyId                             Expiration                              SecretAccessKey                        SessionToken
-----------                             ----------                              ---------------                        ------------
EXAMPLEACCESSKEYID                      2/16/2015 9:12:28 PM                    examplesecretaccesskey...              SamPleTokeN.....
```
**例 2: 1 時間有効な一時的な認証情報を含む `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 デバイスの識別番号とデバイスから提供された値を使用して、1 時間有効な一時的な認証情報を含む `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 コマンドレットリファレンス (V4)* の「[GetSessionToken](https://docs.aws.amazon.com/powershell/v4/reference)」を参照してください。

**Tools for PowerShell V5**  
**例 1: 一定期間有効な一時的な認証情報を含む `Amazon.RuntimeAWSCredentials` インスタンスを返します。一時的な認証情報をリクエストするために使用される認証情報は、現在のシェルのデフォルトから推測されます。他の認証情報を指定するには、-ProfileName または-AccessKey/-SecretKey パラメータを使用します。**  

```
Get-STSSessionToken
```
**出力:**  

```
AccessKeyId                             Expiration                              SecretAccessKey                        SessionToken
-----------                             ----------                              ---------------                        ------------
EXAMPLEACCESSKEYID                      2/16/2015 9:12:28 PM                    examplesecretaccesskey...              SamPleTokeN.....
```
**例 2: 1 時間有効な一時的な認証情報を含む `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 デバイスの識別番号とデバイスから提供された値を使用して、1 時間有効な一時的な認証情報を含む `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 ]

**SDK for Python (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 リファレンス」の「[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 ]

**SDK for .NET**  
 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 の詳細については、AWS SDK for .NET API リファレンスの「[AssumeRole](https://docs.aws.amazon.com/goto/DotNetSDKV3/sts-2011-06-15/AssumeRole)」を参照してください。**

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

**Bash スクリプトを使用した AWS CLI**  
 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 ]

**SDK for C\$1\$1**  
 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 の詳細については、AWS SDK for C\$1\$1 API リファレンスの「[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 を使用する場合は、ロールに関連付けられた名前付きプロファイルを設定できます。プロファイルを使用すると、AWS CLI は assume-role を呼び出し、ユーザーのために認証情報を管理します。詳細については、「*AWS CLI ユーザーガイド*」の「[AWS CLI で IAM ロールを使用する](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html)」を参照してください。  
+  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 リファレンスの「[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 の詳細については、「*AWS SDK for JavaScript API リファレンス*」の「[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 の詳細については、AWS SDK for JavaScript API リファレンスの「[AssumeRole](https://docs.aws.amazon.com/goto/AWSJavaScriptSDK/sts-2011-06-15/AssumeRole)」を参照してください。**

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

**Tools for PowerShell V4**  
**例 1: 一時的な認証情報一式 (アクセスキー、シークレットキー、セッショントークン) を返します。この認証情報は、リクエストしたユーザーが通常はアクセスできない AWS リソースに 1 時間アクセスするために使用できます。返される認証情報には、引き受けているロールのアクセスポリシーと提供されたポリシーで許可されている権限があります (提供されたポリシーを使用して、引き受けているロールのアクセスポリシーで定義されている権限を超える権限を付与することはできません)。**  

```
Use-STSRole -RoleSessionName "Bob" -RoleArn "arn:aws:iam::123456789012:role/demo" -Policy "...JSON policy..." -DurationInSeconds 3600
```
**例 2: 引き受けているロールのアクセスポリシーで定義されているのと同じ権限を持つ、1 時間有効の一時的な認証情報を返します。**  

```
Use-STSRole -RoleSessionName "Bob" -RoleArn "arn:aws:iam::123456789012:role/demo" -DurationInSeconds 3600
```
**例 3: コマンドレットの実行に使用されるユーザー認証情報に関連付けられている 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 コマンドレットリファレンス (V4)* の「[AssumeRole](https://docs.aws.amazon.com/powershell/v4/reference)」を参照してください。

**Tools for PowerShell V5**  
**例 1: 一時的な認証情報一式 (アクセスキー、シークレットキー、セッショントークン) を返します。この認証情報は、リクエストしたユーザーが通常はアクセスできない AWS リソースに 1 時間アクセスするために使用できます。返される認証情報には、引き受けているロールのアクセスポリシーと提供されたポリシーで許可されている権限があります (提供されたポリシーを使用して、引き受けているロールのアクセスポリシーで定義されている権限を超える権限を付与することはできません)。**  

```
Use-STSRole -RoleSessionName "Bob" -RoleArn "arn:aws:iam::123456789012:role/demo" -Policy "...JSON policy..." -DurationInSeconds 3600
```
**例 2: 引き受けているロールのアクセスポリシーで定義されているのと同じ権限を持つ、1 時間有効の一時的な認証情報を返します。**  

```
Use-STSRole -RoleSessionName "Bob" -RoleArn "arn:aws:iam::123456789012:role/demo" -DurationInSeconds 3600
```
**例 3: コマンドレットの実行に使用されるユーザー認証情報に関連付けられている 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 ]

**SDK for Python (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 リファレンス*」の「[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 の詳細については、AWS SDK for Ruby API リファレンスの「[AssumeRole](https://docs.aws.amazon.com/goto/SdkForRubyV3/sts-2011-06-15/AssumeRole)」を参照してください。**

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

**SDK for Rust**  
 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 の詳細については、「AWS SDK for Rust API リファレンス」の「[AssumeRole](https://docs.rs/aws-sdk-sts/latest/aws_sdk_sts/client/struct.Client.html#method.assume_role)」を参照してください。

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

**SDK for Swift**  
 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 の詳細については、「AWS SDK for Swift API リファレンス」の「[AssumeRole](https://sdk.amazonaws.com/swift/api/awssts/latest/documentation/awssts/stsclient/assumerole(input:))」を参照してください。

------