

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

# ユーザープール内のユーザーを管理する
<a name="managing-users"></a>

ユーザープールを作成した後で、ユーザーアカウントの作成、確認、および管理を行うことができます。Amazon Cognito グループでは、IAM ロールをグループにマップすることによって、ユーザーと、ユーザーのリソースへのアクセスを管理できます。

Amazon Cognito ユーザープール内のユーザーを管理するには、さまざまな設定オプションと管理タスクが必要です。ユーザープールは数百万のユーザーにスケールできます。このスケールのユーザーディレクトリには、それと同様にスケーラブルで反復可能な管理ツールが必要です。多数のユーザープロファイルの作成、非アクティブなユーザーの管理、ガバナンスやコンプライアンスのレポート作成、ほとんどの作業をユーザーが行うセルフサービスツールの設定が必要になります。ユーザープールを作成したら、E メールや電話番号の検証を要求するなど、ユーザーのサインアップ方法とアカウントの確認方法を制御できます。また、管理者は、ユーザーアカウントの直接作成や、ウェルカムメッセージとパスワードの要件のカスタマイズもできます。

ユーザープールには、ユーザーのグループメンバーシップに基づいてリソースへのアクセスを管理できるユーザーグループが含まれます。これらのグループに IAM ロールを割り当てて、アイデンティティプールを使用して AWS のサービス へのアクセスを管理できます。ユーザーのグループメンバーシップは、ID トークンとアクセストークンの両方に存在します。この情報を使用して、アプリケーション内で、または Amazon Verified Permissions などのポリシーエンジンを用いて、実行時にアクセスコントロールを決定できます。

ユーザープールに多数のユーザーが含まれていることがよくあります。ユーザーアカウントを検索して更新する作業が多くなります。Amazon Cognito コンソールと API は、ユーザー名、E メール、電話番号などの標準属性に基づくユーザーのクエリをサポートします。管理者は、パスワードのリセット、アカウントの無効化、ユーザーイベント履歴の表示を行うこともできます。

既存のユーザーデータの移行については、Amazon Cognito には、CSV ファイルからユーザーをインポートするオプションや、ユーザーが初めてサインインしたときに [Lambda トリガー](user-pool-lambda-migrate-user.md)を使用してユーザーを自動的に移行させるオプションがあります。これらのオプションは、他のユーザーディレクトリからユーザープールへのユーザー移行をサポートします。

ユーザープールのユーザー管理機能を使用して、ユーザーライフサイクルと認証エクスペリエンスをきめ細かく制御できます。セルフサービスサインアップ、管理者が作成したアカウント、グループ、移行ツールを組み合わせて活用することで、Amazon Cognito ユーザープールは柔軟なユーザーディレクトリになります。

**Topics**
+ [ユーザー作成ポリシーの設定](user-pool-settings-admin-create-user-policy.md)
+ [ユーザーアカウントのサインアップと確認](signing-up-users-in-your-app.md)
+ [管理者としてのユーザーアカウントの作成](how-to-create-user-accounts.md)
+ [ユーザープールにグループを追加する](cognito-user-pools-user-groups.md)
+ [ユーザーアカウントの管理と検索](how-to-manage-user-accounts.md)
+ [パスワード、アカウント復旧、パスワードポリシー](managing-users-passwords.md)
+ [ユーザープールへのユーザーのインポート](cognito-user-pools-import-users.md)
+ [ユーザー属性の操作](user-pool-settings-attributes.md)

# ユーザー作成ポリシーの設定
<a name="user-pool-settings-admin-create-user-policy"></a>

ユーザープールでは、ユーザーにサインアップを許可するか、ユーザーを管理者として作成できます。また、サインアップ後の検証と確認のプロセスを、どの程度ユーザーに委ねるかを制御できます。例えば、サインアップを確認して、外部の検証プロセスに基づいてサインアップを承認できます。この設定 (管理者作成ユーザーポリシー) では、ユーザーが自分のユーザーアカウントを確認できなくなるまでの時間も設定します。**

Amazon Cognito は、ソフトウェアのカスタマー ID およびアクセス管理 (CIAM) プラットフォームとして、一般顧客のニーズに応えることができます。サインアップを受け入れてアプリケーションクライアントを持っているユーザープールは、マネージドログインの有無にかかわらず、パブリックに検出可能なアプリクライアント ID を知っていてサインアップをリクエストするインターネット上のすべてのユーザーに対して、ユーザープロファイルを作成します。サインアップしたユーザープロファイルは、アクセストークンと ID トークンを受け取り、アプリケーション用に承認されたリソースにアクセスできます。ユーザープールでサインアップを有効にする前に、オプションを確認し、設定がセキュリティ基準に準拠していることを確認してください。**[自己登録を有効化]** と `AllowAdminCreateUserOnly` を、以下の手順で説明するように注意して設定します。

------
#### [ AWS マネジメントコンソール ]

ユーザープールの **[サインアップ]** メニューには、ユーザープール内のユーザーのサインアップと管理者による作成に関する設定の一部が含まれています。

**サインアップエクスペリエンスを設定するには**

1. **[Cognito による検証と確認]** で、**[Cognito が検証と確認のためのメッセージを自動的に送信することを許可]** するかどうかを選択します。この設定を有効にすると、Amazon Cognito はユーザープールに提示する必要があるコードを含む E メールまたは SMS メッセージを新規ユーザーに送信します。これにより、E メールアドレスまたは電話番号の所有権が確認され、同等の属性が検証済みとして設定され、ユーザーアカウントのサインインが確認されます。選択した **[検証する属性]** により、検証メッセージの配信方法と送信先が決まります。

