

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ユーザーアカウントのサインアップと確認
<a name="signing-up-users-in-your-app"></a>

ユーザーアカウントは次の方法の 1 つでユーザープールに追加されます。
+ ユーザーは、ユーザープールのクライアントアプリにサインアップします。これはモバイルまたはウェブアプリです。
+ ユーザープールにユーザーのアカウントをインポートできます。詳細については、「[CSV ファイルからユーザープールへのユーザーのインポート](cognito-user-pools-using-import-tool.md)」を参照してください。
+ ユーザープールにユーザーのアカウントを作成し、サインインへユーザーを招待することができます。詳細については、「[管理者としてのユーザーアカウントの作成](how-to-create-user-accounts.md)」を参照してください。

サインアップするユーザーは、サインインする前に確認が求められます。インポートされ作成されたユーザーはすでに確認されていますが、初めてサインインするときはパスワードを作成する必要があります。以下のセクションで、確認プロセス、E メール、電話確認について説明します。

**サインアップ時のパスワード**  
Amazon Cognito では、以下の条件を除き、サインアップ時にすべてのユーザーにパスワードの入力を求めます。以下の条件を*すべて*満たしている場合は、サインアップオペレーションでパスワードを省略できます。

1. [[パスワードなしのサインイン]](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless) がユーザープールとアプリケーションクライアントでアクティブになっている。

1. アプリケーションは AWS SDK の認証モジュールを使用してカスタムビルドされます。マネージドログインとホストされた UI には、常にパスワードが必要です。

1. ユーザーが、許可されたパスワードなしのサインイン方法 (E メールまたは SMS メッセージのワンタイムパスワード (OTP) など) の属性値を指定している。例えば、E メールと電話の OTP によるサインインが許可されている場合、ユーザーは電話番号または E メールアドレスを指定できますが、E メールによるサインインのみが許可されている場合は、E メールアドレスを指定する必要があります。

