

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

# パスワード、アカウント復旧、パスワードポリシー
<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 リクエストで新しい確認コードを生成します。