1. **[属性変更の確認]** は、ユーザーの作成時には重要ではありませんが、属性の検証に関係します。[[サインイン属性]](user-pool-settings-attributes.md#user-pool-settings-aliases.title) を変更したが、まだ検証していないユーザーに対して、新しい属性値または元の属性値を使用して引き続きサインインすることを許可できます。詳細については、「[ユーザーが E メールまたは電話番号を変更するときに確認する](signing-up-users-in-your-app.md#verifying-when-users-change-their-email-or-phone-number)」を参照してください。

1. **[必須の属性]** には、ユーザーのサインアップやユーザーの作成前に値を指定する必要がある属性が表示されます。必須属性は、ユーザープールの作成時にのみ設定できます。

1. **カスタム属性**は、ユーザーの作成とサインアップのプロセスにとって重要です。イミュータブルなカスタム属性の値を設定できるのは、ユーザーの初回作成時のみであるためです。**カスタム属性の詳細については、「[カスタム属性](user-pool-settings-attributes.md#user-pool-settings-custom-attributes)」を参照してください。

1. [認証されていない](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html#user-pool-apis-auth-unauth) `SignUp` API を使用して新しいアカウントを生成することをユーザーに許可する場合は、**[セルフサービスのサインアップ]** で、**[自己登録を有効化]** を設定します。自己登録を無効にした場合は、Amazon Cognito コンソールまたは [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html) API リクエストで新しいユーザーを管理者としてのみ作成できます。自己登録が非アクティブなユーザープールでは、[SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html) API リクエストが `NotAuthorizedException` を返し、マネージドログインに **[サインアップ]** リンクが表示されません。

管理者としてユーザーを作成する予定のユーザープールでは、**[認証方法]** メニューの **[管理者が設定した仮パスワードの有効期限]** で仮パスワードの有効期間を設定できます。

管理者としてのユーザーを作成する場合の別の重要な要素は、招待メッセージです。新しいユーザーを作成すると、Amazon Cognito はアプリへのリンクを含むメッセージをユーザーに送信し、初回のサインインができるようにします。このメッセージテンプレートを **[認証方法]** メニューの **[メッセージテンプレート]** でカスタマイズします。

[[機密アプリクライアント]](user-pool-settings-client-apps.md#user-pool-settings-client-app-client-types.title) (通常はウェブアプリケーション) には、アプリクライアントシークレットがないとサインアップできないようにするクライアントシークレットを設定できます。セキュリティ上のベストプラクティスとして、パブリックアプリクライアント (通常はモバイルアプリ) にはアプリクライアントシークレットを配布しないでください。クライアントシークレットを持つアプリケーションクライアントは、Amazon Cognito コンソールの **[アプリケーションクライアント]** メニューで作成できます。

------
#### [ Amazon Cognito user pools API ]

ユーザープールのユーザーを作成するためのパラメータは、[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) または [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) API リクエストを使用してプログラムで設定できます。

[AdminCreateUserConfig](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-AdminCreateUserConfig) 要素は、ユーザープールの以下のプロパティの値を設定します。

1. セルフサービスのサインアップの有効化

1. 管理者が新規作成したユーザーに送信する招待メッセージ

次の例を API リクエスト本文全体に追加すると、セルフサービスのサインアップが無効なユーザープールと、基本的な招待メールが設定されます。

```
"AdminCreateUserConfig": { 
      "AllowAdminCreateUserOnly": true,
      "InviteMessageTemplate": { 
         "EmailMessage": "Your username is {username} and temporary password is {####}.",
         "EmailSubject": "Welcome to ExampleApp",
         "SMSMessage": "Your username is {username} and temporary password is {####}."
      }
   }
```

[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) または [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) API リクエストの以下の追加パラメータは、新規ユーザーの作成を制御します。

[AutoVerifiedAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-AutoVerifiedAttributes)  
新しいユーザーを登録するときに[自動的にメッセージを送信](user-pool-settings-email-phone-verification.md#user-pool-settings-email-phone-verification.title)する先の属性、メールアドレス、または電話番号。

[ポリシー](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-Policies)  
ユーザープールの[パスワードポリシー](managing-users-passwords.md#user-pool-settings-policies.title)。

[Schema](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-Schema)  
ユーザープールの[カスタム属性](user-pool-settings-attributes.md#user-pool-settings-custom-attributes.title)。イミュータブルなカスタム属性の値を設定できるのはユーザーの初回作成時のみであるため、カスタム属性はユーザーの作成とサインアップのプロセスにとって重要です。**  
このパラメータでは、ユーザープールの必須の属性も設定します。次のテキストを API リクエスト本文全体の `Schema` 要素に挿入すると、`email` 属性が必要に応じて設定されます。  

```
{
            "Name": "email",
            "Required": true
}
```

------

# ユーザーアカウントのサインアップと確認
<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 アイデンティティにアタッチする必要があります。

# 管理者としてのユーザーアカウントの作成
<a name="how-to-create-user-accounts"></a>

ユーザープールは、インターネット上の誰でもアプリケーション内のユーザープロファイルにサインアップできるという、Customer Identity and Access Management (CIAM) のユーザーディレクトリであるだけでありません。セルフサービスサインアップを無効にすることができます。顧客の本人確認が済んでいる場合に、事前に認可された顧客のみを認めることをお勧めします。[プライベート SAML 2.0 または OIDC ID プロバイダー](cognito-user-pools-identity-federation.md)を使用して、アプリケーションの周囲に手動認証ガードレールを配置するには、[ユーザーをインポート](cognito-user-pools-import-users.md)するか、[サインアップ時にユーザーをスクリーニング](user-pool-lambda-pre-sign-up.md)するか、または、管理 API オペレーションを使用してユーザーを作成します。ユーザーの管理作成ワークフローは、プログラムによることでも、別のシステムに登録した後にユーザーをプロビジョニングすることでも、Amazon Cognito コンソールでケースバイケースやテストベースで作成することでも可能です。

ユーザーを管理者として作成すると、Amazon Cognito は、ユーザーの一時的なパスワードを設定し、ウェルカムメッセージまたは招待メッセージを送信します。招待メッセージのリンクに従って初回のサインインを行い、パスワードを設定し、アカウントを確認できます。次のページでは、新しいユーザーを作成し、ウェルカムメッセージを設定する方法について説明します。ユーザープール API と AWS SDK または CDK を使用したユーザー作成の詳細については、[AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html)」を参照してください。

ユーザープールを作成したら、 AWS マネジメントコンソール、、 AWS Command Line Interface または Amazon Cognito API を使用してユーザーを作成できます。ユーザープールで新しいユーザーのプロファイルを作成し、サインアップ手順を含めたウェルカムメッセージをそのユーザーに SMS または E メールで送信できます。

管理者がユーザープール内のユーザーを管理する方法の例を以下に示します。
+ Amazon Cognito コンソールまたは `AdminCreateUser` API オペレーションを使用して新しいユーザープロファイルを作成します。
+ ユーザー名パスワード、パスワードなし、パスキー、カスタム[認証フロー](amazon-cognito-user-pools-authentication-flow-methods.md)を、ユーザープールとアプリケーションクライアントで利用できるようにします。
+ ユーザー属性値を設定します。
+ カスタム属性を作成します。
+ `AdminCreateUser` API リクエストに、イミュータブルな[カスタム属性](user-pool-settings-attributes.md#user-pool-settings-custom-attributes)の値を設定します。この機能は Amazon Cognito コンソールでは利用できません。
+ 仮パスワードを指定するか、パスワードなしでユーザーを作成するか、または Amazon Cognito にパスワードの自動生成を許可します。
+ 新しいユーザーを作成し、アカウントの確認、E メールアドレスの検証、または電話番号の検証を自動的に行います。
+ またはカスタムメッセージ、カスタム SMS 送信者、カスタム E メール送信者などの AWS マネジメントコンソール Lambda トリガーを使用して、新規ユーザーのカスタム SMS および [E メール](user-pool-lambda-custom-email-sender.md)招待[メッセージ](user-pool-lambda-custom-message.md)を指定します。 [カスタム SMS 送信者の Lambda トリガー](user-pool-lambda-custom-sms-sender.md)
+ 招待メッセージが SMS、E メール、その両方のいずれで送信されるかを指定する。
+ `AdminCreateUser` パラメータに `RESEND` を指定して、`MessageAction` API を呼び出すことで、既存のユーザーにウェルカムメッセージを再送信する。
+ ユーザー作成時の招待メッセージの送信を[抑制](#admincreateuserwalkthrough-step-invitationmessage)します。
+ 新規ユーザーアカウントの有効期限を最大 90 日に指定します。
+ ユーザーに自己サインアップを許可したり、管理者にのみ新しいユーザーの追加を許可したりする。

管理者は、サーバー側のアプリケーションで AWS 認証情報を使用してユーザーにサインインすることもできます。詳細については、「[API 認証と SDK 認証の認可モデル](authentication-flows-public-server-side.md)」を参照してください。

## ユーザー認証フローとユーザーの作成
<a name="how-to-create-user-accounts-flows"></a>

管理者がユーザーを作成する場合、ユーザープールの設定に応じて異なるオプションを使用できます。*認証フロー* (ユーザーがサインインと MFA に使用できる方法) に応じて、ユーザーの作成方法とユーザーへの送信メッセージが変わる場合があります。ユーザープールで使用できる認証フローをいくつか以下に示します。
+ ユーザー名とパスワード
+ パスキー
+ サードパーティの IdP によるサインイン
+ E メールおよび SMS ワンタイムパスワード (OTP) によるパスワードなしのサインイン
+ E メール、SMS、Authenticator アプリケーション OTP による多要素認証
+ Lambda トリガーによるカスタム認証

これらのサインイン要素の設定方法の詳細については、「[Amazon Cognito ユーザープールによる認証](authentication.md)」を参照してください。

## パスワードなしでユーザーを作成する
<a name="how-to-create-user-accounts-thingstoknow-passwordless"></a>

ユーザープールでパスワードなしのサインインを有効にしている場合は、パスワードなしでユーザーを作成できます。パスワードなしでユーザーを作成するには、使用可能なパスワードなしのサインイン要素の属性値を指定する必要があります。例えば、E メール OTP によるパスワードなしのサインインがユーザープールで使用可能な場合は、パスワードなしで、E メールアドレス属性を持つユーザーを作成できます。新規ユーザーが使用できる認証フローにパスワード (パスキー、ユーザー名パスワードなど) のみが必要である場合は、新規ユーザーごとに仮パスワードを作成または生成する必要があります。

**パスワードなしの新規ユーザーを作成するには**
+ Amazon Cognito コンソールで **[パスワードを設定しない]** を選択します。
+ `AdminCreateUser` API リクエストの `TemporaryPassword` パラメータを省略するか、空白のままにします。

**パスワードなしのユーザーは自動的に確認される**  
通常、新規ユーザーは作成時に仮パスワードを取得し、`FORCE_CHANGE_PASSWORD` ステータスになります。パスワードなしのユーザーを作成すると、すぐに `CONFIRMED` 状態になります。`CONFIRMED` 状態のユーザーに確認コードを再送信することはできません。

**パスワードなしのユーザーの場合、招待メッセージは変更される**  
デフォルトでは、Amazon Cognito から新規ユーザーに送信される[招待メッセージ](cognito-user-pool-settings-message-customizations.md#cognito-user-pool-settings-user-invitation-message-customization)は、「`Your username is {userName} and your password is {####}.`」という内容です。パスワードなしのユーザーを作成すると、メッセージの内容は「`Your username is {userName}.`」となります。ユーザーのパスワードを設定するかどうかを反映するには、招待メッセージをカスタマイズします。パスワードなしの認証モデルで `{####}` パスワード変数を省略します。

**パスワードなしの要素が利用可能な場合、パスワードは自動生成できない**  
E メールまたは電話の OTP によるパスワードなしのサインインをサポートするようにユーザープールを設定している場合、パスワードを自動生成することはできません。パスワードを持つユーザーごとに、プロファイルの作成時に、仮パスワードを設定する必要があります。

**パスワードなしのユーザーは、すべての必須属性の値を持っている必要がある**  
パスワード*なし*のユーザーを作成する場合、リクエストが成功するのは、ユーザープールで必須としてマークされたすべての属性の値をユーザーが提供した場合のみです。これは、OTP 配信に必要な電話番号と E メールアドレスの属性だけでなく、すべての必須属性に適用されます。

## 後で必須属性の値を提供するユーザーを作成する
<a name="how-to-create-user-accounts-thingstoknow-password-restrictions"></a>

ユーザープールで属性を必須に設定できますが、管理者によるユーザーの作成後に、アプリケーション内でユーザーとやり取りしながら、これらの属性を収集することもできます。管理者は、*仮パスワードを使用*してユーザーを作成するときに、必須属性の値を省略できます。パスワードなしのユーザーの場合、必須属性の値を省略することはできません。

ユーザーが必須属性の値が不足したまま仮パスワードを使用すると、初回サインイン時に [NEW\$1PASSWORD\$1REQUIRED](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html#CognitoUserPools-RespondToAuthChallenge-request-ChallengeResponses) チャレンジを受け取ります。この場合、不足している必須属性の値を `requiredAttributes` パラメータで指定できます。すべての必須属性が[変更可能](user-pool-settings-attributes.md#user-pool-settings-custom-attributes)である場合にのみ、パスワードを持つが必須属性を持たないユーザーを作成できます。ユーザーは、サインインに使用したアプリケーションクライアントから必須属性が[書き込み可能](user-pool-settings-client-apps.md#cognito-user-pools-app-idp-settings-about)である場合に限り、`NEW_PASSWORD_REQUIRED` チャレンジと必須属性の値を使用してサインインを完了できます。

管理者が作成したユーザーに永続的なパスワードを設定すると、ステータスは `CONFIRMED` に変わり、ユーザープールは初回サインイン時に新しいパスワード*または*必須属性の入力を求めません。

## で新しいユーザーを作成する AWS マネジメントコンソール
<a name="creating-a-new-user-using-the-console"></a>

Amazon Cognito コンソールを使用して、ユーザーパスワードの要件を設定し、ユーザーに送信される招待メッセージと確認メッセージを設定し、新しいユーザーを追加できます。

### パスワードポリシーを設定し、自己登録を有効にする
<a name="set-user-password-policy"></a>

パスワードの複雑さを最小限に抑え、ユーザープールでパブリック API を使用してユーザーがサインアップできるかどうかを設定できます。

**パスワードポリシーの設定**

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. **[認証方法]** メニューを選択し、**[パスワードポリシー]** を見つけます。**[編集]** を選択します。

1. **[Custom]** (カスタム) の **[Password policy mode]** (パスワードポリシーモード) を選択します。

1. **[Password minimum length]** (パスワードの最小長) を選択します。パスワード長要件の制限については、「[ユーザープールのリソースクォータ](https://docs.aws.amazon.com/cognito/latest/developerguide/limits.html#limits-hard)」を参照してください。

1. **[Password complexity]** (パスワードの複雑さ) 要件を選択してください。

1. 管理者が設定したパスワードの有効期間を選択します。

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

**セルフサービスサインアップを許可する**

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. **[サインアップ]** メニューを選択し、**[セルフサービスのサインアップ]** を見つけます。**[Edit]** (編集) を選択します。

1. **[Enable self-registration]** (自己登録を有効化) するかどうかを選択します。自己登録は通常、クライアントシークレットまたは AWS Identity and Access Management (IAM) API 認証情報を配布せずにユーザープールに新しいユーザーを登録する必要があるパブリックアプリケーションクライアントで使用されます。
**自己登録の無効化**  
自己登録を有効にしない場合は、IAM API 認証情報、またはフェデレーションプロバイダーとのサインインを使用して管理 API アクションで新しいユーザーを作成する必要があります。

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

### E メールメッセージと SMS メッセージのカスタマイズ
<a name="creating-a-new-user-customize-messages"></a>

**ユーザーメッセージのカスタマイズ**

Amazon Cognito がユーザーにサインインするように招待したとき、ユーザーがユーザーアカウントへのサインアップ、またはサインインして多要素認証 (MFA) を要求される際に Amazon Cognito はユーザーに送信するメッセージをカスタマイズできます。
**注記**  
**[Invitation message]** (招待メッセージ) はユーザープールにユーザーを作成し、サインインに招待すると送信されます。Amazon Cognito はユーザーの E メールアドレスまたは電話番号に初期サインイン情報を送信します。  
**検証メッセージ**は、ユーザーがユーザープールのユーザーアカウントに登録したときに送信されます。Amazon Cognito はユーザーにコードを送信します。ユーザーが Amazon Cognito にコードを提供すると、連絡先情報を確認し、サインインのためにアカウントを確認します。検証コードは 24 時間有効です。  
**[MFA message]** (MFA メッセージ) は、ユーザープールで SMS MFA を有効にし、SMS MFA を構成したユーザーがサインインして MFA を要求されたときに送信されます。

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. **[メッセージテンプレート]** メニューを選択して、**[検証メッセージ]**、**[招待メッセージ]**、または **[MFA メッセージ]** を選択し、**[編集]** を選択します。

1. 選択したメッセージタイプのメッセージをカスタマイズします。
**注記**  
メッセージをカスタマイズするときは、メッセージテンプレート内のすべての変数を含める必要があります。例えば、変数の場合 **\$1\$1\$1\$1\$1\$1** は含まれません。ユーザーにはメッセージアクションを完了するのに十分な情報がありません。  
詳細については、「[メッセージテンプレート](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-message-templates.html)」を参照してください。

1. 

   1. **検証メッセージ**

      1. **[Email]** (E メール) メッセージの **[Verification type]** (検証タイプ) を選択します。**[Code]** (コード) 検証は、ユーザーが入力する必要がある数値コードを送信します。**[Link]** (リンク) 検証は、ユーザーがクリックして連絡先情報を検証できるリンクを送信します。変数内のテキスト **[Link]** (リンク) メッセージはハイパーリンクテキストとして表示されます。例えば、変数 \$1\$1 \$1Click here\$1\$1\$1 を使用したメッセージテンプレートは、E メールメッセージで「[Click here]() (ここをクリックしてください) 」というように表示されます。

      1. **[Email]** (E メール) メッセージの **[Email subject]** (E メールの件名) を入力します。

      1. **[Email]** (E メール) メッセージのカスタムの **[Email message]** (E メールメッセージ) のテンプレートを入力します。このテンプレートは HTML でカスタマイズできます。

      1. **[SMS]** メッセージのカスタムの **[SMS message]** (SMS メッセージ) のテンプレートを入力します。

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

   1. **[Invitation messages]** (招待メッセージ)

      1. **[Email]** (E メール) メッセージの **[Email subject]** (E メールの件名) を入力します。

      1. **[Email]** (E メール) メッセージのカスタムの **[Email message]** (E メールメッセージ) のテンプレートを入力します。このテンプレートは HTML でカスタマイズできます。

      1. **[SMS]** メッセージのカスタムの **[SMS message]** (SMS メッセージ) のテンプレートを入力します。

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

   1. **MFA メッセージ**

      1. **[SMS]** メッセージのカスタムの **[SMS message]** (SMS メッセージ) のテンプレートを入力します。

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

### ユーザーの作成
<a name="creating-a-new-user-using-the-users-tab"></a>

**ユーザーの作成**

Amazon Cognito コンソールからユーザープールの新しいユーザーを作成できます。通常、ユーザーはパスワードを設定した後にサインインできます。E メールアドレスでサインインするには、ユーザーは `email` 属性を確認する必要があります。電話番号でサインインするには、ユーザーは `phone_number` 属性を確認する必要があります。アカウントを管理者として確認するには、 AWS CLI または API を使用するか、フェデレーティッド ID プロバイダーでユーザープロファイルを作成することもできます。詳細については、「[Amazon Cognito API Reference](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/)」を参照してください。

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. **[ユーザー]** メニュー、**[ユーザーを作成]** の順に選択します。

1. パスワード要件、使用可能なアカウント回復方法、およびユーザープールのエイリアス属性に関するガイダンスは、「**ユーザープールのサインインとセキュリティ要件**」を参照してください。

1. <a name="admincreateuserwalkthrough-step-invitationmessage"></a>**招待メッセージ**の送信方法を選択します。SMS メッセージ、E メールメッセージ、または両方を選択します。招待メッセージを抑制するには、**[招待を送信しない]** を選択します。
**注記**  
招待メッセージを送信する前に、ユーザープールの **[認証方法]** メニューで、Amazon Simple Notification Service および Amazon Simple Email Service により、送信者と AWS リージョン を設定します。受信者メッセージとデータレートが適用されます。Amazon SES は、メールメッセージの請求を別途請求し、Amazon SNS は SMS メッセージについて別途請求します。

1. 新規ユーザー用に **[Username]** (ユーザー名) を選択します。

1. **[Create a password]** (パスワードを作成する) または、Amazon Cognito にユーザーの **[Generate a password]** (パスワードを生成する) を許可するかどうかを選択してください。[[パスワードなしのサインイン]](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless) がユーザープールで利用可能な場合、パスワードを生成するオプションは使用できません。一時パスワードは、ユーザープールのパスワードポリシーに準拠する必要があります。

1. **[作成]** を選択します。

1. **[ユーザー]** メニューを選択し、**[ユーザー名]** でユーザー名を入力します。**[User attributes]** (ユーザー属性) および **[Group memberships]** (グループメンバーシップ) を追加して編集します。**ユーザーイベント履歴**の確認

# ユーザープールにグループを追加する
<a name="cognito-user-pools-user-groups"></a>

Amazon Cognito ユーザープール内のグループのサポートにより、ユーザーの作成と管理、グループへのユーザーの追加、およびグループからのユーザーの削除が可能になります。グループを使用して、ユーザーのコレクションを作成してそのアクセス権限を管理したり、異なるタイプのユーザーを表したりできます。 AWS Identity and Access Management (IAM) ロールをグループに割り当てると、グループのメンバーのアクセス許可を定義できます。

グループを使用して、ユーザープールでユーザーのコレクションを作成できます。この操作は、これらのユーザーのアクセス権限を設定するためによく行われます。例えば、ウェブサイトやアプリの読者、寄稿者、および編集者であるユーザーに対して別個のグループを作成できます。また、グループに関連付けられた IAM ロールを使用することで、これらの異なるグループに異なる許可を設定して、コントリビュータのみがコンテンツを Amazon S3 に配置し、エディタのみが Amazon API Gateway の API を通じてコンテンツをパブリッシュできるようにすることも可能です。

Amazon Cognito は、ユーザープールに追加する OIDC、SAMl、ソーシャル [ID プロバイダー](cognito-user-pools-identity-federation.md#cognito-user-pools-identity-federation-how-it-works) (IdP) ごとにユーザーグループを作成します。グループ名の形式は `[user pool ID]_[IdP name]` です (例: `us-east-1_EXAMPLE_MYSSO`、`us-east-1_EXAMPLE_Google`)。自動生成された一意の各 IdP ユーザープロファイルは、このグループに自動的に追加されます。[リンクされたユーザー](cognito-user-pools-identity-federation-consolidate-users.md)は、このグループに自動的に追加されませんが、そのプロファイルを別のプロセスでグループに追加できます。

ユーザープールでグループを作成および管理するには AWS マネジメントコンソール、、 APIs、および CLI を使用します。開発者 ( AWS 認証情報を使用) は、ユーザープールのグループを作成、読み取り、更新、削除、一覧表示できます。また、グループに対してユーザーを追加、削除できます。

ユーザープール内のグループを使用しても追加コストは発生しません。詳細については、「[Amazon Cognito の料金](https://aws.amazon.com/cognito/pricing/)」を参照してください。

## グループへの IAM ロールの割り当て
<a name="assigning-iam-roles-to-groups"></a>

グループを使用して、IAM ロールでリソースへの許可を制御できます。IAM ロールには、信頼ポリシーと許可ポリシーが含まれます。ロールの[信頼](https://docs.aws.amazon.com/cognito/latest/developerguide/role-trust-and-permissions.html)ポリシーでは、ロールを使用できるユーザーを指定します。[アクセス許可](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies)ポリシーでは、グループメンバーがアクセスできるアクションとリソースを指定します。IAM ロールを作成するときに、グループユーザーがロールを引き受けることを許可するロールの信頼ポリシーを設定します。ロールの許可ポリシーで、グループに付与する許可を指定します。

Amazon Cognito でグループを作成するときは、ロールの [ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)を指定して IAM ロールを指定します。グループメンバーが Amazon Cognito を使用してサインインすると、ID プールから一時的な認証情報を受け取ることができます。それらの許可は、関連付けられた IAM ロールによって決まります。

各ユーザーは複数のグループに属することができます。デベロッパーとして、ユーザーが複数のグループに属している場合に IAM ロールを自動的に選択するための以下のオプションがあります。
+ 各グループに優先順位の値を割り当てることができます。優先順位が高い (低い) グループが選択され、それに関連付けられた IAM ロールが適用されます。
+ また、アプリは、ID プールを通じてユーザーの AWS 認証情報をリクエストするときに、[GetCredentialsForIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html) `CustomRoleARN` パラメータでロール ARN を指定して、利用できるロールから選択できます。指定された IAM ロールは、ユーザーが利用できるロールに一致する必要があります。

## グループへの優先順位の値の割り当て
<a name="assigning-precedence-values-to-groups"></a>

ユーザーは複数のグループに属することができます。ユーザーのアクセストークンと ID トークンの `cognito:groups` クレームには、ユーザーが属するすべてのグループのリストが含まれます。`cognito:roles` クレームには、グループに対応するロールのリストが含まれます。

ユーザーは複数のグループに属することができるので、各グループに優先順位を割り当てることができます。これは、ユーザーがユーザープールで属するその他のグループに対するこのグループの優先順字を指定する正数です。ゼロが最優先順位値です。低い優先順位の値を持つグループは、高い優先順位の値または null 値を持つグループよりも優先されます。ユーザーが複数のグループに属している場合、ユーザーの ID トークンの `cognito:preferred_role` クレームに適用される IAM ロールは、優先順位の値が最も低いグループのものになります。

2 つのグループは、同じ優先順位の値を持つことができます。その場合は、どちらのグループも他方に対して優先されません。同じ優先順位の値を持つ 2 つのグループのロール ARN が同じである場合、そのロールは、各グループのユーザーの ID トークンの `cognito:preferred_role` クレームで使用されます。2 つのグループのロール ARN が異なる場合、`cognito:preferred_role` クレームは、ユーザーの ID トークンで設定されません。

## Amazon API Gateway を使用した許可の管理でのグループの使用
<a name="using-groups-to-control-permission-with-amazon-api-gateway"></a>

Amazon API Gateway を使用した許可の管理には、ユーザープールのグループを使用することができます。ユーザーがメンバーであるグループは、IDトークンと `cognito:groups` クレームのユーザープールからのアクセストークンの両方に含まれています。リクエストとともに ID またはアクセストークンを Amazon API Gateway に送信し、REST API に Amazon Cognito ユーザープールオーソライザーを使用できます。詳細については、[API Gateway デベロッパーガイド](https://docs.aws.amazon.com/apigateway/latest/developerguide/)の「[Amazon Cognito ユーザープールをオーソライザーとして使用して REST API へのアクセスを制御する](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html)」を参照してください

カスタム JWT オーソライザーを使用して Amazon API Gateway HTTP API へのアクセスを承認することもできます。詳細については、[API Gateway デベロッパーガイド](https://docs.aws.amazon.com/apigateway/latest/developerguide/)の「[JWT オーソライザーを使用した HTTP API へのアクセスの制御](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-jwt-authorizer.html)」を参照してください。

## グループの制限
<a name="user-pool-user-groups-limitations"></a>

ユーザーグループには、次の制限が適用されます。
+ 作成できるグループの数は、[Amazon Cognito サービスクォータ](quotas.md)によって制限されます。
+ グループはネストできません。
+ グループのユーザーを検索することはできません。
+ グループを名前で検索することはできませんが、グループをリストすることはできます。

## で新しいグループを作成する AWS マネジメントコンソール
<a name="creating-a-new-group-using-the-console"></a>

以下の手順に従って、新しいグループを作成します。

**新しいグループを作成する**

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

1. **[User Pools]** (ユーザープール) を選択します。

1. リストから存在するユーザープールを 1 つ選択します。

1. **[グループ]** メニュー、**[グループを作成]** の順に選択します。

1. **[Create a group]** (グループを作成する) ページで、**[Group name]** (グループ名) に新しいグループのフレンドリ名を入力します。

1. オプションで、次のフィールドのいずれかを使用して、このグループに関する追加情報を指定できます。
   + **[Description]** (説明) - この新しいグループの使用目的の詳細を入力します。
   + **[Precedence]** (優先順位) - Amazon Cognito は、優先度が低いグループに属するグループに基づいて、特定のユーザーに対するすべてのグループ権限を評価し、適用します。優先順位が低いグループが選択され、それに関連付けられた IAM ロールが適用されます。詳細については、「[グループへの優先順位の値の割り当て](#assigning-precedence-values-to-groups)」を参照してください。
   + **[IAM role]** (IAM ロール) -リソースへのアクセス許可を制御する必要がある場合は、グループに IAM ロールを割り当てることができます。ID プールを持つユーザープールを統合する場合、[**IAM ロール**] の設定によって、トークンからロールを選択するよう ID プールが設定されているときに、ユーザーの ID トークンに割り当てられるロールが決定されます。詳細については、「[グループへの IAM ロールの割り当て](#assigning-iam-roles-to-groups)」を参照してください。
   + **[Add users to this group]** (ユーザーをこのグループに追加する) - 既存のユーザーを作成した後、このグループのメンバーとして追加します。

1. **[Create]** (作成) を選択して確定します。

# ユーザーアカウントの管理と検索
<a name="how-to-manage-user-accounts"></a>

ユーザープールには数百万のユーザーを含めることができます。このサイズのデータセットを使用するのは管理者にとって課題になります。Amazon Cognito には、ユーザープロファイルの検索や変更を行うツールがあります。ユーザーを検索する主な方法は、Amazon Cognito コンソールの **[ユーザー]** メニューと [ListUsers](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html) を使用することです。ユーザーに関する情報を取得する方法としては、[[AdminGetUser]](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminGetUser.html) などとは異なり、コストに影響しないオプションです。

本ガイドのこのセクションには、ユーザープール内のユーザープロファイルの検索と更新に関する情報が記載されています。

## ユーザー属性の表示
<a name="manage-user-accounts-viewing-user-attributes"></a>

Amazon Cognito コンソールでユーザー属性を表示するには、以下の手順に従います。

**ユーザー属性を表示するには**

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

1. **[User Pools]** (ユーザープール) を選択します。

1. リストから存在するユーザープールを 1 つ選択します。

1. **[ユーザー]** メニューを選択し、リストからユーザーを選択します。

1. ユーザーの詳細ページの **[User attributes]** (ユーザー属性) で、ユーザーに関連付けられている属性を表示できます。

## ユーザーのパスワードのリセット
<a name="manage-user-accounts-reset-user-password"></a>

Amazon Cognito コンソールでユーザーのパスワードをリセットするには、以下の手順に従います。

**ユーザーのパスワードのリセット**

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

1. **[User Pools]** (ユーザープール) を選択します。

1. リストから存在するユーザープールを 1 つ選択します。

1. **[ユーザー]** メニューを選択し、リストからユーザーを選択します。

1. ユーザーの詳細ページで、**[Actions]** (アクション)、**[Reset password]** (パスワードのリセット) を選択します。

1. **[Reset password]** (パスワードのリセット) ダイアログで、情報を確認し、準備ができたら **[Reset]** (リセット) を選択します。

   この行動により、確認コードがユーザーに即時送信され、ユーザーの状態が `RESET_REQUIRED` に変更されることでユーザーの現在のパスワードが無効にされます。**[Reset password]** (ユーザーパスワードのリセット) コードは、1 時間有効です。

## ユーザーアカウントの有効化、無効化、削除
<a name="manage-user-accounts-enable-disable"></a>

使用されていないユーザープロファイルを削除できます。一時的にアクセスを制限する場合は、無効にすることもできます。ユーザーは自分のアカウントを削除できますが、ユーザーアカウントを有効または無効にできるのはユーザープール管理者のみです。

**削除の影響**  
ユーザーは、削除済みのユーザーアカウントでサインインすることはできません。アクセスを回復するには、サインアップするか、再度作成する必要があります。

**アカウントの無効化の影響**  
ユーザーアカウントを無効にすると、Amazon Cognito はすべての認証済みセッションを自動的に無効にし、サインイン用のユーザーアカウントを非アクティブ化して、[アクセストークンと更新トークンの取り消し](token-revocation.md)を行います。無効化したアカウントにユーザーがサインインしようとすると、Amazon Cognito は `invalid_request` エラーとともにメッセージ `User is not enabled` を返します。この動作は、アプリケーションクライアントの[ユーザー存在の開示設定](cognito-user-pool-managing-errors.md)では変更されません。ローカルユーザーアカウントと、フェデレーションユーザーアカウントのローカルプロファイルを無効にすることができます。ユーザーがマネージドログインまたはクラシックのホストされた UI を使用してサインインし、その後アカウントを無効にした場合、認証されたセッションを維持するブラウザ Cookie を通じて再度サインインしようとすると、Amazon Cognito によってログインページにリダイレクトされます。

**アカウントの有効化の影響**  
ユーザーは、アカウントを有効にすると、すぐにサインインできます。ユーザーアカウントはデフォルトで有効になります。ユーザーの属性とパスワードは、アカウントが無効になる前と同じままです。アプリケーションで取り消したトークンは、ユーザーアカウントを無効にしたか、更新トークンを別個に取り消したかにかかわらず、トークンを所有していたユーザーアカウントを有効にした後も無効のままになります。

------
#### [ Delete a user account (console) ]

**ユーザーアカウントを削除するには**

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

1. **[User Pools]** (ユーザープール) を選択します。

1. リストから存在するユーザープールを 1 つ選択します。

1. **[ユーザー]** メニューを選択し、リスト内のユーザーのユーザー名の横にあるラジオボタンを選択します。

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

1. **[アクセスの無効化]** を選択します。

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

------
#### [ Delete a user account (API) ]

ユーザーは、セルフサービスのアクセストークンで認可された [DeleteUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteUser.html) API オペレーションを使用してアカウントを削除できます。`DeleteUser` リクエスト本文の例を次に示します。

```
{
   "AccessToken": "eyJra456defEXAMPLE"
}
```

管理者は、IAM で認可された [AdminDeleteUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminDeleteUser.html) API オペレーションを使用してユーザーアカウントを削除できます。`AdminDeleteUser` リクエスト本文の例を次に示します。

```
{
   "Username": "testuser",
   "UserPoolId": "us-west-2_EXAMPLE"
}
```

------
#### [ Disable a user account (console) ]

**ユーザーアカウントを無効にするには**

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

1. **[User Pools]** (ユーザープール) を選択します。

1. リストから存在するユーザープールを 1 つ選択します。

1. **[ユーザー]** メニューを選択し、リストからユーザーのユーザー名を選択します。

1. ユーザーの詳細ページで、**[アクション]**、**[ユーザーアクセスの無効化]** の順に選択します。

1. 表示されたダイアログで、**[無効化]** を選択します。

------
#### [ Disable a user account (API) ]

管理者は、IAM で認可された [AdminDisableUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminDisableUser.html) API オペレーションを使用してユーザーアカウントを無効化できます。`AdminDisableUser` リクエスト本文の例を次に示します。

```
{
   "Username": "testuser",
   "UserPoolId": "us-west-2_EXAMPLE"
}
```

------
#### [ Enable a user account (console) ]

**ユーザーアカウントを有効にするには**

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

1. **[User Pools]** (ユーザープール) を選択します。

1. リストから存在するユーザープールを 1 つ選択します。

1. **[ユーザー]** メニューを選択し、リストからユーザーのユーザー名を選択します。

1. ユーザーの詳細ページで、**[アクション]**、**[ユーザーアクセスの有効化]** の順に選択します。

1. 表示されたダイアログで、**[有効化]** を選択します。

------
#### [ Enable a user account (API) ]

管理者は、IAM で認可された [AdminEnableUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminEnableUser.html) API オペレーションを使用してユーザーアカウントを有効化できます。`AdminEnableUser` リクエスト本文の例を次に示します。

```
{
   "Username": "testuser",
   "UserPoolId": "us-west-2_EXAMPLE"
}
```

------

## ユーザー属性の検索
<a name="manage-user-accounts-searching-user-attributes"></a>

ユーザープールがすでに作成されている場合は、 AWS マネジメントコンソールの [**Users**] (ユーザー) パネルから検索できます。また、**[Filter]** (フィルター) パラメータを受け入れる Amazon Cognitoの [ListUsers API](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html) も使用できます。

以下のどの標準属性でも検索できます。カスタム属性は検索できません。
+ username (大文字と小文字が区別されます)
+ email
+ phone\$1number
+ name
+ given\$1name
+ family\$1name
+ preferred\$1username
+ cognito:user\$1status (コンソールでは [**Status (ステータス)**] となっています) (大文字と小文字が区別されません)
+ status (コンソールでは [**Enabled (有効)**] となっています) (大文字と小文字が区別されます)
+ sub

**注記**  
また、クライアント側のフィルターを使用してユーザーを一覧表示することもできます。サーバー側のフィルターは、1 つ以上の属性に一致しません。高度な検索を行うには、 AWS Command Line Interfaceでの `list-users` のアクションの `--query` パラメータを用いたクライアント側のフィルターを使用します。クライアント側のフィルターを使用すると、ListUsers は 0 人以上のユーザーからなるページ分割されたリストを返します。結果がゼロで、複数のページを連続して受信できます。Null ページネーショントークン値を受け取るまで、返される各ページネーショントークンでクエリを繰り返し、組み合わせた結果を確認します。  
サーバー側およびクライアント側のフィルタリングの詳細については、 AWS Command Line Interface 「 ユーザーガイド」の[「出力のフィルタリング AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html)」を参照してください。

## でユーザーを検索する AWS マネジメントコンソール
<a name="cognito-user-pools-manage-user-accounts-searching-for-users-using-console"></a>

ユーザープールがすでに作成されている場合は、 AWS マネジメントコンソールの [**Users**] (ユーザー) パネルから検索できます。

AWS マネジメントコンソール 検索は常にプレフィックス (「starts with」) 検索です。

**Amazon Cognito コンソールでユーザーを検索する**

1. [Amazon Cognito コンソール](https://console.aws.amazon.com/cognito/home)に移動します。 AWS 認証情報の入力を求められる場合があります。

1. **[User Pools]** (ユーザープール) を選択します。

1. リストから存在するユーザープールを 1 つ選択します。

1. **[ユーザー]** メニューを選択し、検索フィールドにユーザー名を入力します。**[Username]** (ユーザーネーム) など、一部の属性値では、大文字と小文字が区別される点に注意してください。

   また、検索フィルターを調整して、スコープを他のユーザープロパティ (**[Email]** (E メール)、**[Phone number]** (電話番号)、または **[Last name]** (姓)など) に絞り込むことで、ユーザーを検索することもできます。

## `ListUsers` API を使用したユーザーの検索
<a name="cognito-user-pools-searching-for-users-using-listusers-api"></a>

 アプリからユーザーを検索するには、Amazon Cognito の [ListUsers API](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html) を使用します。この API は以下のパラメータを使用します。
+  `AttributesToGet`: 文字列の配列です。各文字列は、検索結果でユーザーごとに返されるユーザー属性の名前です。すべての属性を取得するには、`AttributesToGet` パラメータを含めないか、またはリテラル文字列の値 `null` を使って `AttributesToGet` をリクエストしてください。
+  `Filter`: 「 ""」形式のフィルター文字列です。`AttributeName``Filter-Type``AttributeValue`フィルター文字列内の引用符は、円記号 (`\`) を使用してエスケープする必要があります。例えば、`"family_name = \"Reddy\""`。フィルター文字列が空の場合、`ListUsers` はユーザープールのすべてのユーザーを返します。
  +  `AttributeName`: 検索する属性の名前。同時に検索できる属性は 1 つのみです。
**注記**  
標準属性のみを検索できます。カスタム属性は検索できません。これはインデックスが付けられた属性のみが検索可能なためで、カスタム属性にインデックスを作成することはできません。
  +  `Filter-Type`: 完全一致を検索する場合は、`=` を使用します (`given_name = "Jon"` など)。プレフィックス (「先頭の文字」) 一致を検索する場合、`^=` を使用します (`given_name ^= "Jon"` など)。
  +  `AttributeValue`: ユーザーごとに一致する必要がある属性値です。
+  `Limit`: 返されるユーザーの最大数です。
+  `PaginationToken`: 前の検索からさらに結果を取得するためのトークンです。Amazon Cognito は 1 時間後にページ分割トークンを期限切れにします。
+  `UserPoolId`: 検索を実行する必要があるユーザープールのユーザープール ID です。

すべての検索で大文字と小文字が区別されません。検索結果は、`AttributeName` 文字列により指定された属性によって昇順に並べ替えられます。

## `ListUsers` API の使用例
<a name="cognito-user-pools-searching-for-users-listusers-api-examples"></a>

次の例はすべてのユーザーを返します。すべての属性が含まれています。

```
{
    "AttributesToGet": null,
    "Filter": "",
    "Limit": 10,
    "UserPoolId": "us-east-1_samplepool"
}
```

次の例は、電話番号の先頭が「\$11312」のすべてのユーザーを返します。また、すべての属性が含まれています。

```
{
    "AttributesToGet": null,
    "Filter": "phone_number ^= \"+1312\"",
    "Limit": 10,
    "UserPoolId": "us-east-1_samplepool"
}
```

次の例は、姓が「Reddy」の先頭 10 人のユーザーを返します。各ユーザーの検索結果には、ユーザーの名、電話番号、E メールアドレスが含まれています。ユーザープールに存在する一致ユーザーが 10 人を超える場合、レスポンスにはページ分割トークンが含まれています。

```
{
    "AttributesToGet": [
        "given_name", 
        "phone_number", 
        "email"
    ],
    "Filter": "family_name = \"Reddy\"",
    "Limit": 10,
    "UserPoolId": "us-east-1_samplepool"
}
```

前の例でページ分割トークンが返された場合、次の例は同じフィルター文字列と一致する次の 10 人のユーザーを返します。

```
{
    "AttributesToGet": [
        "given_name", 
        "phone_number", 
        "email"
    ],
    "Filter": "family_name = \"Reddy\"",
    "Limit": 10,
    "PaginationToken": "pagination_token_from_previous_search",
    "UserPoolId": "us-east-1_samplepool"
}
```

# パスワード、アカウント復旧、パスワードポリシー
<a name="managing-users-passwords"></a>

ユーザープールにサインインするすべてのユーザーには、それが[フェデレーションユーザー](cognito-terms.md#terms-federateduser)であっても、ユーザープロファイルにパスワードが割り当てられます。[ローカルユーザー](cognito-terms.md#terms-localuser)と[リンクされたユーザー](cognito-terms.md#terms-linkeduser)は、サインイン時にパスワードを指定する必要があります。フェデレーションユーザーは、ユーザープールのパスワードを使用しないで、ID プロバイダー (IdP) でサインインします。ユーザー独自のパスワードのリセット、管理者としてのパスワードのリセットや変更、パスワードの複雑さや履歴に関する[ポリシーの設定](#user-pool-settings-policies)を、ユーザーに許可できます。

Amazon Cognito はユーザーパスワードをプレーンテキストで保存しません。代わりに、各ユーザーのパスワードのハッシュをユーザー固有の Salt とともに保存します。このため、ユーザープールのユーザープロファイルから既存のパスワードを取得できません。ベストプラクティスとして、プレーンテキストのユーザーパスワードはどこにも保存しないでください。ユーザーがパスワードを忘れたときにパスワードリセットを実行します。

## パスワードのリセットと復旧
<a name="user-pool-password-reset-and-recovery"></a>

ユーザーがパスワードを忘れることがあります。その場合、パスワードのリセットをユーザー自らができるようにしておくことや、管理者がパスワードのリセットをユーザーに要求することが考えられます。Amazon Cognito ユーザープールでは、両方のモデルのオプションを用意しています。本ガイドのこのパートでは、ユーザープールの設定と、パスワードリセットの API オペレーションについて説明します。

[ForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html) API オペレーションと、マネージドログインの **[パスワードを忘れた場合]** オプションでは、ユーザーが正しいコードを持っていることを確認したときに、[ConfirmForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html) を使用して、新しいパスワードを設定できるコードを送信します。これはセルフサービスのパスワード復旧モデルです。

**未検証ユーザーの復旧**  
E メールアドレスまたは電話番号を確認したユーザーには、復旧メッセージを送信できます。ユーザーが確認済みの復旧 E メールまたは電話を持っていない場合、ユーザープール管理者はユーザーの E メールアドレスまたは電話番号を検証済みとしてマークできます。Amazon Cognito コンソールでユーザーの**ユーザー属性**を編集し、**[電話番号を検証済みとしてマークする]** または **[E メールアドレスを検証済みとしてマークする]** の横にあるチェックボックスをオンにします。または、[AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html) リクエストで `email_verified` または `phone_number_verified` を true に設定することもできます。新規ユーザーの場合は、[ResendConfirmationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html) API オペレーションからユーザーの E メールアドレスまたは電話番号に新しいコードが送信され、ユーザーはセルフサービスで確認と検証を完了できます。

**管理者としてパスワードをリセットする**  
[AdminSetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html) API オペレーションと [AdminResetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminResetUserPassword.html) API オペレーションは、管理者が開始するパスワードリセット方法です。`AdminSetUserPassword` は、一時的または永続的なパスワードを設定し、`AdminResetUserPassword` は、`ForgotPassword` と同じ方法でパスワードリセットコードをユーザーに送信します。

### パスワードのリセットと復旧を設定する
<a name="user-pool-password-reset-and-recovery-configure"></a>

Amazon Cognito は、コンソールでのユーザープールの作成時に選択した必須属性とサインインオプションに基づいて、アカウント復旧オプションを自動的に選択します。デフォルト設定は変更できます。

ユーザーが希望する MFA の方法は、パスワードの復旧に使用できる方法に影響します。希望する MFA を E メールメッセージにしたユーザーは、パスワードリセットコードを E メールで受信できません。希望する MFA を SMS メッセージにしたユーザーは、パスワードリセットコードを SMS で受信できません。

希望するパスワードリセット方法の対象にユーザーがなっていない場合、[[パスワード復旧]](#user-pool-password-reset-and-recovery) 設定で代替オプションを提供する必要があります。例えば、復旧メカニズムで E メールが最優先事項になっており、E メール MFA がユーザープールのオプションである場合があります。この場合、SMS メッセージによるアカウント復旧を 2 番目のオプションとして追加するか、管理 API オペレーションを使用してこれらのユーザーのパスワードをリセットします。

Amazon Cognito は、有効な復旧方法を持たないユーザーからのパスワードリセットリクエストに対して、`InvalidParameterException` エラーレスポンスで応答します。

**注記**  
ユーザーは、MFA とパスワードのリセットコードを、同じ E メールアドレスや電話番号で受け取ることはできません。E メールメッセージのワンタイムパスワード (OTP) を MFA に使用する場合、アカウントの復旧には SMS メッセージを使用する必要があります。SMS メッセージの OTP を MFA に使用する場合、アカウントの復旧には E メールメッセージを使用する必要があります。MFA を使用するユーザープールでは、属性として E メールアドレスがあっても電話番号がないか、電話番号があっても E メールアドレスがない場合、ユーザーはセルフサービスのパスワード復旧を完了できない可能性があります。  
この設定でユーザーがユーザープールのパスワードをリセットできない状況を防ぐには、`email` および `phone_number` [属性を必須](user-pool-settings-attributes.md)に設定します。別の方法として、ユーザーのサインアップ時や管理者によるユーザープロファイルの作成時に、これらの属性を常に収集して設定するようにプロセスを設定することもできます。ユーザーが両方の属性を持っている場合、Amazon Cognito は、ユーザーの MFA 要素*ではない*送信先にパスワードリセットコードを自動的に送信します。

次の手順では、ユーザープールでセルフサービスのアカウント復旧を設定します。

------
#### [ Configure self-service password reset (API/SDK) ]

`AccountRecoverySetting` パラメータは、ユーザーが [ForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html) API リクエストを使用するか、マネージドログインで **[パスワードを忘れた場合]** を選択したときに、パスワードの復旧に使用できる方法を設定するユーザープールパラメータです。`ForgotPassword` は、検証済みの E メールまたは検証済みの電話番号に復旧コードを送信します。回復用コードは 1 時間有効です。ユーザープールに [AccountRecoverySetting](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AccountRecoverySettingType.html) を指定すると、Amazon Cognito は、設定した優先度に基づいてコードの配信先を選択します。

`AccountRecoverySetting` を定義し、ユーザーに SMS MFA が設定されている場合、SMS をアカウント復旧メカニズムとして使用することはできません。この設定の優先度は、`1` を最も高い優先度として決定されます。Amazon Cognito は、指定された方法の 1 つだけに検証を送信します。次の `AccountRecoverySetting` 例では、アカウント復旧コードのプライマリ送信先として E メールアドレスを設定します。ユーザーに E メールアドレス属性がない場合は SMS メッセージにフォールバックします。

```
"AccountRecoverySetting": { 
   "RecoveryMechanisms": [ 
      { 
         "Name": "verified_email",
         "Priority": 1
      },
      { 
         "Name": "verified_phone_number",
         "Priority": 2
      }
   ]
}
```

この値 `admin_only` では、セルフサービスのアカウント復旧がオフになるため、ユーザーは代わりに管理者に連絡してパスワードをリセットする必要があります。他のアカウント復旧メカニズムでは `admin_only` を使用できません。次の例を参照してください。

```
"AccountRecoverySetting": { 
   "RecoveryMechanisms": [ 
      { 
         "Name": "admin_only",
         "Priority": 1
      }
   ]
}
```

`AccountRecoverySetting` を指定しない場合、Amazon Cognito は、まず検証済みの電話番号に復旧コードを送信します。ユーザーに電話番号属性がない場合は、検証済みの E メールアドレスに送信します。

`AccountRecoverySetting` の詳細については「[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)」と「[UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)」を参照してください。

------
#### [ Configure self-service password reset (console) ]

ユーザープールの **[サインイン]** メニューから、アカウント復旧オプションとパスワードリセットオプションを設定します。

**ユーザーアカウントの復旧を設定するには**

1. [Amazon Cognito コンソール](https://console.aws.amazon.com/cognito/home)にサインインします。

1. **[User Pools]** (ユーザープール) を選択します。

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

1. **[サインイン]** メニューを選択します。**[ユーザーアカウントの復旧]** を見つけて**[編集]** を選択します

1. ユーザーが自分のパスワードをリセットできるようにするには、**[セルフサービスのアカウントの復旧を有効化]** を選択します。

1. ユーザープールからユーザーに送信する、パスワードの復旧コードの配信方法を設定します。**[ユーザーアカウントの復旧メッセージの配信方法]** で、使用可能なオプションを選択します。ベストプラクティスとして、メッセージの送信にセカンダリ方法があるオプション (**利用可能な場合は E メール、それ以外の場合は SMS** など) を選択します。セカンダリ配信方法を使用すると、Amazon Cognito は MFA とは異なる方法でパスワードをリセットするようユーザーにコードを送信できます。

1. **[変更を保存]** を選択します。

------

### パスワードを忘れた場合の対応
<a name="forgot-password"></a>

ユーザーがパスワードを忘れた場合や忘れたパスワードを確認する場合のアクションの一環として、パスワードのリセットコードをリクエストしたり、入力したりする試行を所定時間内に 5～20 回許可します。正確な回数は、リクエストに関連付けられたリスクパラメータによって異なります。この対応は変更される場合があることに注意してください。

## ユーザープールのパスワードの追加要件
<a name="user-pool-settings-policies"></a>

強力で複雑なパスワードは、ユーザープールのセキュリティ上のベストプラクティスです。特にインターネットに公開されているアプリケーションでは、パスワードが弱いと、パスワードを推測してデータにアクセスしようとするシステムに対して、ユーザーの認証情報が漏洩する可能性があります。パスワードが複雑であればあるほど、推測しにくくなります。Amazon Cognito には、[脅威保護](cognito-user-pool-settings-threat-protection.md#cognito-user-pool-settings-threat-protection.title)や [AWS WAF ウェブ ACL](user-pool-waf.md#user-pool-waf.title) など、セキュリティを重視する管理者向けの追加のツールがありますが、パスワードポリシーは、ユーザーディレクトリのセキュリティにおいて中心となる要素です。

Amazon Cognito ユーザープールのローカルユーザーのパスワードは、自動的に期限切れになることはありません。ベストプラクティスとして、ユーザーパスワードのリセットの日時やメタデータを外部システムでログに記録します。パスワード利用期間の外部ログを使用すると、アプリケーションまたは Lambda トリガーは、ユーザーのパスワード利用期間を検索し、特定の期間が経過した後にリセットを要求できます。

ユーザープールは、セキュリティ標準に準拠するパスワードの最小限の複雑さを要求するように設定できます。複雑なパスワードは、長さが 8 文字以上です。大文字、数字、特殊文字を組み合わせたパスワードも複雑なパスワードに含まれます。

エッセンシャルまたはプラス機能階層では、パスワードの再利用ポリシーを設定することもできます。ユーザーによるパスワードのリセットにあたって、新しいパスワードの設定を、現在のパスワードに加えて、追加で最大 23 個の以前のパスワード (合計 24 個までのパスワード) に一致できないようにすることができます。

**ユーザープールのパスワードポリシーを設定するには**

1. ユーザープールを作成して **[セキュリティ要件を設定]** ステップに移動するか、既存のユーザープールにアクセスして **[認証方法]** メニューに移動します。

1. **[パスワードポリシー]** に移動します。

1. **[パスワードポリシーモード]** を選択します。**[Cognito のデフォルト]** では、推奨最小設定でユーザープールを設定します。**[カスタム]** パスワードポリシーを選択することもできます。

1. **[パスワードの最小文字数]** を設定します。すべてのユーザーは、この値以上の長さのパスワードでサインアップまたは作成する必要があります。この最小値は 99 まで設定できますが、ユーザーは最大 256 文字のパスワードを設定できます。

1. **[パスワードの要件]** でパスワードの複雑さのルールを設定します。各ユーザーのパスワードで少なくとも 1 つは必須とする文字タイプ (数字、特殊文字、大文字、小文字) を選択します。

   パスワードに以下の文字が最低 1 個は含まれることを要件として設定できます。Amazon Cognito がパスワードに最低限の必須文字が含まれていることを検証したら、ユーザーのパスワードには、任意のタイプで追加の文字を、パスワードの最大の長さまで含めることができます。
   + 大文字と小文字の[基本的なラテン](https://en.wikipedia.org/wiki/ISO_basic_Latin_alphabet)文字
   + 数字
   + 以下の特殊文字。

     ```
     ^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~ ` = + - 
     ```
   + 先頭でも末尾にもない空白文字。

1. **[管理者が設定した一時パスワードの有効期限]** に値を設定します。この期間が過ぎると、Amazon Cognito コンソールまたは `AdminCreateUser` で作成した新しいユーザーは、サインインして新しいパスワードを設定できなくなります。一時パスワードでサインインすると、ユーザーアカウントが期限切れになることはありません。Amazon Cognito ユーザープール API のパスワード有効期間を更新するには、[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) または [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) API リクエストで [TemporaryPasswordValidityDays](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_PasswordPolicyType.html#CognitoUserPools-Type-PasswordPolicyType-TemporaryPasswordValidityDays) の値を設定します。

1. 可能な場合は、**[以前のパスワードの使用を防止]** の値を設定します。この機能を使用するには、ユーザープールでエッセンシャルまたはプラス[機能階層](cognito-sign-in-feature-plans.md)を選択します。このパラメータの値は、ユーザーによるパスワードのリセット時に新しいパスワードの設定で一致ささせないようにする以前のパスワードの数です。

期限切れのユーザーアカウントのアクセス権をリセットするには、以下のいずれかを実行します。
+ 新しい仮パスワードを送信し、`MessageAction` が `RESEND` に設定されている [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html) API リクエストを使用して有効期限をリセットします。
+ ユーザープロファイルを削除し、新しいものを作成します。
+ [AdminResetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminResetUserPassword.html) API リクエストで新しい確認コードを生成します。

# ユーザープールへのユーザーのインポート
<a name="cognito-user-pools-import-users"></a>

既存のユーザーディレクトリまたはユーザーデータベースから Amazon Cognito にユーザーをインポートまたは移行する方法は 2 つあります。1 つは、ユーザー移行の Lambda トリガーを使用して、ユーザーが Amazon Cognito を使用して初めてサインインするときにユーザーを移行する方法です。この方法では、ユーザーが既存のパスワードを引き続き使用でき、ユーザープールへの移行後にパスワードをリセットする必要はありません。もう 1 つは、すべてのユーザーのユーザープロファイル属性を含む CSV ファイルをアップロードして、ユーザーを一括で移行する方法です。以降のセクションでは、これらの両方のアプローチについて説明します。

**その他のリソース**
+ [Amazon Cognito ユーザープールへのユーザー移行方法](https://aws.amazon.com/blogs/security/approaches-for-migrating-users-to-amazon-cognito-user-pools/)
+ [AWS re:Inforce 2023 - Amazon Cognito への移行](https://www.youtube.com/watch?v=OkDj9uXWwCc)

**Topics**
+ [ユーザー移行の Lambda トリガーを使用したユーザーのインポート](cognito-user-pools-import-using-lambda.md)
+ [CSV ファイルからユーザープールへのユーザーのインポート](cognito-user-pools-using-import-tool.md)

# ユーザー移行の Lambda トリガーを使用したユーザーのインポート
<a name="cognito-user-pools-import-using-lambda"></a>

このアプローチでは、ユーザーがアプリケーションで初めてサインインするとき、またはパスワードのリセットをリクエストするときに、既存のユーザーディレクトリからユーザープールにユーザーをシームレスに移行できます。[ユーザー移行の Lambda トリガー](user-pool-lambda-migrate-user.md) 関数をユーザープールに追加すると、サインインしようとするユーザーに関するメタデータを受け取り、外部 ID ソースからユーザープロファイル情報を返します。この Lambda トリガーの詳細 (リクエストとレスポンスのパラメータなど) とサンプルコードについては、「[ユーザー移行の Lambda トリガーのパラメータ](user-pool-lambda-migrate-user.md#cognito-user-pools-lambda-trigger-syntax-user-migration)」を参照してください。

ユーザーの移行を開始する前に、 AWS アカウントでユーザー移行の Lambda 関数を作成し、ユーザープールに Lambda 関数 をユーザー移行トリガーとして設定します。Lambda 関数の呼び出しと、独自のユーザープールのコンテキスト内でのみの実行を、Amazon Cognito サービスアカウントプリンシパルである `cognito-idp.amazonaws.com` のみに許可する認可ポリシーを Lambda 関数に追加します。詳細については、「[AWS Lambda のリソースベースのポリシーを使用する (Lambda 関数ポリシー)](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html)」を参照してください。

**サインインプロセス**

1. ユーザーがアプリケーションを開き、Amazon Cognito ユーザープール API またはマネージドログインを使用してサインインします。Amazon Cognito API でサインインを容易にする方法の詳細については、「[Amazon Cognito の認証と認可を、ウェブアプリケーションとモバイルアプリケーションに統合する](cognito-integrate-apps.md)」を参照してください。

1. アプリケーションはユーザー名とパスワードを Amazon Cognito に送信します。アプリに AWS SDK で構築したカスタムサインイン UI がある場合、アプリは `USER_PASSWORD_AUTH`または `ADMIN_USER_PASSWORD_AUTH`フローで [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) または [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) を使用する必要があります。アプリがこれらのフローのいずれかを使用する場合、SDK はパスワードをサーバーに送信します。
**注記**  
ユーザー移行トリガーを追加する前に、アプリケーションクライアントの設定で `USER_PASSWORD_AUTH` または `ADMIN_USER_PASSWORD_AUTH` フローを有効化します。デフォルトの `USER_SRP_AUTH`フロー の代わりにこれらのフローを使用する必要があります。Amazon Cognito は、他のディレクトリでのユーザーの認証を検証できるように、Lambda 関数にパスワードを送信する必要があります。SRP は、Lambda 関数からユーザーのパスワードを隠します。

1. Amazon Cognito は、送信されたユーザー名がユーザープール内のユーザー名またはエイリアスと一致するかどうかをチェックします。ユーザーの電子メールアドレス、電話番号、または優先ユーザー名を、ユーザープールのエイリアスとして設定できます。ユーザーが存在しない場合、Amazon Cognito は、ユーザー名やパスワードなどのパラメータを [ユーザー移行の Lambda トリガー](user-pool-lambda-migrate-user.md) 関数に送信します。

1. [ユーザー移行の Lambda トリガー](user-pool-lambda-migrate-user.md) 関数は、既存のユーザーディレクトリまたはユーザーデータベースを使用してユーザーをチェックまたは認証します。この関数は、Amazon Cognito がユーザープールのユーザープロファイルに保存するユーザー属性を返します。送信されたユーザー名がエイリアス属性と一致する場合にのみ、`username` パラメータを返します。ユーザーが既存のパスワードを引き続き使用できるようにする場合は、Lambda レスポンスで属性 `finalUserStatus` を `CONFIRMED` に設定します。アプリケーションは、[ユーザー移行の Lambda トリガーのパラメータ](user-pool-lambda-migrate-user.md#cognito-user-pools-lambda-trigger-syntax-user-migration) に示されるすべての `"response"` パラメータを返す必要があります。
**重要**  
リクエストイベントオブジェクト全体をユーザー移行 Lambda コードに記録しないでください。このリクエストイベントオブジェクトには、ユーザーのパスワードが含まれます。ログをサニタイズしない場合、パスワードが CloudWatch Logs に表示されます。

1. Amazon Cognito はユーザープールにユーザープロファイルを作成し、トークンをアプリケーションクライアントに返します。

1. アプリケーションはトークンの取り込みを実行し、ユーザー認証を受け入れ、リクエストされたコンテンツに進みます。

ユーザーを移行したら、`USER_SRP_AUTH` を使用してサインインします。Secure Remote Password (SRP) プロトコルは、パスワードをネットワーク上に送信しないため、移行時に使用する `USER_PASSWORD_AUTH` フローよりもセキュリティ上の利点が大きくなります。

移行中にクライアントデバイスやネットワークの問題などのエラーが発生した場合、アプリケーションは Amazon Cognito ユーザープール API からエラーレスポンスを受け取ります。この場合 Amazon Cognito はユーザープールにユーザーアカウントを作成しない可能性があります。その後、ユーザーは再度サインインを試行する必要があります。サインインが繰り返し失敗した場合、アプリケーションでパスワードを忘れた場合のフローを使用してユーザーのパスワードをリセットする必要があります。

パスワードを忘れた場合のフローでは、`UserMigration_ForgotPassword` イベントソースを使用して [ユーザー移行の Lambda トリガー](user-pool-lambda-migrate-user.md) 関数も呼び出します。ユーザーはパスワードのリセットをリクエストしてもパスワードを送信しないため、Amazon Cognito は Lambda 関数に送信するイベントにパスワードを含めません。関数では、既存のユーザーディレクトリ内のユーザーのみを検索し、ユーザープールのユーザープロファイルに追加する属性を返すことができます。関数が呼び出しを完了して Amazon Cognito に応答を返すと、ユーザープールはパスワードリセットコードを E メールまたは SMS で送信します。アプリケーションで、ユーザーに確認コードと新しいパスワードの入力を促し、その情報を [ConfirmForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html) API リクエストで Amazon Cognito に送信します。。マネージドログインでは、[パスワードを忘れた場合] フロー用の組み込みページを使用することもできます。

**その他のリソース**
+ [Amazon Cognito ユーザープールへのユーザー移行方法](https://aws.amazon.com/blogs/security/approaches-for-migrating-users-to-amazon-cognito-user-pools/)

# CSV ファイルからユーザープールへのユーザーのインポート
<a name="cognito-user-pools-using-import-tool"></a>

外部 ID ストアがあり、かつ、新しいローカルユーザーのためにユーザープールを準備する時間がある場合、カンマ区切り値 (CSV) ファイルからの一括ユーザーインポートは、Amazon Cognito ユーザープールへの移行のための手間とコストが少ないオプションになります。CSV ファイルインポートは、テンプレートファイルをダウンロードして入力し、インポートジョブのユーザープールにファイルを渡すプロセスです。CSV インポートを使用して、テストユーザーをすばやく作成できます。また、外部 ID ストアへの読み取り API リクエストをプログラムでファイルに入力したうえで、その詳細と属性を解析してファイルへの書き込みオペレーションにすることもできます。

インポートプロセスは、[**パスワード**] 以外のすべてのユーザー属性の値を設定します。セキュリティのベストプラクティスでは、パスワードはプレーンテキスト形式として使用できない必要があり、ハッシュのインポートはサポートされていないため、パスワードのインポートはサポートされません。つまり、ユーザーは最初にサインインした際にパスワードを変更する必要があります。このメソッドを使用してインポートすると、ユーザーは `RESET_REQUIRED` 状態になります。

CSV からユーザーをインポートする最も簡単な方法は、ユーザープールで [[パスワードなしのサインイン]](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless) を有効にすることです。E メールアドレスと電話番号の属性、さらにユーザープールの適切な設定により、ユーザーはインポートジョブの完了直後に E メールまたは SMS ワンタイムパスワード (OTP) を使用してサインインできます。詳細については、「[インポートされたユーザーにパスワードをリセットするように要求](#cognito-user-pools-using-import-tool-password-reset)」を参照してください。

[https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html) API リクエストで `Permanent` パラメータを `true` に設定することで、ユーザーのパスワードを設定することもできます。CSV インポートは、ユーザープール内で請求対象の月間アクティブユーザー (MAU) にはカウントされません。ただし、パスワードリセットオペレーションは MAU を発生させます。パスワードを使用する多数のユーザーをインポートしてもすぐにはアクティブにならない場合、コストを管理するには、ユーザーがサインインして `RESET_REQUIRED` チャレンジを受け取ったときに、新しいパスワードの入力を求めるようにアプリケーションを設定します。

**注記**  
各ユーザーの作成日は、ユーザーがユーザープールにインポートされた時間です。作成日は、インポートされた属性の 1 つではありません。

**ユーザーインポートジョブを作成する手順**

1.  AWS Identity and Access Management (IAM) コンソールで Amazon CloudWatch Logs ロールを作成します。

1. ユーザーインポート .csv ファイルを作成します。

1. ユーザーインポートジョブを作成し、実行します。

1. ユーザーインポート .csv ファイルをアップロードします。

1. ユーザーインポートジョブを起動し、実行します。

1. CloudWatch を使用してイベントログを確認します。

1. インポートされたユーザーがパスワードをリセットするように要求します。

**その他のリソース**
+ ユーザープール間でのユーザーアカウントのエクスポートに関する「[Cognito User Profiles Export リファレンスアーキテクチャ](https://aws.amazon.com/solutions/implementations/cognito-user-profiles-export-reference-architecture/)」

**Topics**
+ [CloudWatch Logs IAM ロールの作成](#cognito-user-pools-using-import-tool-cli-cloudwatch-iam-role)
+ [ユーザーインポート CSV ファイルの作成](#cognito-user-pools-using-import-tool-csv-header)
+ [Amazon Cognito ユーザープールのインポートジョブの作成と実行](#cognito-user-pools-creating-import-job)
+ [ユーザープールのインポート結果を CloudWatch コンソールに表示](#cognito-user-pools-using-import-tool-cloudwatch)
+ [インポートされたユーザーにパスワードをリセットするように要求](#cognito-user-pools-using-import-tool-password-reset)

## CloudWatch Logs IAM ロールの作成
<a name="cognito-user-pools-using-import-tool-cli-cloudwatch-iam-role"></a>

Amazon Cognito の CLI または API を使用している場合は、CloudWatch IAM ロールを作成する必要があります。以下の手順では、Amazon Cognito がインポートジョブの結果を CloudWatch Logs に書き込むために使用できる IAM ロールを作成する方法について説明します。

**注記**  
Amazon Cognito コンソールでインポート ジョブを作成すると、同時に IAM ロールを作成できます。**新しい IAM ロールを作成する**ことを選択すると、Amazon Cognito は適切な信頼ポリシーと IAM ポリシーをロールに自動的に適用します。

**ユーザープールインポート用の CloudWatch Logs IAM ロールを作成するには (AWS CLI、API)**

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

1. の新しい IAM ロールを作成します AWS のサービス。詳しい手順については、「*AWS Identity and Access Management ユーザーガイド*」の「[AWS のサービス用ロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)」を参照してください。

   1. **信頼されたエンティティタイプ**の**ユースケース**を選択するときは、任意のサービスを選択してください。Amazon Cognito は現在、サービスのユースケースに記載されていません。

   1. **[Add permissions]** (アクセス許可の追加) 画面で、**[Create policy]** (ポリシーの作成) を選択し、次のポリシーステートメントを挿入します。*REGION* を、 などのユーザープール AWS リージョン の に置き換えます`us-east-1`。*ACCOUNT* を AWS アカウント ID に置き換えます (`111122223333` など)。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "logs:CreateLogGroup",
                      "logs:CreateLogStream",
                      "logs:DescribeLogStreams",
                      "logs:PutLogEvents"
                  ],
                  "Resource": [
                      "arn:aws:logs:us-east-1:111122223333:log-group:/aws/cognito/*"
                  ]
              }
          ]
      }
      ```

------

1. ロールを作成したときに Amazon Cognito を信頼されたエンティティとして選択しなかったため、ロールの信頼関係を手動で編集する必要があります。IAM コンソールのナビゲーションペインから **[Roles]** (ロール) を選択し、作成した新しいロールを選択します。

1. **[信頼関係]** タブを選択します。

1. **[Edit trust policy]** (信頼ポリシーを編集) を選択します。

1. 次のポリシーステートメントを **[Edit trust policy]** (信頼ポリシーを編集) に貼り付け、既存のテキストを置き換えます。

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

****  

   ```
   {
           "Version":"2012-10-17",		 	 	 
           "Statement": [
               {
                   "Effect": "Allow",
                   "Principal": {
                       "Service": "cognito-idp.amazonaws.com"
                   },
                   "Action": "sts:AssumeRole"
               }
           ]
       }
   ```

------

1. [**ポリシーの更新**] を選択してください。

1. ロールの ARN を書き留めておきます。インポートジョブを作成するときに、ARN を指定します。

## ユーザーインポート CSV ファイルの作成
<a name="cognito-user-pools-using-import-tool-csv-header"></a>

既存のユーザーをユーザープールにインポートする前に、インポートするユーザーとその属性を含むカンマ区切り値 (CSV) ファイルを作成する必要があります。ユーザープールから、ユーザープールの属性スキーマを反映するヘッダーを含むユーザーインポートファイルを取得できます。その後、[CSV ファイルのフォーマット](#cognito-user-pools-using-import-tool-formatting-csv-file) のフォーマット要件に一致するユーザー情報を挿入できます。

### CSV ファイルヘッダーのダウンロード (コンソール)
<a name="cognito-user-pools-using-import-tool-downloading-csv-header-console"></a>

CSV ヘッダーファイルをダウンロードするには、次の手順に従います。

**CSV ファイルヘッダーをダウンロードするには**

1. [Amazon Cognito コンソール](https://console.aws.amazon.com/cognito/home)に移動します。 AWS 認証情報の入力を求められる場合があります。

1. **[User Pools]** (ユーザープール) を選択します。

1. リストから存在するユーザープールを 1 つ選択します。

1. **[ユーザー]** メニューを選択します。

1. **[Import users]** (ユーザーのインポート) セクションで、**[Create an import job]** (インポートジョブの作成) を選択します。

1. **[Upload CSV]** (CSV のアップロード) で *[template.csv]* リンクを選択し、CSV ファイルをダウンロードします。

### CSV ファイルヘッダーのダウンロード (AWS CLI)
<a name="cognito-user-pools-using-import-tool-downloading-csv-header-using-cli"></a>

正しいヘッダーのリストを取得するには、**[ユーザー]** メニューの **[ユーザーをインポート]** で、**[インポートジョブを作成]** を選択します。表示されるダイアログで `template.csv` リンクを選択し、ユーザープール属性を含むテンプレートファイルをダウンロードします。

次の CLI コマンドを実行することもできます。*USER\$1POOL\$1ID* は、ユーザーをインポートする先のユーザープールのユーザープール識別子です。

```
aws cognito-idp get-csv-header --user-pool-id "USER_POOL_ID"
```

レスポンス例:

```
{
    "CSVHeader": [
        "name",
        "given_name",
        "family_name",
        "middle_name",
        "nickname",
        "preferred_username",
        "profile",
        "picture",
        "website",
        "email",
        "email_verified",
        "gender",
        "birthdate",
        "zoneinfo",
        "locale",
        "phone_number",
        "phone_number_verified",
        "address",
        "updated_at",
        "cognito:mfa_enabled",
        "cognito:username"
    ],
    "UserPoolId": "USER_POOL_ID"
}
```

### CSV ファイルのフォーマット
<a name="cognito-user-pools-using-import-tool-formatting-csv-file"></a>

 ダウンロードしたユーザーインポート CSV ヘッダーファイルは次の文字列のようになります。ユーザープールに追加したカスタム属性も含まれます。

```
cognito:username,name,given_name,family_name,middle_name,nickname,preferred_username,profile,picture,website,email,email_verified,gender,birthdate,zoneinfo,locale,phone_number,phone_number_verified,address,updated_at,cognito:mfa_enabled
```

ユーザーのためのこのヘッダーと属性値が含まれ、次のルールに従ってフォーマットされているように CSV ファイルを編集します。

**注記**  
電話番号の適切な形式など属性値の詳細については、「[ユーザー属性の操作](user-pool-settings-attributes.md)」を参照してください。
+ ファイルの最初の行はユーザー属性の名前を含む、ダウンロードされたヘッダーの行です。
+ CSV ファイルの行の順序は重要ではありません。
+ 最初の行の後の各行に、ユーザーの属性値が含まれます。
+ ヘッダーのすべての列が存在している必要がありますが、列の値を指定する必要はありません。
+ 以下の属性は必須です:
  + **cognito:username**
  + [**email\$1verified**] または [**phone\$1number\$1verified**]
    + 自動確認された属性の少なくとも一つは、各ユーザーに対して `true` である必要があります。自動検証属性は、新しいユーザーがユーザープールに参加したときに Amazon Cognito が自動的にコードを送信する E メールアドレスまたは電話番号です。
    + ユーザープールは [**email\$1verified**] または [**phone\$1number\$1verified**] の少なくとも一つの自動確認された属性が必要です。ユーザープールに自動確認された属性が存在しない場合は、インポートジョブは開始されません。
    + ユーザープールに一つの自動確認された属性がある場合のみ、その属性はユーザーごとに確認する必要があります。たとえば、ユーザープールに自動確認された属性として [**phone\$1number**] だけがある場合、[**phone\$1number\$1verified**] 値はそれぞれのユーザーに対して `true` である必要があります。
**注記**  
ユーザーがパスワードをリセットするには、検証済みの E メールまたは電話番号が必要です。Amazon Cognito は、CSV ファイルで指定された E メールアドレスまたは電話番号にパスワードのリセットコードが含まれるメッセージを送信します。メッセージが電話番号に送信される場合は、SMS メッセージで送信されます。詳細については、「[サインアップ時に連絡先情報を検証する](signing-up-users-in-your-app.md#allowing-users-to-sign-up-and-confirm-themselves)」を参照してください。
  + [**email**] ([**email\$1verified**] が`true` の場合)
  + [**phone\$1number**] ([**phone\$1number**] が `true` の場合)
  + ユーザープールを作成する際に必須と指定した任意の属性
+ 文字列である属性値には、引用符は使用*できません*。
+ 属性値にカンマが含まれる場合、カンマの前にバックスラッシュ (\$1) を置く必要があります。これは、CSV ファイルのフィールドがカンマで区切られているためです。
+ CSV ファイルのコンテンツは、バイトオーダーマークのない UTF-8 形式にする必要があります。
+ [**cognito:username**] フィールドは必須であり、ユーザープール内で一意である必要があります。任意の Unicode 文字列を使えます。ただし、スペースまたはタブを含めることはできません。
+ **[birthdate]** (生年月日) の値がある場合、「**mm/dd/yyyy**」の形式である必要があります。たとえば、生年月日が 1985 年 2 月 1 日だとすると、**02/01/1985** にエンコードされる必要があります。
+ **cognito:mfa\$1enabled** フィールドは、ユーザープールの MFA 要件に対応している必要があります。ユーザープールで多要素認証 (MFA) を必須に設定している場合、このフィールドはすべてのユーザーに対して `true` または空白にする必要があります。MFA をオフに設定している場合、このフィールドはすべてのユーザーに対して `false` にする必要があります。空白の値により、インポートしたユーザーの MFA 対応ステータスは、ユーザープールが要求する状態に設定されます。`cognito:mfa_enabled` 値を設定したかどうかにかかわらず、有効な MFA 要素なしで、MFA を必須とするユーザープールにユーザーをインポートできます。この状態のユーザーは MFA がアクティブですが、E メール属性、電話番号属性、または TOTP を、ユーザープールの有効な MFA 要素として設定するまでサインインできません。
+ 最大行数は 16,000 文字です。
+ CSV ファイルの最大サイズは 100 MB です。
+ ファイルの最大行数 (ユーザー) は 500,000 です。この最大値にはヘッダー行は含まれません。
+ **[updated\$1at]** フィールド値はエポック時間 (秒) であると想定します。たとえば **1471453471** などです。
+ 属性値の先頭または末尾の空白は切り捨てられます。

次のリストは、カスタム属性のないユーザープールの CSV インポートファイルの例です。ユーザープールスキーマは、この例とは異なる場合があります。その場合は、ユーザープールからダウンロードした CSV テンプレートにテスト値を入力する必要があります。

```
cognito:username,name,given_name,family_name,middle_name,nickname,preferred_username,profile,picture,website,email,email_verified,gender,birthdate,zoneinfo,locale,phone_number,phone_number_verified,address,updated_at,cognito:mfa_enabled
John,,John,Doe,,,,,,,johndoe@example.com,TRUE,,02/01/1985,,,+12345550100,TRUE,123 Any Street,,FALSE
Jane,,Jane,Roe,,,,,,,janeroe@example.com,TRUE,,01/01/1985,,,+12345550199,TRUE,100 Main Street,,FALSE
```

## Amazon Cognito ユーザープールのインポートジョブの作成と実行
<a name="cognito-user-pools-creating-import-job"></a>

このセクションでは、Amazon Cognito コンソールと AWS Command Line Interface () を使用してユーザープールのインポートジョブを作成して実行する方法について説明しますAWS CLI。

**Topics**
+ [CSV ファイルからのユーザーのインポート (コンソール)](#cognito-user-pools-using-import-tool-console)
+ [ユーザーのインポート (AWS CLI)](#cognito-user-pools-using-import-tool-cli)

### CSV ファイルからのユーザーのインポート (コンソール)
<a name="cognito-user-pools-using-import-tool-console"></a>

次の手順は、CSV ファイルからユーザーをインポートする方法について説明します。

**CSV ファイルからユーザーをインポートするには (コンソール)**

1. [Amazon Cognito コンソール](https://console.aws.amazon.com/cognito/home)に移動します。 AWS 認証情報の入力を求められる場合があります。

1. **[User Pools]** (ユーザープール) を選択します。

1. リストから存在するユーザープールを 1 つ選択します。

1. **[ユーザー]** メニューを選択します。

1. **[Import users]** (ユーザーのインポート) セクションで、**[Create an import job]** (インポートジョブの作成) を選択します。

1. **[Create import job]** (インポートジョブの作成) ページで、**ジョブ名**を入力します。

1. **[Create a new IAM role]** (新しい IAM ロールの作成)、または**[Use an existing IAM role]** (既存のロールを使用する) を選択します。

   1. **[Create a new IAM role]** (新しい IAM ロールの作成) を選択した場合は、新しいロールの名前を入力します。Amazon Cognito は、正しいアクセス許可と信頼関係を持つロールを自動的に作成します。インポートジョブを作成する IAM プリンシパルに、IAM ロールを作成するアクセス許可が必要です。

   1. **[Use an existing IAM role]** (既存の IAM ロールを使用する) を選択した場合は、**[IAM role selection]** (IAM ロール選択) のリストからロールを選択します。このロールには、[CloudWatch Logs IAM ロールの作成](#cognito-user-pools-using-import-tool-cli-cloudwatch-iam-role) で説明されているアクセス許可と信頼ポリシーが必要です。

1. **[CSV をアップロード]** で **[ファイルを選択]** を選択し、準備した CSV ファイルをアタッチします。

1. **[Create job]** (ジョブの作成) を選択してジョブを送信しますが、後で開始します。**[Create and start job]** (ジョブを作成して開始) を選択してジョブを送信し、すぐに開始します。

1. ジョブを作成したが開始しなかった場合は、後で開始できます。**[ユーザー]** メニューの **[ユーザーをインポート]** で、インポートジョブを選択し、**[開始]** を選択します。 AWS SDK から [StartUserImportJob](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_StartUserImportJob.html) API リクエストを送信することもできます。

1. ユーザーインポートジョブの進行状況は、**[ユーザー]** メニューの **[ユーザーをインポート]** でモニタリングします。ジョブが成功しない場合は、**[Status]** (ステータス) 値を選択できます。詳細については、**[View the CloudWatch logs for more details]** (詳細については CloudWatch ログを表示する) を選択して、CloudWatch ログコンソールで問題がないか確認してください。

### ユーザーのインポート (AWS CLI)
<a name="cognito-user-pools-using-import-tool-cli"></a>

ユーザープールにユーザーをインポートするには、次の CLI コマンドが使用できます:
+ `create-user-import-job`
+ `get-csv-header`
+ `describe-user-import-job`
+ `list-user-import-jobs`
+ `start-user-import-job`
+ `stop-user-import-job`

これらのコマンドに関するコマンドラインオプションのリストを取得するには、`help` コマンドラインオプションを使用します。次に例を示します。

```
aws cognito-idp get-csv-header help
```

#### ユーザーインポートジョブの作成
<a name="cognito-user-pools-using-import-tool-cli-creating-user-import-job"></a>

CSV ファイルを作成した後、次の CLI コマンドを使用してユーザーインポートジョブを作成します。*[JOB\$1NAME]* にはジョブに付ける名前を指定します。*[USER\$1POOL\$1ID]* には以前と同じユーザープール ID を指定します。*[ROLE\$1ARN]* には、[CloudWatch Logs IAM ロールの作成](#cognito-user-pools-using-import-tool-cli-cloudwatch-iam-role) で次のとおり受け取ったロール ARN を指定します。

```
aws cognito-idp create-user-import-job --job-name "JOB_NAME" --user-pool-id "USER_POOL_ID" --cloud-watch-logs-role-arn "ROLE_ARN"
```

レスポンスで返される *PRE\$1SIGNED\$1URL* は 15 分間有効です。この時間以後は無効になり、新規のユーザーインポートジョブを作成して新しい URL を取得し直す必要があります。

**Example レスポンス:**  

```
{
    "UserImportJob": {
        "Status": "Created",
        "SkippedUsers": 0,
        "UserPoolId": "USER_POOL_ID",
        "ImportedUsers": 0,
        "JobName": "JOB_NAME",
        "JobId": "JOB_ID",
        "PreSignedUrl": "PRE_SIGNED_URL",
        "CloudWatchLogsRoleArn": "ROLE_ARN",
        "FailedUsers": 0,
        "CreationDate": 1470957431.965
    }
}
```

#### ユーザーインポートジョブのステータス値
<a name="cognito-user-pools-using-import-tool-cli-status-values-for-user-import-job"></a>

ユーザーインポートのコマンドに対する応答には、`Status` を示す次のような値が見つかります。
+ `Created` - ジョブが作成されましたが、開始前の状態です。
+ `Pending` - 遷移状態です。ジョブを開始しましたが、まだユーザーのインポートは開始していません。
+ `InProgress` - ジョブが開始され、ユーザーインポートが進行中です。
+ `Stopping` - ジョブを停止する処理中です。ユーザーインポートは停止していません。
+ `Stopped` - ジョブは停止中で、ユーザーインポートも停止しています。
+ `Succeeded` - ジョブは正常に完了しました。
+ `Failed` - エラーのためジョブは停止しました。
+ `Expired` - ジョブを作成しましたが、24 ～ 48 時間以内にジョブを起動しませんでした。ジョブに関連付けられたすべてのデータは削除され、ジョブを開始することはできません。

#### CSV ファイルのアップロード
<a name="cognito-user-pools-using-import-tool-cli-uploading-csv-file"></a>

以下の `curl` コマンドを使用して、ユーザーデータが含まれる CSV ファイルを `create-user-import-job` コマンドのレスポンスから取得した事前署名済みの URL にアップロードします。

```
curl -v -T "PATH_TO_CSV_FILE" -H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL"
```

このコマンドの出力から、次のようなメッセージを見つけます: `"We are completely uploaded and fine"` このメッセージは、ファイルが正常にアップロードされたことを示します。ユーザープールは、インポートジョブの実行後にインポートファイルに情報を保持しません。完了または期限切れになると、Amazon Cognito は、アップロードした CSV ファイルを削除します。

#### ユーザーインポートジョブの説明
<a name="cognito-user-pools-using-import-tool-cli-describing-user-import-job"></a>

ユーザーインポートジョブの説明を取得するには、次のコマンドを使用します。*USER\$1POOL\$1ID* はユーザープール ID です。*JOB\$1ID* は、ユーザーインポートジョブの作成時に返されたジョブ ID です。

```
aws cognito-idp describe-user-import-job --user-pool-id "USER_POOL_ID" --job-id "JOB_ID"
```

**Example レスポンス例:**  

```
{
    "UserImportJob": {
        "Status": "Created",
        "SkippedUsers": 0,
        "UserPoolId": "USER_POOL_ID",
        "ImportedUsers": 0,
        "JobName": "JOB_NAME",
        "JobId": "JOB_ID",
        "PreSignedUrl": "PRE_SIGNED_URL",
        "CloudWatchLogsRoleArn":"ROLE_ARN",
        "FailedUsers": 0,
        "CreationDate": 1470957431.965
    }
}
```

前述の例の出力では、*PRE\$1SIGNED\$1URL* は CSV のアップロード先の URL です。*ROLE\$1ARN* は、ロールの作成時に受け取った CloudWatch Logs ロール ARN です。

#### ユーザーインポートジョブを表示する
<a name="cognito-user-pools-using-import-tool-cli-listing-user-import-jobs"></a>

ユーザーインポートジョブを一覧表示するには、次のコマンドを使用します:

```
aws cognito-idp list-user-import-jobs --user-pool-id "USER_POOL_ID" --max-results 2
```

**Example レスポンス例:**  

```
{
    "UserImportJobs": [
        {
            "Status": "Created",
            "SkippedUsers": 0,
            "UserPoolId": "USER_POOL_ID",
            "ImportedUsers": 0,
            "JobName": "JOB_NAME",
            "JobId": "JOB_ID",
            "PreSignedUrl":"PRE_SIGNED_URL",
            "CloudWatchLogsRoleArn":"ROLE_ARN",
            "FailedUsers": 0,
            "CreationDate": 1470957431.965
        },
        {
            "CompletionDate": 1470954227.701,
            "StartDate": 1470954226.086,
            "Status": "Failed",
            "UserPoolId": "USER_POOL_ID",
            "ImportedUsers": 0,
            "SkippedUsers": 0,
            "JobName": "JOB_NAME",
            "CompletionMessage": "Too many users have failed or been skipped during the import.",
            "JobId": "JOB_ID",
            "PreSignedUrl":"PRE_SIGNED_URL",
            "CloudWatchLogsRoleArn":"ROLE_ARN",
            "FailedUsers": 5,
            "CreationDate": 1470953929.313
        }
    ],
    "PaginationToken": "PAGINATION_TOKEN"
}
```

ジョブは時系列で、作成が最後から最初の順で表示されます。2 番目のジョブのあとの *PAGINATION\$1TOKEN* 文字列は、このリストコマンドについて、まだ結果が残っていることを示します。残りの結果を表示するには、次のように `--pagination-token` オプションを使用します:

```
aws cognito-idp list-user-import-jobs --user-pool-id "USER_POOL_ID" --max-results 10 --pagination-token "PAGINATION_TOKEN"
```

#### ユーザーインポートジョブの開始
<a name="cognito-user-pools-using-import-tool-cli-starting-user-import-job"></a>

ユーザーインポートジョブを開始するには、次のコマンドを使用します:

```
aws cognito-idp start-user-import-job --user-pool-id "USER_POOL_ID" --job-id "JOB_ID"
```

インポートジョブは、アカウントごとに 1 つしかアクティブにできません。

**Example レスポンス例:**  

```
{
    "UserImportJob": {
        "Status": "Pending",
        "StartDate": 1470957851.483,
        "UserPoolId": "USER_POOL_ID",
        "ImportedUsers": 0,
        "SkippedUsers": 0,
        "JobName": "JOB_NAME",
        "JobId": "JOB_ID",
        "PreSignedUrl":"PRE_SIGNED_URL",
        "CloudWatchLogsRoleArn": "ROLE_ARN",
        "FailedUsers": 0,
        "CreationDate": 1470957431.965
    }
}
```

#### ユーザーインポートジョブの停止
<a name="cognito-user-pools-using-import-tool-cli-stopping-user-import-job"></a>

ユーザーインポートジョブの進行中に停止するには、次のコマンドを使用します。ジョブを停止すると、再開することはできません。

```
aws cognito-idp stop-user-import-job --user-pool-id "USER_POOL_ID" --job-id "JOB_ID"
```

**Example レスポンス例:**  

```
{
    "UserImportJob": {
        "CompletionDate": 1470958050.571,
        "StartDate": 1470958047.797,
        "Status": "Stopped",
        "UserPoolId": "USER_POOL_ID",
        "ImportedUsers": 0,
        "SkippedUsers": 0,
        "JobName": "JOB_NAME",
        "CompletionMessage": "The Import Job was stopped by the developer.",
        "JobId": "JOB_ID",
        "PreSignedUrl":"PRE_SIGNED_URL",
        "CloudWatchLogsRoleArn": "ROLE_ARN",
        "FailedUsers": 0,
        "CreationDate": 1470957972.387
    }
}
```

## ユーザープールのインポート結果を CloudWatch コンソールに表示
<a name="cognito-user-pools-using-import-tool-cloudwatch"></a>

インポートジョブの結果は、Amazon CloudWatch コンソールで表示できます。

**Topics**
+ [結果の表示](#cognito-user-pools-using-import-tool-viewing-the-results)
+ [結果の解釈](#cognito-user-pools-using-import-tool-interpreting-the-results)

### 結果の表示
<a name="cognito-user-pools-using-import-tool-viewing-the-results"></a>

次のステップでは、ユーザープールのインポートの結果を表示する方法を説明します。

**ユーザープールのインポート結果を見るには**

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

1. [**ログ**] を選択します。

1. ユーザープールのインポートジョブに使用するロググループを選択します。ロググループ名は `/aws/cognito/userpools/USER_POOL_ID/USER_POOL_NAME` の形式です。

1. 先ほど実行したユーザーインポートジョブのログを選択します。ログ名は *JOB\$1ID*/*JOB\$1NAME* の形式です。ログの結果は行番号でユーザーを示しています。ユーザーデータはログに書き込まれていません。各ユーザーに対して、次のような行が表示されます。
   + `[SUCCEEDED] Line Number 5956 - The import succeeded.`
   + `[SKIPPED] Line Number 5956 - The user already exists.`
   + `[FAILED] Line Number 5956 - The User Record does not set any of the auto verified attributes to true. (Example: email_verified to true).`

### 結果の解釈
<a name="cognito-user-pools-using-import-tool-interpreting-the-results"></a>

正常にインポートしたユーザーは、ステータスが「PasswordReset」に設定済みです。

次の場合、ユーザーはインポートされませんが、インポートジョブは継続します。
+ `true` に設定された自動検証された属性はありません。
+ ユーザーデータはスキーマに一致しません。
+ 内部エラーによりユーザーをインポートできませんでした。

以下の場合、インポートジョブは失敗します。
+ Amazon CloudWatch Logs ロールを想定することができず、正しいアクセスポリシーがない、または削除されている。
+ ユーザープールが削除されている。
+ Amazon Cognito が .csv ファイルを解析できない。

## インポートされたユーザーにパスワードをリセットするように要求
<a name="cognito-user-pools-using-import-tool-password-reset"></a>

ユーザープールがパスワードベースのサインインのみを提供している場合、ユーザーはインポート後にパスワードをリセットする必要があります。初めてサインインするときは、*任意の*パスワードを入力できます。Amazon Cognito は、アプリケーションからのサインインリクエストに対する API レスポンスで、新しいパスワードを入力するようユーザーに求めます。

ユーザープールにパスワードなしの認証要素がある場合、Amazon Cognito はインポートしたユーザーに対してデフォルトでその認証要素を使用します。ユーザーは、新しいパスワードの入力を求められず、パスワードなしの E メールまたは SMS OTP ですぐにサインインできます。また、ユーザー名パスワードやパスキーなど、他のサインイン方法を完了できるように、ユーザーにパスワードの設定を求めることもできます。ユーザーインポート後のパスワードなしのサインインには、以下の条件が適用されます。

1. 使用可能なパスワードなしのサインイン要素に対応する属性を持つユーザーをインポートする必要があります。ユーザーが E メールアドレスでサインインできる場合は、`email` 属性をインポートする必要があります。電話番号の場合は、`phone_number` 属性をインポートする必要があります。両方の場合は、いずれかの属性の値をインポートします。

1. 通常、ユーザーはパスワードをリセットする必要がある `RESET_REQUIRED` 状態でインポートされます。パスワードなしの要素でサインインできる状態でインポートされた場合、Amazon Cognito はユーザーの状態を `CONFIRMED` に設定します。

パスワードなしの認証の設定方法や、その認証フローをアプリケーションで構築する方法などの詳細については、「[Amazon Cognito ユーザープールによる認証](authentication.md)」を参照してください。

次の手順では、CSV ファイルのインポート後、カスタム構築されたログインメカニズムにおける、`RESET_REQUIRED` のローカルユーザーのユーザーエクスペリエンスについて説明します。ユーザーがマネージドログインでサインインする場合は、**[パスワードを忘れた場合]** オプションを選択し、E メールまたはテキストメッセージに記載されているコードを入力してパスワードを設定するよう指示します。

**インポートされたユーザーにパスワードをリセットするように要求**

1. アプリケーションで、ランダムなパスワードを使用した `InitiateAuth` により、現在のユーザーのサインインをサイレントに試行します。

1. `PreventUserExistenceErrors` が有効な場合、Amazon Cognito は `NotAuthorizedException` を返します。そうでない場合は `PasswordResetRequiredException` を返します。

1. アプリケーションが `ForgotPassword` API リクエストを行い、ユーザーのパスワードをリセットします。

   1. アプリケーションは `ForgotPassword` API リクエストでユーザー名を送信します。

   1. Amazon Cognito は、確認済みの E メールまたは電話番号にコードを送信します。宛先は、CSV ファイルで `email_verified` と `phone_number_verified` に指定した値によって異なります。`ForgotPassword` リクエストへのレスポンスは、コードの宛先を示します。
**注記**  
ユーザープールは、E メールまたは電話番号を確認するように設定する必要があります。詳細については、「[ユーザーアカウントのサインアップと確認](signing-up-users-in-your-app.md)」を参照してください。

   1. アプリケーションは、コードがコードの送信先を確認するメッセージをユーザーに表示し、ユーザーにコードと新しいパスワードを入力するように求めます。

   1. ユーザーがアプリでコードと新しいパスワードを入力します。

   1. アプリケーションは `ConfirmForgotPassword` API リクエストでコードと新しいパスワードを送信します。

   1. アプリケーションはユーザーをサインインにリダイレクトします。

# ユーザー属性の操作
<a name="user-pool-settings-attributes"></a>

属性は、名前、E メールアドレス、電話番号など、個々のユーザーを識別できる各種情報です。新しいユーザープールにはデフォルトの*標準属性*のセットがあります。のユーザープール定義にカスタム属性を追加することもできます AWS マネジメントコンソール。このトピックでは、それらの属性について詳しく説明し、ユーザープールの設定のヒントを示します。

ユーザーに関するすべての情報を属性に保存しないでください。例えば、使用統計やゲームスコアなどの頻繁に変化するユーザーデータは、Amazon Cognito Sync または Amazon DynamoDB などの個別のデータストアに保存してください。

ユーザー属性文字列値の入力は、サニタイズしてから、ユーザープールに送信します。提案されたユーザー属性値を分析する 1 つの方法は、[サインアップ前](user-pool-lambda-pre-sign-up.md)などの Lambda トリガーを使用することです。

**注記**  
ドキュメントや標準によっては、属性を*メンバー*と呼んでいます。

**Topics**
+ [標準属性](#cognito-user-pools-standard-attributes)
+ [ユーザー名および優先ユーザー名](#user-pool-settings-usernames)
+ [ログイン属性のカスタマイズ](#user-pool-settings-aliases)
+ [カスタム属性](#user-pool-settings-custom-attributes)
+ [属性の権限と範囲](#user-pool-settings-attribute-permissions-and-scopes)

## 標準属性
<a name="cognito-user-pools-standard-attributes"></a>

Amazon Cognito は、[[OpenID Connect の仕様]](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims) に基づいて、以下の標準属性セットをすべてのユーザーに割り当てます。標準属性値およびカスタム属性値は、デフォルトでは最大 2048 文字の任意の文字列ですが、一部の属性値には形式の制限があります。

標準属性は以下のとおりです。
+ `name`
+ `family_name`
+ `given_name`
+ `middle_name`
+ `nickname`
+ `preferred_username`
+ `profile`
+ `picture`
+ `website`
+ `gender`
+ `birthdate`
+ `zoneinfo`
+ `locale`
+ `updated_at`
+ `address`
+ `email`
+ `phone_number`
+ `sub`

`sub` を除き、標準属性はすべてのユーザーに対してデフォルトでオプションとなります。属性を必須にする場合は、ユーザープールの作成プロセスで、属性の横にある **[必須]** チェックボックスをオンにします。Amazon Cognito は、各ユーザーの `sub` 属性に一意のユーザー識別子の値を割り当てます。検証できるのは **E メールと** **phone\$1number** 属性だけです。

標準属性には、[DescribeUserPool API レスポンス](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html#API_DescribeUserPool_ResponseSyntax)の `SchemaAttributes` パラメータで表示できる事前定義されたプロパティがあります。データ型、ミュータビリティ、長さの制約など、これらの属性プロパティのカスタム値を設定できます。標準属性プロパティを変更するには、[CreateUserPool スキーマパラメータ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-Schema)でカスタム値を設定します。スキーマでは、必須の属性も設定できます。Amazon Cognito コンソールでユーザープールを作成するときに、標準属性のプロパティは変更できません。

**注記**  
 標準属性を**必須**とマークすると、ユーザーは、属性の値が指定されない限り登録することはできません。ユーザーを作成し、必須属性の値を指定しないようにするには、管理者は[AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html) API を使用できます。ユーザープールを作成した後で、属性を必須と必須ではないの間で切り替えることができません。標準属性の詳細と形式の制限

**birthdate**  
値は、YYYY-MM-DD 形式で有効な 10 文字の日付にする必要があります。

**E メール**  
ユーザーおよび管理者は、E メールアドレスの値を確認できます。  
適切な AWS アカウント アクセス許可を持つ管理者は、ユーザーの E メールアドレスを変更し、検証済みとしてマークすることもできます。[AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html) API または [admin-update-user-attributes](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/admin-update-user-attributes.html) AWS Command Line Interface (AWS CLI) コマンドを使用して、E メールアドレスを検証済みとしてマークします。このコマンドを使用すると、管理者は`email_verified` 属性を `true` に変更できます。Amazon Cognito コンソールの **[ユーザー]** メニューでユーザーを編集して、E メールアドレスを検証済みとしてマークすることもできます。  
値は、[有効な E メールアドレス文字列](https://datatracker.ietf.org/doc/html/rfc3696#section-3)とし、@ 記号とドメインを含む標準の E メール形式に従い、長さは 2,048 文字までで指定します。

**phone\$1number**  
SMS 多要素認証 (MFA) がアクティブである場合、ユーザーは電話番号を入力する必要があります。詳細については、「[ユーザープールに MFA を追加します](user-pool-settings-mfa.md)」を参照してください。  
ユーザーおよび管理者は、電話番号の値を確認できます。  
適切な AWS アカウント アクセス許可を持つ管理者は、ユーザーの電話番号を変更し、検証済みとしてマークすることもできます。[AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html) API または [admin-update-user-attributes](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/admin-update-user-attributes.html) AWS CLI コマンドを使用して、電話番号を検証済みとしてマークします。このコマンドを使用すると、管理者は`phone_number_verified` 属性を `true` に変更できます。Amazon Cognito コンソールの **[ユーザー]** メニューでユーザーを編集して、電話番号を検証済みとしてマークすることもできます。  
電話番号は次の形式に従う必要があります: 電話番号は、プラス記号 (**\$1**) から始めて国番号がその後に続く必要があります。電話番号には、プラス記号 (**\$1**) および数値のみを含めることができます。値をサービスに送信する前に、電話番号から括弧、スペース、ハイフン (**-**) などの他の文字を削除してください。例えば、米国の電話番号は **\$114325551212** の形式に従っています。

**preferred\$1username**  
`preferred_username` は、必要に応じて、またはエイリアスとして選択できますが、両方を選択することはできません。`preferred_username` がエイリアスである場合、ユーザーの確認後に [UpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html) API オペレーションをリクエストして属性値を追加できます。

**sub**  
`sub` 属性に基づいてユーザーをインデックス化して検索します。`sub` 属性は、各ユーザープール内で一意のユーザー識別子です。ユーザーは `phone_number` や `email` などの属性を変更できます。`sub` 属性には固定値が含まれています。ユーザーの検索の詳細については、「[ユーザーアカウントの管理と検索](how-to-manage-user-accounts.md)」を参照してください。

### 必須属性を表示する
<a name="how-to-edit-standard-attributes"></a>

以下の手順に従って、特定のユーザープールに必要な属性を表示します。

**注記**  
ユーザープールを作成した後は、必須の属性を変更することはできません。

**必須属性を表示する**

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

1. **[User Pools]** (ユーザープール) を選択します。

1. リストから存在するユーザープールを 1 つ選択します。

1. **[サインアップ]** メニューを選択します。

1. **[Required attributes]** (必須の属性) セクションで、ユーザープールの必須属性が表示されます。

## ユーザー名および優先ユーザー名
<a name="user-pool-settings-usernames"></a>

`username` 値は個別の属性であり、`name` 属性とは異なります。各ユーザーには、`username` 属性があります。Amazon Cognito は、フェデレーティッドユーザーのユーザー名を自動的に生成します。Amazon Cognito ディレクトリにローカルユーザーを作成するには、`username` 属性を指定する必要があります。ユーザーを作成した後で、`username` 属性の値を変更することはできません。

デベロッパーは、`preferred_username` 属性を使用して、変更可能なユーザー名をユーザーに付与できます。詳細については、「[ログイン属性のカスタマイズ](#user-pool-settings-aliases)」を参照してください。

お客様のアプリケーションでユーザー名が不要の場合は、ユーザーにユーザー名を指定するように求める必要はありません。アプリでユーザー用の一意のユーザー名をバックグラウンドで作成できます。例えば、E メールアドレスとパスワードを登録しそれを使用してサインインするようにユーザーに求める場合は便利です。詳細については、「[ログイン属性のカスタマイズ](#user-pool-settings-aliases)」を参照してください。

`username` はユーザープール内で一意である必要があります。`username` は再利用できますが、削除されて使用されなくなった場合のみです。`username` 属性に対する文字列制約については、[SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html#CognitoUserPools-SignUp-request-Username) API リクエストの *username* プロパティを参照してください。

## ログイン属性のカスタマイズ
<a name="user-pool-settings-aliases"></a>

ユーザープールを作成するときに、ユーザーが e メールアドレスまたは電話番号をユーザー名として使用してサインアップおよびサインインできるようにする場合は、*ユーザー名属性*を設定できます。また、*エイリアス属性*を設定してユーザーに選択肢を与えることもできます。サインアップするときに複数の属性を含めて、ユーザー名、優先ユーザー名、E メールアドレス、または電話番号でサインインできます。

**重要**  
ユーザープールを作成した後は、この設定を変更することはできません。

### エイリアス属性とユーザー名属性の選択方法
<a name="user-pool-settings-aliases-settings"></a>


| 要件 | エイリアス属性 | ユーザー名属性 | 
| --- |--- |--- |
| Users have multiple sign-in attributes | Yes¹ | No² | 
| Users must verify email address or phone number before they can sign in with it | Yes | No | 
| Sign up users with duplicate email addresses or phone numbers and prevent UsernameExistsException errors³ | Yes | No | 
| Can assign the same email address or phone number attribute value to more than one user | Yes⁴ | No | 

¹ 使用可能なサインイン属性は、ユーザー名、E メールアドレス、電話番号、および優先ユーザー名です。

² E メールアドレスまたは電話番号を使用してサインインできます。

³ ユーザーが登録したメールアドレスや電話番号が重複している可能性があるが、ユーザー名がない場合、ユーザープールで `UsernameExistsException` エラーが生成されません。この動作は**ユーザー名存在エラーを防ぐ**とは無関係です。これはサインイン操作には適用されますが、サインアップ操作には適用されません。

⁴ 属性を確認した最後のユーザーのみが、その属性を使用してサインインできます。

#### オプション 1: 複数のログイン属性 (エイリアス属性)
<a name="user-pool-settings-aliases-settings-option-1"></a>

ユーザーがユーザー名だけでなく別の属性でもサインインできる場合、その属性は*エイリアス*になります。ユーザーがサインインフォームのユーザー名フィールドでユーザー名と他の属性値から選択できるようにする場合は、エイリアスを設定します。`username` 属性は、ユーザーが変更できない固定値です。属性をエイリアスとしてマーキングすると、ユーザーはユーザー名の代わりにその属性を使用してサインインできます。E メールアドレス、電話番号、および任意ユーザー名属性は、エイリアスレコードとしてマーキングできます。例えば、E メールと電話をユーザープールのエイリアスとして選択すると、そのユーザープールのユーザーは、自分のユーザー名、E メールアドレス、または電話番号とパスワードを使ってサインインできます。

エイリアス属性を選択するには、ユーザープールを作成するときに **[User name]** (ユーザー名) と 1 つ以上の追加のサインインオプションを選択します。

**注記**  
大文字と小文字を区別しないようにユーザープールを設定すると、ユーザーは小文字または大文字を使用してサインアップ、またはエイリアスを使用してサインインできるようになります。詳細については、*Amazon Cognito API リファレンス*の「[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)」を参照してください。

エイリアスとして E メールアドレスを選択した場合、Amazon Cognito は有効な E メールアドレス形式と一致するユーザー名を受け入れません。同様に、電話番号をエイリアスとして選択した場合、Amazon Cognito は、有効な電話番号形式に一致するユーザープールのユーザー名を受け入れません。

**注記**  
エイリアス値は、ユーザープール内で一意にする必要があります。エイリアスがメールアドレスまたは電話番号に設定される場合、指定される値は 1 つのアカウントのみで検証状態になります。サインアップ時に E メールアドレスまたは電話番号をエイリアス値として指定し、別のユーザーがそのエイリアス値を既に使用している場合、登録は成功します。ただし、ユーザーがこの E メール (または電話番号) を持つアカウントを確認して有効なコードを入力しようとする場合、Amazon Cognito は、`AliasExistsException` エラーを返します。エラーは、この E メールアドレス (または電話番号) を持つアカウントが既に存在していることを示します。この時点で、ユーザーは新しいアカウントの作成を中止して、古いアカウントのパスワードのリセットを試すことができます。ユーザーが新しいアカウントの作成を続行する場合は、アプリは `forceAliasCreation` オプションを使用して `ConfirmSignUp` API を呼び出す必要があります。`forceAliasCreation` を使用する `ConfirmSignUp` は、エイリアスを前のアカウントから新しく作成されたアカウントに移動し、前のアカウントで未確認の属性をマークします。

ユーザーが電話番号および E メールアドレスを確認した後、電話番号および E メールアドレスのみがユーザーのアクティブエイリアスになります。エイリアスとしてこれらを使用する場合は、E メールアドレスと電話番号の自動確認を選択することをお勧めします。

ユーザーがサインアップするときに、E メールアドレスおよび電話番号の属性の `UsernameExistsException` エラーを防ぐために、エイリアス属性を選択します。

`preferred_username` 属性をアクティブにして、`username` 属性値が変更されていないときに、ユーザーがサインインに使用するユーザー名を変更できるようにします。このユーザーエクスペリエンスをセットアップする場合は、新しい `username` 値を `preferred_username` として送信し、エイリアスとして `preferred_username` を選択します。こうすることで、ユーザーは入力した新しい値でサインインできます。`preferred_username` がエイリアスとして選択された場合、ユーザーはアカウントが確認されている場合にのみ、値を指定できます。登録時にはこの値は指定できません。

ユーザーがユーザー名を使用してサインアップする場合、ユーザーが次の 1 つ以上のエイリアスを使用してサインインできるかどうかを選択できます。
+ 検証済みの E メールアドレス
+ 検証済みの電話番号
+ 優先ユーザー名

これらのエイリアスはユーザーがサインアップした後に変更できます。

**重要**  
ユーザープールがエイリアスによるサインインをサポートしている場合、ユーザーを認可または検索するときに、サインイン属性のいずれかを使用してユーザーを特定することは避けてください。固定値のユーザー識別子 `sub` は、ユーザーのアイデンティティを示す唯一の一貫した指標です。

エイリアスを使用してサインインできるように、ユーザープールを作成する場合は、次の手順を含めます。

------
#### [ Phone number or email address (console) ]

ユーザープールの作成時に、E メールアドレスと電話番号をエイリアス属性として設定する必要があります。

**Amazon Cognito コンソールでユーザー名エイリアスを使用してユーザープールを作成するには**

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

1. **[開始方法]** ボタンまたは **[ユーザープールを作成]** ボタンを使用して、新しいユーザープールを作成します。

1. **[アプリケーションを定義]** でアプリケーション設定を選択します。

1. **[サインイン識別子のオプション]** の **[オプションを設定]** で、**[ユーザー名]**の横のチェックボックスをオンにします。さらに他のオプション (**[E メール]** と **[電話番号]**) を 1 つ以上選択します。

1. エイリアス属性を **[サインアップのための必須属性]** として選択します。Amazon Cognito は、マネージドログインのサインアップフォームで必須属性の値を指定するよう新規ユーザーに求めます。

1. マネージドログインのサインイン後に、**[リターン URL を追加]** で、アプリケーションからリダイレクトするためのコールバック URL を設定します。

1. **[作成]** を選択します。

------
#### [ Phone number or email address (API/SDK) ]

[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) API オペレーションを使用して新しいユーザープールを作成します。次のように `AliasAttributes` パラメータを設定します。電話番号エイリアスのみが必要な場合は、`email` エントリを削除できます。E メールアドレスエイリアスのみが必要な場合は、`phone_number` エントリを削除できます。

```
"AliasAttributes": [
   "email",
   "phone_number"
],
```

------
#### [ Preferred username (API/SDK) ]

Amazon Cognito コンソールは、エイリアスとして `preferred_username` を使用せずに、ユーザープールを作成します。エイリアスを使用してユーザープールを作成するには、 AWS SDK `preferred_username` で [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) API リクエストを使用してユーザープールを設定します。サインアップ時に任意のユーザー名属性を作成できるようにするには、`preferred_username` を必須属性として設定します。Amazon Cognito は、マネージドログインのサインアップフォームで必須属性の値を指定するよう新規ユーザーに求めます。Amazon Cognito コンソールでは `preferred_username` を必須属性として設定することは*可能*ですが、エイリアスとして使用することはできません。

**エイリアスとして設定する**  
次に示すように、`CreateUserPool` リクエストの `AliasAttributes` パラメータで、`preferred_username` をエイリアスとして設定します。エイリアス属性として使用しない値は、リストから削除します。

```
"AliasAttributes": [
   "email",
   "phone_number",
   "preferred_username"
],
```

**必須として設定する**  
Amazon Cognito は、マネージドログインのサインアップフォームで必須属性の値を指定するよう新規ユーザーに求めます。[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) リクエストの `SchemaAttributes` パラメータで、`preferred_username` を必須として設定します。

任意のユーザー名を必須属性として設定するには、次に示すように設定します。次の例では、`preferred_username` のデフォルトスキーマを変更して、必須として設定しています。`AttributeDataType` (デフォルトは `string`) や `StringAttributeConstraints` (デフォルトは 1～99 文字) など、他のスキーマパラメータは、デフォルト値を使用します。

```
"Schema": [
   {
      "Name": "preferred_username",
      "Required": true
   }
]
```

------

#### オプション 2: サインイン属性 (ユーザー名属性) としての E メールアドレスまたは電話番号
<a name="user-pool-settings-aliases-settings-option-2"></a>

ユーザー名として E メールアドレスまたは電話番号でユーザーがサインアップする場合、E メールアドレスのみ、電話番号のみ、またはいずれか一方でもサインアップできるようにするかを選択することができます。

ユーザー名属性を選択するには、ユーザープールの作成時に、**[ユーザー名]** をサインインオプションとして選択しないでください。

E メールまたは電話番号は一意である必要があり、別のユーザーによって既に使用されていてはなりません。これを検証する必要はありません。ユーザーが E メールアドレスまたは電話番号を使用してサインアップした後、ユーザーは同じ E メールアドレスまたは電話番号を使用して新しいアカウントを作成することはできません。ユーザーは既存のアカウントを (必要に応じてパスワードをリセットして) 再利用できるだけです。ただし、ユーザーは E メールアドレスまたは電話番号を新しい E メールアドレスまたは電話番号に変更できます。E メールアドレスまたは電話番号が既に使用中ではない場合は、それが新しいユーザー名となります。

E メールアドレスと電話番号の両方をユーザー名属性として選択した場合、ユーザーは両方の属性値を指定できますが、サインインに使用できるのはいずれか一方のみです。サインインユーザー名は、[SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html#CognitoUserPools-SignUp-request-Username) の `Username` パラメータで渡した値に基づいて決まります。

**注記**  
ユーザーが E メールアドレスをユーザー名として使用してサインアップした場合、ユーザー名を別の E メールアドレスに変更できますが、電話番号に変更することはできません。電話番号でサインアップする場合は、ユーザー名を別の電話番号を変更できますが、E メールアドレスに変更することはできません。

次のステップを使用して、ユーザープール作成のプロセス中に、E メールアドレスまたは電話番号を使用したサインアップおよびサインインをセットアップします。

------
#### [ Username attributes (console) ]

次の手順では、E メールアドレスまたは電話番号をユーザー名属性とするユーザープールを作成します。Amazon Cognito コンソールでのユーザー名属性のプロセスの違いは、**ユーザー名**をサインイン属性として設定しないことです。

**Amazon Cognito コンソールでユーザー名属性を持つユーザープールを作成するには**

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

1. **[開始方法]** ボタンまたは **[ユーザープールを作成]** ボタンを使用して、新しいユーザープールを作成します。

1. **[アプリケーションを定義]** でアプリケーション設定を選択します。

1. **[サインイン識別子のオプション]** の **[オプションを設定]** で、ユーザー名属性として **[E メール]**、**[電話番号]**、または両方を選択します。**[ユーザー名]** は、オフのままにします。

1. ベストプラクティスとして、ユーザー名属性を **[サインアップのための必須属性]** として選択します。Amazon Cognito は、マネージドログインのサインアップフォームで必須属性の値を指定するよう新規ユーザーに求めます。ユーザー名属性を必須として設定しない場合、Amazon Cognito は新規ユーザーに属性値の入力を求めません。この場合は、ユーザーがサインインする前に、各ユーザーの E メールアドレスまたは電話番号を収集して送信するようにアプリケーションを設定する必要があります。

1. マネージドログインのサインイン後に、**[リターン URL を追加]** で、アプリケーションからリダイレクトするためのコールバック URL を設定します。

1. **[作成]** を選択します。

------
#### [ Username attributes (API/SDK) ]

[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) リクエストで、次に示すように `UsernameAttributes` パラメータを設定します。E メールアドレスのみをユーザー名としてサインインすることを許可するには、このリストで `email` のみを指定します。電話番号のみをユーザー名としてサインインすることを許可するには、`phone_number` のみを指定します。このパラメータは、サインインオプションとしてのユーザー名をオーバーライドします。

```
"UsernameAttributes": [ 
   "email",
   "phone_number"
],
```

------

ユーザー名属性を設定すると、[SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html) API リクエストにより、`username` パラメータで E メールアドレスまたは電話番号を渡すことができます。ユーザー名属性を使用したコード `SignUp` API オペレーションの動作は、以下のとおりです。
+ `username` 文字列が有効な E メールアドレス形式 (例: `user@example.com`) の場合、ユーザープールはユーザーの `email` 属性の値として、自動的に `username` を入力します。
+ `username` 文字列が有効な電話番号形式 (例: `+12065551212`) の場合、ユーザープールはユーザーの `phone_number` 属性の値として、自動的に `username` を入力します。
+ `username` 文字列形式が E メールアドレスまたは電話番号の形式ではない場合は、`SignUp` API から例外が返されます。
+ `username` 文字列に含まれている E メールアドレスまたは電話番号が既に使用されている場合、`SignUp` API によって例外が返されます。
+ `SignUp` API は、`username` 属性にユーザーの [UUID](cognito-terms.md#terms-uuid) を入力します。この UUID は、ユーザー ID トークン内の `sub` クレームと同じ値です。

[ListUsers](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html) オペレーションを除くすべての API で、E メールアドレスまたは電話番号をユーザー名の代わりに使用できます。`ListUsers` API リクエストでは、`email` または `phone_number` の `Filter` を指定できます。`username` でフィルタリングする場合は、E メールアドレスや電話番号ではなく、UUID ユーザー名を指定する必要があります。

## カスタム属性
<a name="user-pool-settings-custom-attributes"></a>

ユーザープールには、カスタム属性を最大 50 まで追加できます。カスタム属性の最小長または最大長を指定できます。ただし、すべてのカスタム属性の最大長は 2048 文字以下にする必要があります。カスタム属性の名前は、[SchemaAttributeType](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SchemaAttributeType.html) の `Name` パラメータで使用した正規表現パターンと一致する必要があります。

**各カスタム属性には以下の特徴があります。**
+ 文字列、数値、ブール値、または `DateTime` オブジェクトとして定義できます。Amazon Cognito は ID トークンにカスタム属性値を文字列としてのみ書き込みます。
**注記**  
Amazon Cognito コンソールでは、文字列と数値をデータ型とするカスタム属性のみを追加できます。ブール値や `DateTime` 属性など、他のデータ型のオプションは、[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) および [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) API リクエストの `SchemaAttributes` プロパティでのみ使用できます。
+ ユーザーが属性の値を提供することを要求することはできません。
+ ユーザープールに追加した後で、削除または変更することはできません。
+ 属性名の文字長は、Amazon Cognito が受け入れる制限内です。詳細については、「[Amazon Cognito のクォータ](quotas.md)」を参照してください。
+ *変更可能*または*イミュータブル*とすることができます。ユーザーを作成するときに、イミュータブル属性に値を書き込むことができます。アプリクライアントがその属性に対する書き込み権限を持っている場合、変更可能な属性の値を変更できます。詳細については「[属性の権限と範囲](#user-pool-settings-attribute-permissions-and-scopes)」を参照してください。

**注記**  
コードおよび [ロールベースアクセスコントロールの使用](role-based-access-control.md) のルールの設定で、カスタム属性は標準属性と区別するために、`custom:` プレフィックスを必要とします。

また、[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) の `SchemaAttributes` プロパティで、ユーザープールを作成する際に、*開発者属性*を追加することもできます。開発者属性には `dev:` プレフィックスがあります。ユーザーのデベロッパー属性は、 AWS 認証情報でのみ変更できます。開発者属性はレガシー機能であり、Amazon Cognito がアプリケーションクライアントの読み取り/書き込み権限と置き換えました。

以下の手順を使用して、新しくカスタム属性を作成します。

**コンソールを使用してカスタム属性を追加する**

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

1. **[User Pools]** (ユーザープール) を選択します。

1. リストから存在するユーザープールを 1 つ選択します。

1. **[サインアップ]** メニューを選択し、**[カスタム属性]** セクションで **[カスタム属性を追加]** を選択します。

1. **[Add custom attributes]** (カスタム属性を追加する) のページで、新しい属性に関する以下の詳細情報を入力します。
   + **名前**を入力します。
   + [**Type**] (タイプ) (**文字列**または**数値**) を選択します。
   + **最小**文字列の長さまたは数値を入力します。
   + **最大**文字列の長さまたは数値を入力します。
   + ユーザーが初期値を設定した後で、カスタム属性の値を変更する権限をユーザーに付与する場合は、**[Mutable]** (変更可能) を選択します。

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

## 属性の権限と範囲
<a name="user-pool-settings-attribute-permissions-and-scopes"></a>

各アプリクライアントで、各ユーザー属性に読み取りと書き込み権限を設定できます。これにより、ユーザー用に保存する各属性の読み取りおよび変更に必要なアプリによるアクセスを制御できます。例えば、ユーザーが有料サービスを利用しているお客様であるかどうかを示すカスタム属性があるとします。アプリでこの属性は表示できますが、直接変更することはできません。代わりに、管理ツールまたはバックグラウンドプロセスを使用してこの属性を更新します。ユーザー属性の権限は、Amazon Cognito コンソール、Amazon Cognito API、または AWS CLIから設定できます。デフォルトでは、新しいカスタム属性を利用する前に、読み取り/書き込みの許可を設定する必要があります。デフォルトでは、アプリケーションクライアントを作成すると、すべての標準属性とカスタム属性に対する読み取り/書き込み許可がアプリケーションに付与されます。アプリケーションが必要とする情報量のみに制限するには、アプリケーションクライアント設定の属性に特定のアクセス権限を割り当てます。

ベストプラクティスとして、アプリケーションクライアントを作成するときに属性の読み取り/書き込みアクセス許可を指定します。アプリケーションのオペレーションに必要な最小限のユーザー属性セットへのアクセスをアプリケーションクライアントに付与します。

**注記**  
デフォルト以外のアプリケーションクライアント権限を設定した場合、[UserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolClient.html) は、`ReadAttributes` と`WriteAttributes` のみを返します。

**属性権限を更新するには (AWS マネジメントコンソール)**

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

1. **[User Pools]** (ユーザープール) を選択します。

1. リストから存在するユーザープールを 1 つ選択します。

1. **[アプリケーションクライアント]** メニューを選択し、リストからアプリケーションクライアントを選択します。

1. **[属性権限]** タブで、**[編集]** を選択します。

1. **[Edit attribute read and write permissions]** (属性の読み込みおよび書き込みアクセス権限を編集) ページで、読み取りおよび書き込み権限を設定し、**[Save changes]** (変更の保存) を選択します。

カスタム属性を使用して、アプリクライアントごとに以上の手順を繰り返します。

アプリケーションごとに、属性を読み取り可能または書き込み可能とマークできます。これは、標準属性とカスタム属性の両方に当てはまります。アプリは、読み取り可能としてマークした属性の値を取得したり、書き込み可能としてマークした属性の値を設定または変更したりできます。書き込み権限のない属性の値をアプリが設定しようとすると、Amazon Cognito が `NotAuthorizedException` を返します。[GetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html) リクエストにはアプリケーションクライアントクレーム付きのアクセストークンが含まれます。Amazon Cognito は、アプリケーションクライアントが読み取ることができる属性の値のみを返します。アプリからのユーザーの ID トークンには、読み取り可能な属性に対応するクレームのみが含まれます。すべてのアプリケーションクライアントは、ユーザープールの必須属性を書き込むことができます。Amazon Cognito ユーザープール API リクエストで属性の値を設定できるのは、まだ値が設定されていない必須属性の値も指定する場合のみに限られます。

カスタム属性の読み取り書き込みアクセス許可にはそれぞれ異なる機能があります。ユーザープールの変更可能な属性または変更不可能な属性として作成でき、どのアプリクライアントでも読み取りまたは書き込み属性として設定できます。

変更不可能なカスタム属性は、ユーザー作成時に 1 回だけ更新できます。変更不可能な属性には以下のメソッドを入力できます。
+ `SignUp`: ユーザーは、変更不可能なカスタム属性への書き込みアクセス許可を持つアプリクライアントにサインアップします。その属性の値を提供します。
+ サードパーティ IdP でのサインイン: ユーザーは、変更不可能なカスタム属性への書き込みアクセス許可を持つアプリクライアントにサインインします。IdP のユーザープール設定には、提供されたクレームを変更不可能な属性にマップするルールがあります。これは可能ですが、ユーザーがサインインできるのは一度だけであるため、実用的ではありません。最初のサインイン試行の後に 2 度目以降のサインイン試行がなされると、現在書き込み不可の属性へのマッピングルールにより、Amazon Cognito は、その試行を拒否します。
+ `AdminCreateUser`: 変更不可能な属性の値を指定します。

### スコープを使用した属性アクセス許可
<a name="user-pool-settings-attribute-scope-based-permissions"></a>

 AWS SDK または CDK、REST API、または で設定したユーザープールでは AWS CLI、OIDC スコープ を使用してアプリケーションクライアントの読み取りまたは書き込みアクセスを設定できます`oidc:profile`。`oidc:profile` は、次の標準属性への読み取り/書き込みアクセスを許可します。
+ `name`
+ `family_name`
+ `given_name`
+ `middle_name`
+ `nickname`
+ `preferred_username`
+ `profile`
+ `picture`
+ `website`
+ `gender`
+ `birthdate`
+ `zoneinfo`
+ `locale`

このリストは、[OIDC 仕様のセクション 2.4](https://openid.net/specs/openid-connect-basic-1_0.html#Scopes) で定義されているように、OIDC 標準属性から `email`、`phone_number`、`sub`、`address` を除外したものです。アプリケーションクライアントに割り当てることができるスコープについては、「[スコープ、M2M、リソースサーバー](cognito-user-pools-define-resource-servers.md)」を参照してください。

`oidc:profile` スコープ内の属性に書き込むようにアプリケーションクライアントを設定するには、[CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html) API リクエストまたは [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html) API リクエストで、[WriteAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html#CognitoUserPools-CreateUserPoolClient-request-WriteAttributes) の値を `oidc:profile` に設定します。他の属性も変更することをアプリケーションに許可する場合は、その属性も設定します。同様に、これらの属性への読み取りアクセスを許可するには、`oidc:profile` を [ReadAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html#CognitoUserPools-CreateUserPoolClient-request-ReadAttributes) の値に追加します。

ユーザープールを作成した後、属性の権限と範囲を変更できます。