1. ユーザープールが、パスワードなしのサインインでユーザーが使用できる属性を[自動的に検証](#allowing-users-to-sign-up-and-confirm-themselves)する。

1. どの [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html) リクエストでも、ユーザーは [Password](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html#CognitoUserPools-SignUp-request-Password) パラメータの値を指定しない。

## ユーザーアカウント確認の概要
<a name="signup-confirmation-verification-overview"></a>

次の図は確認プロセスを示しています。

![\[ユーザーが確認コードを入力すると、自動的に E メールまたは電話を確認します。\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/amazon-cognito-sign-in-confirm-user.png)


ユーザーアカウントは、以下のいずれかの状態になります。

**登録済み (未確認)**  
ユーザーは正常にサインアップできますが、ユーザーアカウントを確認するまではサインインできません。ユーザーは有効ですが、この状態で確認されていません。  
サインアップする新しいユーザーはこの状態から開始します。

**確認済み**  
ユーザーアカウントが確認され、ユーザーはサインインできます。ユーザーがユーザーアカウントを確認するためにコードを入力したり、E メールのリンクをたどったりすると、その E メールや電話番号が自動的に認証されます。コードまたはリンクは 24 時間有効です。  
ユーザーアカウントが管理者またはサインアップ前の Lambda トリガーによって確認された場合は、検証済みの E メールまたは電話番号がアカウントに関連付けられていないことがあります。

**パスワードのリセットが必要**  
ユーザーアカウントは確認されましたが、ユーザーはサインインする前にコードをリクエストし、自身のパスワードをリセットする必要があります。  
管理者またはデベロッパーがインポートしたユーザーアカウントは、この状態から開始します。

**パスワードの強制変更**  
ユーザーアカウントが確認され、ユーザーは一時パスワードを使用してサインインできますが、初回のサインイン時に他の操作を行う前にパスワードを新しい値に変更する必要があります。  
管理者またはデベロッパーが作成したユーザーアカウントは、この状態から開始します。

**Disabled**  
ユーザーアカウントを削除する前に、そのユーザーのサインインアクセスを無効にする必要があります。

**その他のリソース**
+ [Amazon Cognito による非アクティブなユーザーアカウントの検出と修正](https://aws.amazon.com/blogs/security/detecting-and-remediating-inactive-user-accounts-with-amazon-cognito/)

## サインアップ時に連絡先情報を検証する
<a name="allowing-users-to-sign-up-and-confirm-themselves"></a>

新しいユーザーがアプリにサインアップする際、1 つ以上の連絡先の入力を求める必要があります。たとえば、ユーザーの連絡先情報は、以下のように使用されます。
+ ユーザーが自分のパスワードをリセットする際、仮パスワードを送信する。
+ ユーザーの個人情報または財務情報が更新された際に通知する。
+ プロモーションメッセージ (特価販売や割引など) を送信する。
+ アカウントの概要または請求日のお知らせを送信する。

このようなユースケースでは、検証済みの送信先にメッセージを送信することが重要です。そうしないと、誤入力された無効な E メールアドレスまたは電話番号にメッセージが送信される可能性があります。さらに悪いケースでは、ユーザーを騙る悪人に機密情報が送信される可能性があります。

適切なユーザーにのみメッセージが送信されることを確実にするには、サインアップ時にユーザーが以下の情報を入力することを必須とするように Amazon Cognito ユーザープールを設定します。

1. E メールアドレスおよび電話番号。

1. Amazon Cognito がその E メールアドレスまたは電話番号に送信する検証コード。24 時間が経過し、ユーザーのコードまたはリンクが有効でなくなった場合は、[ResendConfirmationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html) API オペレーションを呼び出して、新しいコードまたはリンクを生成して送信します。

検証コードを入力することで、コードを受信したメールボックスまたは電話へのアクセス権があるユーザーであることが証明されます。ユーザーがコードを入力すると、Amazon Cognito が以下を行うことによってユーザープールのユーザーに関する情報を更新します。
+ ユーザーのステータスを `CONFIRMED` に設定する。
+ ユーザーの属性を更新し、E メールアドレスまたは電話番号が検証されていることを示す。

この情報は、Amazon Cognito コンソールを使用して表示できます。または、 `AdminGetUser` API オペレーション、 で `admin-get-user` コマンド AWS CLI、またはいずれかの AWS SDKs で対応するアクションを使用できます。

ユーザーに検証済みの連絡方法がある場合は、ユーザーがパスワードリセットをリクエストする時に、Amazon Cognito が自動的にメッセージをユーザーに送信します。

### ユーザー属性を確認および検証するその他のアクション
<a name="allowing-users-to-sign-up-and-confirm-themselves-other-actions"></a>

次のユーザーアクティビティでは、ユーザー属性を検証します。これらの属性を自動的に検証するように設定する必要はありません。リストされたアクションは、すべてのケースで属性を検証済みとしてマークします。

**E メールアドレス**  

1. E メールのワンタイムパスワード (OTP) を使用した[パスワードなしの認証](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless)が正常に完了しました。

1. E メール OTP を使用した[多要素認証 (MFA)](user-pool-settings-mfa.md) が正常に完了しました。

**Phone number (電話番号)**  

1. SMS OTP を使用した[パスワードなしの認証](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless)が正常に完了しました。

1. SMS OTP を使用した [MFA](user-pool-settings-mfa.md) が正常に完了しました。

### E メールまたは電話による検証を求めるようにユーザープールを設定するには
<a name="verification-configure"></a>

ユーザーの E メールアドレスと電話番号を確認することで、ユーザーに連絡できることを確認します。の次の手順を実行して AWS マネジメントコンソール 、ユーザーが E メールアドレスまたは電話番号を確認するようにユーザープールを設定します。

**注記**  
アカウントにまだユーザープールがない場合は、「[ユーザープールの開始方法](getting-started-user-pools.md)」を参照してください。

**ユーザープールを設定するには**

1. [Amazon Cognitoコンソール](https://console.aws.amazon.com/cognito/home) に移動します。プロンプトが表示されたら、 AWS 認証情報を入力します。

1. ナビゲーションペインで、**[User Pools]** (ユーザープール) を選択します。リストから既存のユーザープールを選択するか、[ユーザープールを作成](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)します。

1. **[サインアップ]** メニューを選択し、**[属性の検証とユーザーアカウントの確認]** を見つけます。**[編集]** を選択します。

1. **[Cognito による検証と確認]** で、**[Cognito が検証と確認のためのメッセージを自動的に送信することを許可]** するかどうかを選択します。この設定を有効にすると、Amazon Cognito は、ユーザーのサインアップ時またはユーザープロファイルの作成時に選択したユーザー連絡先属性にメッセージを送信します。サインイン用の属性を検証し、ユーザープロファイルを確認するために、Amazon Cognito はコードまたはリンクをメッセージでユーザーに送信します。次に、ユーザーは UI にコードを入力し、アプリが `ConfirmSignUp` または `AdminConfirmSignUp` API リクエストで確認できるようにする必要があります。
**注記**  
**[Cognito-assisted verification and confirmation]** (Cognito アシストの検証と確認) を無効にして、API アクションまたは Lambda トリガーを使用して属性を検証し、ユーザーを確認することもできます。  
このオプションを選択すると、Amazon Cognito はユーザーのサインアップ時に検証コードを送信しません。このオプションは、Amazon Cognito からの検証コードを使用せずに、少なくとも 1 つの連絡方法を検証するカスタムの認証フローを使用している場合に選択します。例えば、特定のドメインに属する E メールアドレスを自動的に確認するサインアップ前 Lambda トリガーを使用することができます。  
ユーザーの連絡先情報を検証しない場合は、アプリケーションを使用できない場合があります。以下を行うには、ユーザーの連絡情報の検証が必要となる点にご注意ください。  
**[Reset their passwords]** (パスワードのリセット) — ユーザーが `ForgotPassword` API アクションを呼び出すオプションをアプリケーションで選択すると、Amazon Cognito はユーザーの E メールアドレスまたは電話番号に一時パスワードを送信します。Amazon Cognito がこのパスワードを送信するのは、ユーザーが検証済みの連絡方法を少なくとも 1 つ持っている場合のみです。
**[Sign in by using an email address or phone number as an alias]** (E メールアドレスまたは電話番号をエイリアスとして使用してサインインする) — これらのエイリアスを許可するようにユーザープールを設定した場合、ユーザーは、検証済みである場合にのみ、そのエイリアスを使用してサインインできます。詳細については、「[ログイン属性のカスタマイズ](user-pool-settings-attributes.md#user-pool-settings-aliases)」を参照してください。

1. **[Attributes to verify]** (検証する属性) を以下から選択します。  
**SMS メッセージを送信し、電話番号を確認する**  
ユーザーがサインアップすると Amazon Cognito が SMS メッセージで検証コードを送信します。通常 SMS メッセージでユーザーと通信する場合は、このオプションを選択してください。例えば、配信通知、予約確認、または警告を送信する場合は、検証済みの電話番号を使用します。アカウントが確認されると、ユーザーの電話番号が検証済み属性になります。ユーザーの E メールアドレスを確認して通信するには、追加のアクションを実行する必要があります。  
**E メールメッセージを送信し、E メールアドレスを確認する**  
ユーザーがサインアップすると Amazon Cognito が E メール経由で検証コードを送信します。通常 E メールでユーザーと通信する場合は、このオプションを選択してください。たとえば、請求明細、注文書、特価販売を使用する場合は、検証済みの E メールアドレスを使用する必要があります。アカウントが確認されると、ユーザーのメールアドレスが検証済み属性になります。ユーザーの電話番号を確認して通信するには、追加のアクションを実行する必要があります。  
**電話番号が利用可能な場合は SMS メッセージを送信し、そうでない場合は E メールメッセージを送信する**  
すべてのユーザーに同じ検証済みの連絡方法を要求する必要がない場合は、このオプションを選択してください。この場合、アプリのサインアップページで、希望する連絡方法のみを検証するようにユーザーに求めることができます。Amazon Cognito が検証コードを送信するときは、アプリからの `SignUp` リクエストで指定された連絡方法にコードが送信されます。ユーザーが E メールアドレスと電話番号の両方を入力し、アプリが `SignUp` リクエストに両方の連絡方法を指定する場合、Amazon Cognito は検証コードを電話番号のみに送信します。  
ユーザーが E メールアドレスと電話番号の両方を検証することを必須としている場合は、このオプションを選択してください。Amazon Cognito は、ユーザーのサインアップ時に 1 つの連絡方法を検証するので、アプリがユーザーのサインイン後にもう一方の連絡方法を検証する必要があります。詳細については、「[ユーザーに E メールアドレスと電話番号の両方の確認を要求する場合](#verification-email-plus-phone)」を参照してください。

1. **[Save changes]** (変更の保存) をクリックします。

### E メールアドレスまたは電話による検証を使用した認証フロー
<a name="verification-flow"></a>

ユーザープールで連絡先情報の検証をユーザーに要求する場合、ユーザーがアプリにサインアップした後のフローを容易にする必要があります。

1. ユーザーは、ユーザー名、メールアドレス、電話番号やその他の属性を入力してアプリにサインアップします。

1. Amazon Cognito サービスは、アプリからサインアップリクエストを受け取ります。サインアップに必要なすべての属性がリクエストに含まれることを確認した後で、サービスはサインアッププロセスを完了し、確認コードをユーザーの電話 (SMS メッセージ) または E メールに送信します。コードは 24 時間有効です

1. サービスは、サインアップが完了しユーザーアカウントが確認保留であることを返します。応答には、確認コードの送信先に関する情報が含まれます。この時点でユーザーアカウントは未確認状態になり、ユーザーのメールアドレスと電話番号は未確認です。

1. アプリは、ユーザーに確認コードを入力するよう求めるメッセージを表示できます。ユーザーは、コードをすぐに入力する必要はありません。ただし、確認コードを入力するまでユーザーはサインインできません。

1. ユーザーがアプリに確認コードを入力します。

1. アプリは、Amazon Cognito サービスにコードを送信する [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html) を呼び出します。これは、コードを検証し、コードが正しい場合はユーザーのアカウントを確認済み状態に設定します。ユーザーアカウントが正常に確認されると、Amazon Cognito サービスが自動的に、E メールアドレスまたは電話番号を確認するために使用された属性を検証済みとしてマークします。この属性の値が変更されていない場合、ユーザーはそれを再度確認する必要はありません。

1. この時点で、ユーザーアカウントは確認済みの状態になっており、ユーザーはサインインできます。

### ユーザーに E メールアドレスと電話番号の両方の確認を要求する場合
<a name="verification-email-plus-phone"></a>

Amazon Cognito は、ユーザーのサインアップ時に 1 つの連絡方法しか検証しません。Amazon Cognito が E メールアドレスまたは電話番号のどちらを検証するかを選択する必要がある場合は、SMS メッセージ経由で検証コードを送信して電話番号を検証することを選択します。例えば、ユーザーが E メールアドレスと電話番号のいずれかを検証できるようにユーザープールを設定する場合、およびアプリがサインアップ時にこれら両方の属性を提供する場合、Amazon Cognito は電話番号のみを検証します。ユーザーが電話番号を検証したら、Amazon Cognito がユーザーのステータスを `CONFIRMED` に設定し、ユーザーはアプリにサインインできるようになります。

ユーザーがアプリにサインインした後、サインアップ時に検証されなかった連絡方法を検証するオプションを提示することができます。この 2 つ目の方法を検証するには、アプリで `VerifyUserAttribute` API アクションを呼び出します。このアクションには `AccessToken` パラメータが必要で、Amazon Cognito は認証されたユーザーにアクセストークンしか提供しないことに注意してください。したがって、2 つ目の連絡方法は、ユーザーがサインインした後にのみ検証できます。

E メールアドレスと電話番号の両方を検証するようにユーザーに求める場合は、以下のように行います。

1. E メールアドレスまたは電話番号を検証することをユーザーに許可するようにユーザープールを設定します。

1. アプリのサインアップフローで、E メールアドレスおよび電話番号の両方を入力するようユーザーに求めます。[https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html) API アクションを呼び出し、`UserAttributes` パラメータの E メールアドレスおよび電話番号を指定します。この時点で、Amazon Cognito がユーザーの携帯電話に検証コードを送信します。

1. アプリのインターフェイスで、ユーザーが検証コードを入力する確認ページを提示します。ユーザーを確認するには、[https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html) API アクションを呼び出します。この時点で、ユーザーのステータスは `CONFIRMED` となり、ユーザーの電話番号は検証されますが、E メールアドレスはまだ検証されていません。

1. サインインページを提示し、ユーザーを認証するには、[https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) API アクションを呼び出します。ユーザーが認証されると、Amazon Cognito がアプリにアクセストークンを返します。

1. [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAttributeVerificationCode.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAttributeVerificationCode.html) API アクションを呼び出します。リクエストで次のパラメータを指定します。
   + `AccessToken` – ユーザーのサインイン時に Amazon Cognito が返したアクセストークン。
   + `AttributeName` – `"email"` を属性値として指定します。

   Amazon Cognito がユーザーの E メールアドレスに検証コードを送信します。

1. ユーザーが検証コードを入力する確認ページを提示します。ユーザーがコードを入力したら、[https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html) API アクションを呼び出します。リクエストで次のパラメータを指定します。
   + `AccessToken` – ユーザーのサインイン時に Amazon Cognito が返したアクセストークン。
   + `AttributeName` – `"email"` を属性値として指定します。
   + `Code` – ユーザーが提供した検証コード。

   この時点で、E メールアドレスが検証されます。

## ユーザーにアプリケーションへのサインアップを許可するがユーザープール管理者として確認する
<a name="signing-up-users-in-your-app-and-confirming-them-as-admin"></a>

ユーザープールで確認メッセージを自動的に送信しないにも関わらず、誰でもアカウントにサインアップできるようにしたい場合があります。このモデルでは、たとえば、新しい登録リクエストを人間が確認したり、サインアップの一括検証と処理を行ったりする余地があります。Amazon Cognito コンソール、または IAM 認証された API オペレーション [AdminConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminConfirmSignUp.html) を使用して新しいユーザーアカウントを確認できます。ユーザープールが確認メッセージを送信するかどうかにかかわらず、ユーザーアカウントを管理者として確認できます。

この方法では、ユーザーのセルフサービスサインアップを確認することしかできません。管理者として作成したユーザーを確認するには、`Permanent` を `True` に設定した [AdminSetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html) API リクエストを作成します。

1. ユーザーは、ユーザー名、メールアドレス、電話番号やその他の属性を入力してアプリにサインアップします。

1. Amazon Cognito サービスは、アプリからサインアップリクエストを受け取ります。サインアップに必要なすべての属性がリクエストに含まれることを確認した後で、サービスはサインアッププロセスを完了し、アプリにサインアップが完了し確認が保留中であることをアプリに返します。この時点でユーザーのアカウントは未確認状態です。アカウントが確認されるまで、ユーザーはサインインすることはできません。

1. ユーザーのアカウントを確認します。アカウントを確認するには、 にサインイン AWS マネジメントコンソール するか、 AWS 認証情報を使用して API リクエストに署名する必要があります。

   1. Amazon Cognito コンソールでユーザーを確認するには、**[ユーザー]** メニューに移動して、確認するユーザーを選択し、**[アクション]** メニューの **[確認]** を選択します。

   1.  AWS API または CLI でユーザーを確認するには、[AdminConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminConfirmSignUp.html) API リクエストを作成するか、 で [admin-confirm-sign-up](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/admin-confirm-sign-up.html) を作成します AWS CLI。

1. この時点で、ユーザーアカウントは確認済みの状態になっており、ユーザーはサインインできます。

## シークレットハッシュ 値の計算
<a name="cognito-user-pools-computing-secret-hash"></a>

ベストプラクティスとして、機密アプリケーションクライアントにクライアントシークレットを割り当てます。アプリケーションクライアントにクライアントシークレットを割り当てる場合、Amazon Cognito ユーザープール API リクエストには、リクエスト本文にクライアントシークレットを含むハッシュを含める必要があります。以下のリストにある API オペレーションのクライアントシークレットに関する知識を検証するには、クライアントシークレットをアプリケーションのクライアント ID とユーザーのユーザー名と連結し、その文字列を base64 でエンコードします。

シークレットハッシュを持つクライアントにアプリがユーザーをサインインすると、ユーザープールのサインイン属性の値をシークレットハッシュのユーザー名要素として使用できます。アプリが `REFRESH_TOKEN_AUTH` による認証オペレーションで新しいトークンをリクエストする場合、ユーザー名要素の値はサインイン属性によって異なります。ユーザープールにサインイン属性として `username` がない場合は、ユーザーのアクセストークンまたは ID トークンの `sub` クレームからのシークレットハッシュユーザー名の値を設定します。`username` がサインイン属性である場合は、`username` クレームからのシークレットハッシュユーザー名の値を設定します。

以下の Amazon Cognito ユーザープール API は、`SecretHash` パラメータにクライアントシークレットのハッシュ値を受け入れます。
+ [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html)
+ [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html)
+ [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html)
+ [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html)
+ [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)

また、以下の API は、認証パラメータまたはチャレンジレスポンス内の `SECRET_HASH` パラメータにクライアントシークレットのハッシュ値を受け入れます。


| API オペレーション: | SECRET\$1HASH の親パラメータ | 
| --- |--- |
| InitiateAuth | AuthParameters | 
| AdminInitiateAuth | AuthParameters | 
| RespondToAuthChallenge | ChallengeResponses | 
| AdminRespondToAuthChallenge | ChallengeResponses | 

シークレットハッシュ値は、Base 64 でエンコードされたキー付きハッシュメッセージ認証コード (HMAC) であり、ユーザープールクライアントおよびユーザー名、さらにメッセージ内のクライアント ID を使用して計算されたものです。次の擬似コードは、この値の計算方法を示します。この擬似コードで `+` は連結を表し、`HMAC_SHA256` は HmacSHA256 を使用して HMAC 値を生成する関数を、`Base64` は Base-64 でエンコードされたバージョンのハッシュ出力を生成する関数を示します。

```
Base64 ( HMAC_SHA256 ( "Client Secret Key", "Username" + "Client Id" ) )
```

`SecretHash` パラメータの計算方法と使用方法の詳細な概要については、 AWS ナレッジセンターの[Amazon Cognito ユーザープール API からのクライアント <client-id> エラーのシークレットハッシュを検証できない」のトラブルシューティング方法を教えてください。](https://aws.amazon.com/premiumsupport/knowledge-center/cognito-unable-to-verify-secret-hash/)

サーバー側の Java アプリケーションコードで、次のコード例を使用できます。

------
#### [ Shell ]

```
echo -n "[username][app client ID]" | openssl dgst -sha256 -hmac [app client secret] -binary | openssl enc -base64
```

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

```
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
 
public static String calculateSecretHash(String userPoolClientId, String userPoolClientSecret, String userName) {
    final String HMAC_SHA256_ALGORITHM = "HmacSHA256";
    
    SecretKeySpec signingKey = new SecretKeySpec(
            userPoolClientSecret.getBytes(StandardCharsets.UTF_8),
            HMAC_SHA256_ALGORITHM);
    try {
        Mac mac = Mac.getInstance(HMAC_SHA256_ALGORITHM);
        mac.init(signingKey);
        mac.update(userName.getBytes(StandardCharsets.UTF_8));
        byte[] rawHmac = mac.doFinal(userPoolClientId.getBytes(StandardCharsets.UTF_8));
        return Base64.getEncoder().encodeToString(rawHmac);
    } catch (Exception e) {
        throw new RuntimeException("Error while calculating ");
    }
}
```

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

```
import sys
import hmac, hashlib, base64 
username = sys.argv[1] 
app_client_id = sys.argv[2] 
key = sys.argv[3] 
message = bytes(sys.argv[1]+sys.argv[2],'utf-8') 
key = bytes(sys.argv[3],'utf-8') 
secret_hash = base64.b64encode(hmac.new(key, message, digestmod=hashlib.sha256).digest()).decode() 
print("SECRET HASH:",secret_hash)
```

------

## E メールまたは電話番号の確認なしでユーザーアカウントを確認する
<a name="confirming-user-without-verification-of-email-or-phone-number"></a>

検証コードを要求したり、E メールまたは電話番号を検証したりすることなくサインアップ時にユーザーアカウントを自動的に確認するには、サインアップ前の Lambda トリガーを使用できます。この方法で確認されたユーザーは、コードを受け取らないですぐにサインインできます。

このトリガーによって検証されたユーザーのメールまたは電話番号をマーキングすることもできます。

**注記**  
これはユーザーが始めるにあたって便利な方法ですが、E メールまたは電話番号を少なくとも 1 つ自動検証することをお勧めします。そうしないと、ユーザーがパスワードを忘れた際に復旧できないままになる場合があります。

ユーザーがサインアップ時に検証コードを受信して入力することを必須とせず、サインアップ前の Lambda トリガーで E メールと電話番号を自動検証しない場合は、そのユーザーアカウントに検証済みの E メールアドレスまたは電話番号が存在しないリスクが生じます。ユーザーはメールアドレスまたは電話番号を後で確認できます。ただし、パスワードを忘れて確認済みの E メールアドレスまたは電話番号がない場合、パスワードを忘れた場合のフローで検証コードをユーザーに送信するために確認済みの E メールまたは電話番号が必要となるため、ユーザーはアカウントからロックアウトされます。

## ユーザーが E メールまたは電話番号を変更するときに確認する
<a name="verifying-when-users-change-their-email-or-phone-number"></a>

複数のサインイン名で設定したユーザープールでは、ユーザーはサインイン時にユーザー名として電話番号または E メールアドレスを入力できます。アプリケーションで E メールアドレスまたは電話番号を更新すると、Amazon Cognito は新しい属性値の所有権を検証するコードを含むメッセージをすぐに送信できます。これらの検証コードの自動送信を有効にするには、「[E メールまたは電話による検証の設定](user-pool-settings-email-phone-verification.md)」を参照してください。

検証コードを受け取ったユーザーは、[VerifyUserAttribute](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html) リクエストでそのコードを Amazon Cognito に返す必要があります。コードを返すと、その属性が検証済みとしてマークされます。通常、ユーザーが E メールアドレスまたは電話番号を更新した場合、更新した値を使用してサインインしてメッセージを受信する前に、ユーザーが更新した値の所有者であることを確認する必要があります。ユーザープールには、ユーザーが E メールアドレスや電話番号の更新を確認する必要があるかどうかを決定する設定可能なオプションがあります。

このオプションは、ユーザープールのプロパティ `AttributesRequireVerificationBeforeUpdate` です。これを設定するには、[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-UserAttributeUpdateSettings) または [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#CognitoUserPools-UpdateUserPool-request-UserAttributeUpdateSettings) リクエストを使用するか、Amazon Cognito コンソールの **[サインアップ]** メニューで **[更新が保留中のときに元の属性値をアクティブのままにする]** を使用します。

ユーザープールが E メールアドレスと電話番号の更新を処理する方法は、ユーザープールのユーザー名設定に関連しています。ユーザープールのユーザー名は、*[ユーザー名属性]* 設定に含めることができます。この設定では、E メールアドレス、電話番号、またはその両方がサインイン名となります。また、*[エイリアス属性]* 設定に含めることもできます。この設定では、`username` 属性がサインイン名となり、E メールアドレス、電話番号、または希望するユーザー名が代替サインイン名となります。詳細については、「[ログイン属性のカスタマイズ](user-pool-settings-attributes.md#user-pool-settings-aliases)」を参照してください。

 カスタムメッセージの Lambda トリガーを使用して確認メッセージをカスタマイズすることもできます。詳細については、「[カスタムメッセージの Lambda トリガー](user-pool-lambda-custom-message.md)」を参照してください。ユーザーの E メールアドレスや電話番号が未確認の場合、アプリケーションはユーザーに属性を確認する必要があることを通知し、新しい E メールアドレスや電話番号を確認するためのボタンやリンクを提供する必要があります。

次の表は、ユーザーがサインイン属性の値を変更したときに、`AttributesRequireVerificationBeforeUpdate` およびエイリアス設定でどのように結果を決定するかを示しています。


| ユーザー名の設定 | ユーザーが新しい属性を確認する必要がある場合の動作 | ユーザーが新しい属性を確認する必要がない場合の動作 | 
| --- | --- | --- | 
| ユーザー名属性 | 元の属性は、検証済みで、サインイン可能であり、元の値のままです。ユーザーが新しい値を確認すると、Amazon Cognito は属性値を更新し、検証済みとしてマークし、サインイン可能にします。 | Amazon Cognito は属性を新しい値に更新します。新しい値でサインイン可能になります。ユーザーが新しい値を確認すると、Amazon Cognito はそれを検証済みとしてマークします。 | 
| エイリアス属性 | 元の属性は、検証済みで、サインイン可能であり、元の値のままです。ユーザーが新しい値を確認すると、Amazon Cognito は属性値を更新し、検証済みとしてマークし、サインイン可能にします。 | Amazon Cognito は属性を新しい値に更新します。元の属性値でも新しい属性値でもサインインできません。ユーザーが新しい値を確認すると、Amazon Cognito は属性値を更新し、検証済みとしてマークし、サインイン可能にします。 | 

**例 1**  
ユーザー 1 は、E メールアドレス `user1@example.com` でアプリケーションにサインインし、ユーザー名 `user1` (エイリアス属性) を持っています。ユーザープールは、サインイン属性の更新を検証し、検証メッセージを自動的に送信するように設定されています。ユーザーは E メールアドレスを `user1+foo@example.com` に更新するようリクエストします。ユーザーは、確認 E メールを `user1+foo@example.com` で受け取り、E メールアドレス `user1@example.com` のみを使用して*再度サインインできます*。その後、確認コードを入力し、E メールアドレス `user1+foo@example.com` のみを使用して再度サインインできます。

**例 2**  
ユーザー 2 は、E メールアドレス `user2@example.com` を使用してアプリケーションにサインインし、ユーザー名 (エイリアス属性) を持っています。ユーザープールは、サインイン属性の更新を検証したり、検証メッセージを自動的に送信したり*しない*ように設定されています。ユーザーは E メールアドレスを `user2+bar@example.com` に更新するようリクエストします。ユーザーは `user2+bar@example.com` で確認 E メールを受け取り、*再度サインインすることはできません*。その後、確認コードを入力し、E メールアドレス `user2+bar@example.com` のみを使用して再度サインインできます。

**例 3**  
ユーザー 3 は、E メールアドレス `user3@example.com` を使用してアプリケーションにサインインします。ユーザー名 (ユーザー名属性) は持っていません。ユーザープールは、サインイン属性の更新を検証したり、検証メッセージを自動的に送信したり*しない*ように設定されています。ユーザーは E メールアドレスを `user3+baz@example.com` に更新するようリクエストします。ユーザーは確認 E メールを `user3+baz@example.com` で受け取りますが、検証コードで追加のアクションを実行することなく、*即座にサインインできます*。

## 管理者またはデベロッパーが作成するユーザーアカウントの確認および検証プロセス
<a name="confirmation-and-verification-of-users-whose-accounts-youve-created"></a>

管理者またはデベロッパーが作成したユーザーアカウントは常に確認済み状態にあるため、ユーザーは確認コードを入力する必要はありません。Amazon Cognito サービスがこれらのユーザーに送信する招待メッセージには、ユーザー名と一時パスワードが含まれています。ユーザーは、サインインする前にパスワードを変更する必要があります。詳細について、は、「[E メールメッセージと SMS メッセージのカスタマイズ](how-to-create-user-accounts.md#creating-a-new-user-customize-messages)」の「[管理者としてのユーザーアカウントの作成](how-to-create-user-accounts.md)」と「[Lambda トリガーを使用したユーザープールワークフローのカスタマイズ](cognito-user-pools-working-with-lambda-triggers.md)」のカスタムメッセージのトリガーを参照してください。

## インポート済みユーザーアカウントの確認および検証プロセス
<a name="confirmation-and-verification-of-users-whose-accounts-youve-imported"></a>

、CLI AWS マネジメントコンソール、または API のユーザーインポート機能を使用して作成されたユーザーアカウント (「」を参照[CSV ファイルからユーザープールへのユーザーのインポート](cognito-user-pools-using-import-tool.md)) は既に確認済み状態であるため、ユーザーは確認コードを入力する必要はありません。招待メッセージは送信されません。ただし、インポートされたユーザーアカウントでは、サインインする前にまず `ForgotPassword` API を呼び出してコードをリクエストし、次に、提供されたコードを使用して `ConfirmForgotPassword` API を呼び出すことによってパスワードを作成する必要があります。詳細については、「[インポートされたユーザーにパスワードをリセットするように要求](cognito-user-pools-using-import-tool.md#cognito-user-pools-using-import-tool-password-reset)」を参照してください。

ユーザーアカウントがインポートされたときに、ユーザーの E メールまたは電話番号は確認済みとしてマークする必要があります。したがって、ユーザーがサインインする際に認証は必要ありません。

## アプリケーションのテスト中に E メールを送信する
<a name="managing-users-accounts-email-testing"></a>

ユーザープールのクライアントアプリでアカウントを作成および管理する場合は、Amazon Cognito がユーザーに E メールメッセージを送信します。E メール検証を必須とするようにユーザープールを設定した場合は、以下のタイミングで Amazon Cognito が E メールを送信します。
+ ユーザーのサインアップ時。
+ ユーザーが E メールアドレスを更新する際。
+ ユーザーが `ForgotPassword` API アクションを呼び出すアクションを実行する際。
+ 管理者としてユーザーアカウントを作成する際。

E メールを開始するアクションに応じて、検証コードまたは仮パスワードが含まれます。ユーザーは、これらの E メールを受け取り、メッセージを理解する必要があります。そうしないと、アプリにサインインして使用できない場合があります。

E メールが正常に送信され、メッセージの内容が正しいことを確認するには、Amazon Cognito からの E メール配信を開始するアプリのアクションをテストします。たとえば、アプリでサインアップページを使用するか、`SignUp` API アクションを使用して、テスト用メールアドレスでサインアップすることで E メールを配信できます。この方法でテストする場合は、次の点に注意してください。

**[重要]**  
Amazon Cognito からの E メールを開始するアクションをテストするために E メールアドレスを使用する場合は、偽の E メールアドレス (メールボックスが存在しないメールアドレス) は使用しないでください。*ハードバウンス*を発生させずに Amazon Cognito からの E メールを受信する実際の E メールアドレスを使用します。  
ハードバウンスは、Amazon Cognito が受取人のメールボックスへの E メールの配信に失敗した場合に発生します。これは、常にメールボックスが存在しない場合に発生します。  
Amazon Cognito は、永続的にハードバウンスが発生する AWS アカウントによって送信できる E メールの数を制限します。

E メールを配信するアクションをテストする場合、次のいずれかの E メールアドレスを使用してハードバウンスを回避します。
+ テスト用に所有し、使用している E メールアカウントのメールアドレス。独自の E メールアドレスを使用すると、Amazon Cognito が送信する E メールを受け取ります。この E メールでは、検証コードを使用して、アプリのサインアップエクスペリエンスをテストできます。ユーザープールの E メールメッセージをカスタマイズした場合は、正しく表示されていることを確認します。
+ メールボックスシミュレーターのアドレス (*success@simulator.amazonses.com*)。シミュレーターのアドレスを使用する場合、Amazon Cognito は E メールを正常に送信しますが、それを表示することはできません。このオプションは、検証コードを使用する必要がなく、E メールのメッセージを確認する必要がない場合に役立ちます。
+ *success\$1user1@simulator.amazonses.com* または *success\$1user2@simulator.amazonses.com* などの、任意のラベルを使用するメールボックスシミュレーターのアドレス。Amazon Cognito はこれらのアドレスに E メールを正常に送信しますが、送信された E メールを表示することはできません。このオプションは、複数のテストユーザーをユーザープールに追加してサインアッププロセスをテストし、各テストユーザーに一意の E メールアドレスがある場合に便利です。

# E メールまたは電話による検証の設定
<a name="user-pool-settings-email-phone-verification"></a>

E メールまたは電話の検証の設定は、**[認証方法]** メニューで選択できます。多要素認証 (MFA) の詳細については、「[SMS テキストメッセージ MFA](user-pool-settings-mfa-sms-email-message.md)」を参照してください。

Amazon Cognito は、SMS メッセージの送信に Amazon SNS を使用します。Amazon Cognito または他の から SMS メッセージを送信したことがない場合 AWS のサービス 、Amazon SNS はアカウントを SMS サンドボックスに配置することがあります。アカウントをサンドボックスから本番環境に削除する前に、検証済みの電話番号にテストメッセージを送信することをお勧めします。さらに、米国の宛先電話番号に SMS メッセージを送信する場合は、Amazon Pinpoint から発信元 ID または送信者 ID を取得する必要があります。SMS メッセージ用に Amazon Cognito ユーザープールを設定するには、「[Amazon Cognito ユーザープール用の SMS メッセージ設定](user-pool-sms-settings.md)」を参照してください。

Amazon Cognito は、E メールアドレスまたは電話番号を自動的に検証できます。この検証を行うために、Amazon Cognito は検証コードまたは検証リンクを送信します。E メールアドレスの場合、Amazon Cognito は、コードまたはリンクを E メールメッセージで送信できます。Amazon Cognito コンソールの **[メッセージテンプレート]** メニューで **[検証メッセージ]** テンプレートを編集するときに、**[検証タイプ]** として **[コード]** または **[リンク]** を選択できます。詳細については、「[E メール検証メッセージのカスタマイズ](cognito-user-pool-settings-message-customizations.md#cognito-user-pool-settings-email-verification-message-customization)」を参照してください。

電話番号の場合、Amazon Cognito は、コードを SMS テキストメッセージで送信します。

Amazon Cognito は、ユーザーを確認し、パスワードを忘れた場合の回復を支援するために、電話番号または E メールアドレスを検証する必要があります。または、サインアップ前の Lambda トリガーまたは [AdminConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminConfirmSignUp.html) API オペレーションを使用することで、ユーザーを自動的に確認できます。詳細については、「[ユーザーアカウントのサインアップと確認](signing-up-users-in-your-app.md)」を参照してください。

確認コードまたはリンクは 24 時間有効です。

E メールアドレスや電話番号の検証を必須とした場合、Amazon Cognito はユーザーのサインアップ時に自動的に検証コードまたはリンクを送信します。ユーザープールに [カスタム SMS 送信者の Lambda トリガー](user-pool-lambda-custom-sms-sender.md) または [カスタム E メール送信者の Lambda トリガー](user-pool-lambda-custom-email-sender.md) を設定すると、その関数が代わりに呼び出されます。

**注意事項**  
電話番号の検証に SMS テキストメッセージングを使用すると、Amazon SNS の料金が別途請求されます。E メールメッセージを送信しても料金はかかりません。Amazon SNS の料金については、「[Worldwide SMS Pricing](https://aws.amazon.com/sns/sms-pricing/)」を参照してください。SMS メッセージを利用可能な国の最新のリストについては、「[サポートされるリージョンと国](https://docs.aws.amazon.com/sns/latest/dg/sms_supported-countries.html)」を参照してください。
Amazon Cognito からの E メールメッセージを生成するアプリ内のアクションをテストするときは、Amazon Cognito がハードバウンスを発生させずに送信できる実際の E メールアドレスを使用してください。詳細については、「[アプリケーションのテスト中に E メールを送信する](signing-up-users-in-your-app.md#managing-users-accounts-email-testing)」を参照してください。
パスワードを忘れた場合のフローでは、ユーザーのメールまたはユーザーの電話番号が検証される必要があります。

**重要**  
ユーザーが電話番号と E メールアドレスの両方にサインアップし、ユーザープール設定で両方の属性の確認が必要な場合は、Amazon Cognito は、検証コードを SMS メッセージ経由で電話番号に送信します。Amazon Cognito はまだ E メールアドレスを検証していないため、アプリは [GetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html) を呼び出して、E メールアドレスが検証待ちかどうかを確認する必要があります。検証が必要な場合、アプリは、[GetUserAttributeVerificationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAttributeVerificationCode.html) を呼び出し、E メール検証フローを開始する必要があります。その後、[VerifyUserAttribute](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html) を呼び出して検証コードを送信する必要があります。

 AWS アカウント および個々のメッセージの SMS メッセージの支出クォータを調整できます。制限は SMS メッセージを送信するコストにのみ適用されます。詳細については、[Amazon SNS よくある質問](https://aws.amazon.com/sns/faqs/)の「**アカウントレベルとメッセージレベルの支出クォータとは何ですか。また、どのように機能しますか。**」を参照してください。

Amazon Cognito は、ユーザープールを作成した AWS リージョン または次の表のレガシー Amazon SNS 代替リージョンのいずれかで、Amazon SNS リソースを使用して SMS メッセージを送信します。 ** Amazon SNS ** 例外は、アジアパシフィック (ソウル) リージョンの Amazon Cognito ユーザープールです。これらのユーザープールは、アジアパシフィック (東京) リージョンで Amazon SNS 設定を使用します。詳細については、「[SMS メッセージの AWS リージョン を選択する](user-pool-sms-settings.md#sms-choose-a-region)」を参照してください。


| Amazon Cognito リージョン | レガシー Amazon SNS 代替リージョン | 
| --- | --- | 
| 米国東部(オハイオ) | 米国東部 (バージニア北部) | 
| アジアパシフィック (ムンバイ) | アジアパシフィック (シンガポール) | 
| アジアパシフィック (ソウル) | アジアパシフィック (東京) | 
| カナダ (中部) | 米国東部 (バージニア北部) | 
| 欧州 (フランクフルト) | 欧州 (アイルランド) | 
| 欧州 (ロンドン) | 欧州 (アイルランド) | 

**例: **Amazon Cognito のユーザープールがアジアパシフィック (ムンバイ) にあり、ap-southeast-1 で使用制限を引き上げている場合は、ap-south-1 で別途引き上げる要求をしないでください。代わりに、アジアパシフィック (シンガポール) で Amazon SNS リソースを使用できます。

## E メールアドレスと電話番号の更新を検証する
<a name="user-pool-settings-verifications-verify-attribute-updates"></a>

E メールアドレスまたは電話番号の属性は、ユーザーが値を変更した直後にアクティブになり、検証されない場合があります。Amazon Cognito は、Amazon Cognito が属性を更新する前に、ユーザーに新しい値を検証するように要求することもできます。ユーザーが新しい値を最初に検証することを要求する場合、新しい値を検証するまでは、サインインおよびメッセージの受信に元の値を使用することができます。

ユーザーがユーザープールの E メールアドレスまたは電話番号をサインインエイリアスとして使用できる場合、更新された属性のサインイン名は、更新された属性の検証が必要かどうかによって異なります。更新された属性を検証する必要がある場合、新しい値を検証するまで、ユーザーは元の属性値を使用してサインインできます。更新された属性を検証する必要がない場合、新しい値を検証するまで、ユーザーは新しい属性値または元の属性値でサインインまたはメッセージを受信することはできません。

例えば、ユーザープールでは、E メールアドレスのエイリアスでのサインインが許可され、ユーザーが更新時に E メールアドレスを検証する必要があるとします。`sue@example.com` としてサインインしている Sue は、自分の E メールアドレスを `sue2@example.com` に変更しようとしましたが、誤って `ssue2@example.com` と入力してしまいました。Sue は確認用の E メールを受信していないので、`ssue2@example.com` を検証することができません。`sue@example.com` としてサインインし、アプリでフォームを再送信して、E メールアドレスを `sue2@example.com` に更新します。この E メールを受信し、アプリに確認コードを提供して、`sue2@example.com` としてサインインを開始します。

**ユーザーが属性を更新し、ユーザープールが新しい属性値を検証する場合**
+ コードを確認する前は、元の属性値でサインインして新しい値を確認できます。
+ コードを確認した後は、新規の属性値でサインインして新しい値を確認できます。
+ [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html) API  リクエストで `email_verified` または `phone_number_verified` を `true` に設定すると、Amazon Cognito から送信されたコードを確認する前にサインインできるようになります。

**ユーザーが属性を更新し、ユーザープールが新しい属性値を検証しない場合**
+ 元の属性値を使用してサインインしたり、元の属性値でメッセージを受信したりすることはできません。
+ 新しい値を確認するコードを確認するま、新しい属性値を使用してサインインしたり、確認コード以外のメッセージを受信したりすることはできません。
+ [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html) API  リクエストで `email_verified` または `phone_number_verified` を `true` に設定すると、Amazon Cognito から送信されたコードを確認する前にサインインできるようになります。

## ユーザーが E メールアドレスまたは電話番号を更新するときに属性の検証を要求するには


1. [Amazon Cognito コンソール](https://console.aws.amazon.com/cognito/home)にサインインします。プロンプトが表示されたら、 AWS 認証情報を入力します。

1. ナビゲーションペインで **[User Pools]** (ユーザープール) を選択してから、編集するユーザープールを選択します。

1. **[サインアップ]** メニューで、**[属性の検証とユーザーアカウントの確認]** の **[編集]** を選択します。

1. **[Keep original attribute value active when an update is pending]** (更新が保留中の場合、元の属性値をアクティブに保つ) を選択します。

1. **[Active attribute values when an update is pending]** (更新が保留中の場合にアクティブな属性値) から、Amazon Cognito が値を更新する前にユーザーに検証を要求する属性を選択します。

1. **[Save changes]** (変更の保存) をクリックします。

Amazon Cognito API で属性更新の検証を要求するには、[UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) リクエストで `AttributesRequireVerificationBeforeUpdate` パラメータを設定します。

## SMS メッセージを代理送信するために Amazon Cognito を承認します。
<a name="user-pool-settings-verifications-iam-role-for-sms"></a>

SMS メッセージをユーザーに代理送信するには、Amazon Cognito に許可が必要です。そのアクセス許可を付与するには、 AWS Identity and Access Management (IAM) ロールを作成します。Amazon Cognito コンソールの **[認証方法]** メニューの [SMS] で、**[編集]** を選択してロールを設定します。

# MFA、認証、検証、招待メッセージの設定
<a name="cognito-user-pool-settings-message-customizations"></a>

Amazon Cognito を使用すると、SMS や E メールの認証、検証、およびユーザー招待メッセージをカスタマイズして、アプリケーションのセキュリティとユーザーエクスペリエンスを強化できます。一部のメッセージでは、コードベースの検証またはワンクリックリンクによる検証を選択できます。このトピックでは、Amazon Cognito コンソールで認証と検証の通信をパーソナライズする方法について説明します。

**[メッセージテンプレート]** メニューで、以下をカスタマイズできます。
+ ワンタイムパスワード (OTP) と多要素認証 (MFA) 用の E メールおよび SMS メッセージテンプレート
+ SMS と E メールの検証メッセージ
+ E メールの検証タイプ (コードまたはリンク)
**注記**  
Amazon Cognito は、ユーザーがサインアップまたは確認コードを再送信するときに、リンクとリンクベースのテンプレートを含む検証メッセージを送信します。コードテンプレートは、属性の更新オペレーションとパスワードのリセットオペレーションに関連する E メールで使用します。
+ ユーザーの招待メッセージ
+ ユーザープールを介するメールの FROM および REPLY-TO E メールアドレス

**注記**  
SMS と E メールの検証メッセージテンプレートは、電話番号と E メールの検証を必須にした場合にのみ表示されます。同様に、SMS MFA メッセージのテンプレートは、MFA 設定が **[required]** (必要) または **[optional]** (任意) の場合にのみ表示されます。

**Topics**
+ [メッセージテンプレート](#cognito-user-pool-settings-message-templates)
+ [E メールと SMS の MFA メッセージのカスタマイズ](#cognito-user-pool-settings-SMS-message-customization)
+ [E メール検証メッセージのカスタマイズ](#cognito-user-pool-settings-email-verification-message-customization)
+ [ユーザー招待メッセージのカスタマイズ](#cognito-user-pool-settings-user-invitation-message-customization)
+ [E メールアドレスのカスタマイズ](#cognito-user-pool-settings-email-address-customization)
+ [Amazon SES E メールを代理送信するための Amazon Cognito の承認 (カスタム REPLY-TO E メールアドレスからの送信)](#cognito-user-pool-settings-ses-authorization-to-send-email)

## メッセージテンプレート
<a name="cognito-user-pool-settings-message-templates"></a>

メッセージテンプレートを使用して、メッセージにプレースホルダーを挿入できます。Amazon Cognito はプレースホルダーを、対応する値に置き換えます。これらの値はすべてのメッセージタイプに存在するわけではありませんが、任意のタイプのメッセージテンプレートで*ユニバーサルテンプレートプレースホルダー*を参照できます。


**ユニバーサルテンプレートプレースホルダー**  

|  説明  |  トークン  | メッセージタイプ | 
| --- | --- | --- | 
| 検証コード | \$1\$1\$1\$1\$1\$1 | 検証、確認、MFA メッセージ | 
| 一時パスワード | \$1\$1\$1\$1\$1\$1 | パスワードを忘れた場合と招待メッセージ | 
| ユーザー名 | \$1username\$1 | 招待メッセージと高度なセキュリティメッセージ | 

[脅威保護](cognito-user-pool-settings-threat-protection.md)で利用可能な自動レスポンスの 1 つは、Amazon Cognito が潜在的に悪意のあるアクティビティを検出したことをユーザーに知らせることです。アドバンスドセキュリティのテンプレートのプレースホルダーを使用して、以下を行うことができます。
+ IP アドレス、市、国、サインイン時間、デバイス名など、イベントに関する具体的な詳細を記載します。Amazon Cognito の脅威保護は、これらの詳細を分析できます。
+ ワンクリックリンクが有効であるかどうかを確認します。
+ イベント ID、フィードバックトークン、およびユーザー名を使用して独自のワンクリックリンクを構築します。

**注記**  
ワンクリックリンクを生成し、アドバンスドセキュリティ E メールテンプレートで `{one-click-link-valid}` および `{one-click-link-invalid}` プレースホルダーを使用するには、ユーザープール用にドメインが既に設定されている必要があります。

脅威保護では、以下のプレースホルダーを追加してメッセージテンプレートに挿入できるようにします。これらのプレースホルダーは、**アダプティブ認証メッセージ**に適用されます。このメッセージは、ユーザーのセッションがリスクレベルの評価を受けた場合に、Amazon Cognito からユーザーに送信する通知です。これらの変数を使用してメッセージテンプレートを設定するには、Amazon Cognito コンソールで脅威保護の **[フル機能]** 設定を更新するか、[SetRiskConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetRiskConfiguration.html) リクエストでテンプレートを送信します。


**アドバンスドセキュリティのテンプレートのプレースホルダー**  

|  説明  |  トークン  | 
| --- | --- | 
| IP アドレス | \$1ip-address\$1 | 
| City | \$1city\$1 | 
| Country | \$1country\$1 | 
| ログイン時間 | \$1login-time\$1 | 
| デバイス名 | \$1device-name\$1 | 
| オンクリックリンクが有効 | \$1one-click-link-valid\$1 | 
| オンクリックリンクが無効 | \$1one-click-link-invalid\$1 | 
| Event ID | \$1event-id\$1 | 
| フィードバックトークン | \$1feedback-token\$1 | 

## E メールと SMS の MFA メッセージのカスタマイズ
<a name="cognito-user-pool-settings-SMS-message-customization"></a>

[多要素認証 (MFA)](user-pool-settings-mfa.md) に関する SMS と E メールのメッセージをカスタマイズするには、Amazon Cognito ユーザープールコンソールの **[メッセージテンプレート]** メニューで、**[MFA メッセージ]** を編集します。

**重要**  
カスタムメッセージには、`{####}`プレースホルダーを含む必要があります。このプレースホルダーは、メッセージが送信される前に認証コードへ置き換えられます。

Amazon Cognito では、認証コードも含めて、SMS メッセージの最大長を 140 UTF-8 文字に設定しています。

### SMS 検証メッセージのカスタマイズ
<a name="cognito-user-pool-settings-SMS-verification-message-customization"></a>

電話番号検証用の SMS メッセージをカスタマイズするには、ユーザープールの **[メッセージテンプレート]** メニューで **[検証メッセージ]** テンプレートを編集します。

**重要**  
カスタムメッセージには、`{####}`プレースホルダーを含む必要があります。このプレースホルダーは、メッセージが送信される前に検証コードへ置き換えられます。

メッセージの最大長は検証コードを含めて UTF-8 で 140 文字です。

## E メール検証メッセージのカスタマイズ
<a name="cognito-user-pool-settings-email-verification-message-customization"></a>

Amazon Cognito でユーザープール内のユーザーの E メールアドレスを確認するには、ユーザーが選択できるリンクを記載した E メールメッセージをユーザーに送信するか、ユーザーが入力できるコードを送信します。

E メールアドレス検証メッセージの E メールの件名と本文をカスタマイズするには、ユーザープールの **[メッセージテンプレート]** メニューで **[検証メッセージ]** テンプレートを編集します。**[検証メッセージ]** テンプレートを編集するときに、**[検証タイプ]** として **[コード]** または **[リンク]** を選択できます。

検証タイプとして**コード**を選択した場合、カスタムメッセージには `{####}` プレースホルダーを含める必要があります。メッセージを送信するときに、検証コードはこのプレースホルダーを置き換えます。

検証タイプとして**リンク**を選択した場合、カスタムメッセージにはプレースホルダーを `{##Verify Your Email##}` の形式で含める必要があります。プレースホルダー文字間のテキスト文字列は、`{##Click here##}` のように変更できます。*E メールを検証する*というタイトルの検証リンは、このプレースホルダーを置き換えます。

E メール検証メッセージのリンクは、ユーザーを次の例のような URL に誘導します。

```
https://<your user pool domain>/confirmUser/?client_id=abcdefg12345678&user_name=emailtest&confirmation_code=123456
```

メッセージの最大長は検証コード (ある場合) を含めて UTF-8 で 20,000 文字です。このメッセージでは、HTML タグを使用してコンテンツの書式を設定できます。

## ユーザー招待メッセージのカスタマイズ
<a name="cognito-user-pool-settings-user-invitation-message-customization"></a>

Amazon Cognito が SMS または E メールメッセージを使用して新規ユーザーに送信するユーザー招待メッセージをカスタマイズするには、**[メッセージテンプレート]** メニューで **[招待メッセージ]** テンプレートを編集できます。

**重要**  
カスタムメッセージには、`{username}` および `{####}` のプレースホルダーを含む必要があります。Amazon Cognito が招待メッセージを送信すると、これらのプレースホルダーはユーザーのユーザー名とパスワードに置き換えられます。

SMS メッセージの最大長は検証コードを含めて UTF-8 で 140 文字です。E メールメッセージの最大長は検証コードを含めて UTF-8 で 20,000 文字です。E メールメッセージに HTML タグを使用して、コンテンツの書式を設定できます。

## E メールアドレスのカスタマイズ
<a name="cognito-user-pool-settings-email-address-customization"></a>

デフォルトでは、Amazon Cognito は、**no-reply@verificationemail.com** からユーザープール内のユーザーに E メールメッセージを送信します。**no-reply@verificationemail.com** の代わりにカスタムの FROM と REPLY-TO メールアドレスを指定するか選択できます。

**FROM と REPLY-TO の E メールアドレスをカスタマイズするには**

1. [[Amazon Cognito console]](https://console.aws.amazon.com/cognito/home) (Amazon Cognito コンソール) に移動し、**[User Pools]** (ユーザープール) を選択します。

1. リストから既存のユーザープールを選択するか、[ユーザープールを作成](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)します。

1. **[認証方法]** メニューを選択します。**[Email]** (E メール) で、**[Edit]** (編集) を選択します。

1. **[SES Region]** (SES リージョン)を選択します。

1. 選択した **[SES Region]** (SES リージョン) の Amazon SES で検証した E メールアドレスリストから **[FROM email address]** (FROM E メールアドレス) を選択します。検証済みドメインの E メールアドレスを使用するには、 AWS Command Line Interface または AWS API で E メール設定を設定します。詳細については、*Amazon Simple Email Service デベロッパーガイド*の「[Amazon SES での E メールアドレスとドメインの検証](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/verify-addresses-and-domains.html)」を参照してください。

1. 選択した**[SES Region]** (SES リージョン)の構成セットのリストから、**[Configuration set]** (構成セット) を選択します。

1. E メールメッセージ用に、わかりやすい **[FROM sender name]** (FROM 送信者名) を`John Stiles <johnstiles@example.com>`の形式で入力します。

1. 返信先 E メールアドレスをカスタマイズするには、[**REPLY-TO email address (返信先 E メールアドレス)**] フィールドに有効な E メールアドレスを入力します。

## Amazon SES E メールを代理送信するための Amazon Cognito の承認 (カスタム REPLY-TO E メールアドレスからの送信)
<a name="cognito-user-pool-settings-ses-authorization-to-send-email"></a>

Amazon Cognito は、デフォルトのアドレスではなく、カスタムの FROM メールアドレスからメールを送信するように設定できます。カスタムアドレスを使用するには、Amazon SES で検証済みの ID から E メールメッセージを送信できる許可を Amazon Cognito に付与する必要があります。ほとんどの場合、送信承認ポリシーを作成することで許可が付与できます。詳細については、*Amazon Simple Email Service デベロッパーガイド*の「[Amazon SES での送信承認の使用](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html)」を参照してください。

メールメッセージに Amazon SES の使用許可をユーザープールを設定すると、Amazon Cognito はアカウントに `AWSServiceRoleForAmazonCognitoIdpEmailService` ロールを作成して、Amazon SES へのアクセスを許可します。`AWSServiceRoleForAmazonCognitoIdpEmailService` サービスにリンクされたロールが使用される場合、送信承認ポリシーは必要ありません。ユーザープールのデフォルト E メール機能*と、*検証済みの Amazon SES ID の両方を FROM アドレスとして使用する場合のみ、送信承認ポリシーを追加する必要があります。

Amazon Cognito が作成するサービスリンクロールの詳細については、「[Amazon Cognito のサービスリンクロールの使用](using-service-linked-roles.md)」を参照してください。

次の送信承認ポリシーの例では、Amazon SES 検証済み ID を使用するための限定された権限が Amazon Cognito に付与されています。Amazon Cognito は、条件 `aws:SourceArn` のユーザープールと条件 `aws:SourceAccount` のアカウントの両方に代わって送信する場合にのみ、E メールメッセージを送信できます。その他の例については、「*Amazon Simple Email Service デベロッパーガイド*」の「[Amazon SES 送信承認ポリシーの例](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-policy-examples.html)」を参照してください。

**注記**  
この例では、「Sid」値はステートメントを一意に識別する任意の文字列です。ポリシー構文の詳細については、「*Amazon Simple Email Service デベロッパーガイド*」の「[Amazon SES 送信承認ポリシー](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-policies.html)」を参照してください。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "stmnt1234567891234",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "email.cognito-idp.amazonaws.com"
                ]
            },
            "Action": [
                "SES:SendEmail",
                "SES:SendRawEmail"
            ],
            "Resource": "arn:aws:ses:us-east-1:111122223333:identity/support@example.com",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:cognito-idp:us-east-1:111122223333:userpool/us-east-1_EXAMPLE"
                }
            }
        }
    ]
}
```

------

Amazon Cognito コンソールは、ドロップダウンメニューから Amazon SES の ID を選択するときに同様のポリシーを追加します。CLI または API を使用してユーザープールを設定する場合は、前の例のように構造化されたポリシーを Amazon SES アイデンティティにアタッチする必要があります。