AWS Cognitoでのユーザープールの設定方法

# はじめに
SESエンジニアをしております。masahiroと申します。
本記事では、AWSの認証サービスCognitoでの接続方法について記述しております。

# AWS コンソールでCognitoを開く
AWSマネージメントコンドールにログイン出来たら、画面左上の検索欄で「cognito」を検索してください。
![スクリーンショット 2023-05-19 14.01.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3424828/cc28dcab-8b7a-df6f-7b40-2ebc8f819f8f.png)

cognitoを選択後に、cognitoのメインページでユーザープールの作成を選択してください。
![スクリーンショット 2023-05-19 14.02.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3424828/96b7a0d9-80ad-c0ef-f754-211f91d016f4.png)

# 認証プロバイダーの設定

選択すると、認証プロバイダーを聞かれるので、下記のように設定してください。
![スクリーンショット 2023-05-19 14.04.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3424828/029c2f6f-bc2d-1bd9-e923-9d3bca9fd8c2.png)

:::note
今回はフェデレーテッドアイデンティティプロバイダーを使用しない構成です。
使用する場合は適宜変更してください。
:::
フェデレーテッドアイデンティティプロバイダーとは、ソーシャルメディアのアカウントを利用した、ソーシャルログインを実装する機能です。
今回は使用しないため、チェックを外します。

# セキュリティ要件の設定
パスワードポリシーは、今回デフォルト設定です。
自身の定義でカスタムされる方は適宜変更してください。
![スクリーンショット 2023-05-19 14.08.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3424828/fdb228c6-4725-8f49-c729-ee1b844e9088.png)

多要素認証の設定をします。
これは、サインイン時のMFA認証の設定です。

:::note
今回はSMSメッセージでの、認証機能で設定します。
:::

![スクリーンショット 2023-05-19 14.08.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3424828/c44cfede-e540-4ab7-ad17-597ac822f90d.png)

アカウント復旧に関する設定をします。

:::note
今回の復旧設定はEメールを利用した復旧方法にします。
:::

![スクリーンショット 2023-05-19 14.08.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3424828/0d3d9736-b05a-9d1f-c77b-9ba1fdaa8f96.png)

# サインアップ時の設定

セルフサービスのサインアップは、画面上から新規ユーザーを登録したい場合は有効化にします。

:::note
今回は有効化にすることで、画面上からの登録を許可します。
:::
![スクリーンショット 2023-05-19 14.15.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3424828/1f149a0c-cba0-a4cc-6dea-e3706c403ea7.png)

属性検証とユーザーアカウントの確認は、サインアップ時の検証メッセージの送信方法を設定します。
検証には、SMSやメールアドレス、両方を使用するなどの設定が可能です。

:::note
今回はメールアドレスでの検証を選択します。
:::
![スクリーンショット 2023-05-19 16.02.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3424828/b47a1798-5a4c-9dfd-609d-4ca1c6195e81.png)

必須の属性として、必要な属性値を選択します。

:::note warn
usernameとpasswordは必須条件なので、属性値とは異なります。
:::

:::note
今回はMFA認証とサインアップ時のメールアドレスでの検証があるので、
必須属性として、phone_numberと、emailが自動的に設定されています。
:::

カスタム属性は今回は設定しておりません。
![スクリーンショット 2023-05-19 16.10.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3424828/9ce902a7-0d62-3ad4-96d4-a3444cb2318d.png)


# メッセージ配信設定

メールの設定は、今回は開発時に使用するだけなので、AWS SESでのメール設定は適応しません。
SESを設定すると、上限なく送信などが可能になる本番使用のワークロードへと切り替わります。
「cognitoからの送信」で設定する場合では、送信元などは変更せずに返信先を自身のアドレスに変更してください。

:::note
「返信先Eメールアドレス」が検証メールなどが送られるメールアドレスになります。
:::

![スクリーンショット 2023-05-19 16.17.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3424828/f2e97762-b7b6-d205-30bf-920cbb557978.png)

SMSの設定では、初回の作成段階では機能しません。
適切なロールのポリシーを設定して、cognitoに紐づけてください。
:::note
MFA認証の設定時にロールは定義するので、一旦任意のものを作成してください。
:::
![スクリーンショット 2023-05-19 16.22.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3424828/9ba39c5d-83a2-2188-3162-61a6be071075.png)

:::note warn
MFA認証にはAWS SNSを使用します。
こちらは別途、MFA認証を実装する際に設定してください。
:::

MFA認証の設定方法は下記の記事に記載しております。
サインイン機能作成時に参照してみてください。
[【Go】AwsCognitoを利用した認証機能を作ってみた(後編)](https://qiita.com/MasahiroYoshiichi/items/502a83e1de5dd7d165f6)


# アプリケーションとの統合

アプリケーションと統合する時の設定は下記のようにしてください。

![スクリーンショット 2023-05-19 21.34.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3424828/17720377-2882-69f2-e0ae-2c86f801e499.png)

次はアプリケーションのクライアント設定を行います。
今回はブラウザアプリケーションでの認証を考えているので下記のように設定してください。

![スクリーンショット 2023-05-19 21.38.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3424828/568ac59d-2e2b-4be0-1940-dbf9f6eeea04.png)

:::note
高度な設定の中で認証フローを変更します。
:::

デフォルトではSRPの設定が選択されていますが、今回はユーザー名とパスワードでの認証を実装します。
下記のように設定してください。

![スクリーンショット 2023-05-19 21.41.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3424828/cad354f3-78f2-5493-77de-0c5d717cf741.png)

:::note warn
各セッションやトークンの有効期限は適宜変更してください。
:::

最後に各項目の設定内容確認ページが表示されます。
問題なければ、ユーザープールを作成してください。
![スクリーンショット 2023-05-19 21.43.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3424828/8764599d-c9c6-78f5-8fbf-a65dbf6c57ce.png)


# ユーザープールの設定完了
ユーザープールの設定はこれで完了です。

:::note
認証機能を使用する際に必要な設定情報は下記の３つになります。
・aws_region
・user_pool_id
・client_id"
:::

これらは、AWSマネージメントコンソールですぐに確認できると思うので、認証時に確認して設定してください。

# おわりに
以上でAWSマネージメントコンソール上での、ユーザープールの設定について説明させていただきました。
Go言語で実際に認証機能を実装するための手順を下記の記事に記載しております。
興味があればご覧になってください。

[【Go】AwsCognitoを利用した認証機能を作ってみた(前編)](https://qiita.com/MasahiroYoshiichi/items/7d696ece0bda7998ec9f)