概要
今まではServerless FrameworkやCloudFront周りのネタでしたが、今回からはしばらくCognito関連のお話。
今回はユーザープール&IDプールによる、認証基盤作成について。
※ちなみに次回以降は、下記ネタの予定。
- Amplify/Authを利用した認証処理
- 認証処理のLambdaトリガー
今回触れること
- ユーザープール作成
- IDプール作成
Cognitoの認証基盤について
以下の2つがあります。
プールの種類 | 説明 | リソースへのアクセス |
---|---|---|
ユーザープール | Cognitoのベースで、ID・Eメール・パスワードなどによるユーザー認証関連の基盤を提供する。 | Cognito認証の有無 |
IDプール | ユーザープールを使用してサインインしたユーザーに、設定したロールを割り当てる。 | ロールにアクセス権限があるかどうか |
今回は主に「ユーザープール」について記載します。
手順0 ユーザープールの作成
手順1 ユーザープール名の設定
- プール名:作成するユーザープール名を入力すればOKです。
- 作成方法:下記2つから選択できます。
- デフォルトを確認する:全項目にCognitoのデフォルト値が設定されます。(作成確定前に変更可能です)
- ステップに従って作成する:順番に1項目ずつ設定を行います。(自分でカスタマイズしたい場合はこちら)
※この記事は「ステップに従って作成する」を前提に記載してます。
手順2 サインイン方法&属性の指定
サインイン方法、およびサインアップに必要なユーザー属性を設定します。
※これらは一度ユーザープールを作成すると、あとで変更できないので注意!
サインイン方法
大項目 | オプション項目 | 説明 | 備考 |
---|---|---|---|
ユーザー名 | ユーザー名(username)でログインする | オプションは複数選択可 | |
Eメールサインインも許可 | メールアドレス(email)でもログイン可能にする | ||
電話番号サインインも許可 | 電話番号(phone_number)でもログイン可能にする | ||
任意ユーザー名 | ユーザーが許可した属性(≒カスタムユーザー名)でもログイン可能にする | ユーザー名を変更したい場合に選択。 (Cognito標準のユーザー名(user_name)は変更不可なので) |
|
Eメールおよび電話番号 | Eメールまたは電話番号でログインする | オプションは1つのみ選択可能 | |
Eメールを許可 | メールアドレスでのみログイン可能にする | ||
電話番号を許可 | 電話番号でのみログイン可能にする | ||
両方を許可 | メールアドレス/電話番号のどちらでもでもログイン可能にする | ユーザー名が選択可能 |
ユーザー属性(attributes)
サインアップする際に、入力を必須とするユーザー属性を指定します。(どんな属性があるかは、画像を参照)
チェックを付けた属性は「入力必須」となり、サインアップ時に値を指定しないと、サインアップ不可となります。
- チェックを付けてない項目は「使用不可」ではなく「任意項目」になるだけなので、サインアップ時に値を指定すれば、問題なく使用&登録可能です。
- 「email」や「phone_number」は、後述する多要素認証でEメールやSMSでコードを送る場合、必須になります。
カスタム属性について
属性を自分で追加することも可能です。
「カスタム属性を追加する」をクリックすると、自分でカスタム属性を設定可能です。(下記項目を指定できます)
項目 | 説明 | 備考 |
---|---|---|
タイプ | 文字型(string)/数値型(number) | |
名前 | カスタム属性の名前です。 | 作成後、自動で「custom:」が先頭に付与されます(※) |
範囲 | 文字列の長さの範囲(文字型)/値の範囲(数値型) | 「タイプ」により異なる |
変更可能 | 値を変更できるかどうか |
※Amplify/AuthやAWS-SDKのAPIで指定する場合、下記の様にしないとエラーになります。
attributes = { // これはNG "hoge" : "fuga" // こうしないといけない "custom:hoge" : "fuga" }
セキュリティ設定
パスワード強度設定
パスワードの強度を設定できます。設定可能なのは下記です。
- パスワードの最低文字数
- パスワードの必須入力文字
- 数字
- 特殊文字(=記号)
- 半角大文字
- 半角小文字
自己サインアップの許可
項目 | 説明 | 備考 |
---|---|---|
管理者のみ許可 | ユーザープールを作成するAWSアカウントの管理者、または開発者(credential認証者)のみサインアップ可能にする | アプリから作成するには「adminXXX」というメソッドを使う必要がある。(signUpでは不可) |
ユーザーの自己サインアップを許可 | AWSアカウントの管理者、開発者でなくてもサインアップ可能にする | signUpメソッドで、サインアップ可能。ただし認証コード等による検証が必要(これについては後述) |
有効期限の設定
管理者(または開発者)がサインアップした場合、そのアカウントには「仮パスワード」が付与されます。
その仮パスワードの「有効期限」を設定します。
※この場合、対象アカウントは(仮パスワードでの)初回ログイン時に「本パスワード」を設定する必要があります。
多要素認証(MFA)設定
多要素認証(MFA)について、下記を設定できます。
項目 | 説明 | 備考 |
---|---|---|
多要素認証の有効化 | オフ/省略可能/必須 | 「省略可能」の場合、ユーザーが多要素認証を使用するかどうかを設定できます。 ※オフにしても、自前で多要素認証を実装できます。 |
第二の要素 | SMS/ワンタイムパスワード(TOTP) | 「SMS」の場合、登録した電話番号に検証コード送信します。 「TOTP」の場合、時間ベースで一意に生成される認証コード値により認証を行います(※) |
送信先 | Eメール/電話番号/両方/なし | 検証コードの送付先。「両方」にした場合、(なぜか)SMSにしか送られない模様。 「なし」にした場合、パスワードを忘れた際の再設定ができません。(再設定用コードを送れないので) |
SMSロールの提供 | (ロール名を記載) | SMSによる認証コードを送信する場合、SMS送信に必要なロールを指定する。 この画面で新規作成することも可能。 ※SMS送信しないなら空欄でOK |
Eメールアドレスの設定
Eメールで検証コードを送信する場合の設定です。
事前にSES(Simple EMail Service)に検証済Eメールを登録済の場合、SESの登録情報から下記を選択できます。
- リージョン
- 送信元Eメールアドレス
- 返信先Eメールアドレス
※SES登録していない、または使用しない場合、どれもデフォルトのままでOK。
その他、Eメール送信にSESを使用するかどうかを選択できます。
使用するする場合は上記のメール設定が、使用しない場合はデフォルトのメール設定が適用されます。
※使用しない場合、送信元Eメールアドレスは「no-reply@verificationemail.com」となります。
メッセージのカスタマイズ
検証コード送信メール、及びユーザー名&仮パスワード送信メールの内容を設定できます。
それぞれ、下記のメールが送信されます。
状況 | 送信メール |
---|---|
サインアップ完了直後(検証コード未送信時) | 検証コード送信メール |
管理者(or 開発者アカウント)でのサインアップ完了時 | ユーザー名&仮パスワード送信メール |
設定できるのは下記項目です。
- 検証タイプ(検証コード/検証用URL)
- 件名(Eメールのみ。SMSは不要)
- メール本文
※下記スクショの通り、
- ユーザー名:{username}
- 検証コード、パスワード: {####}
とすると、実際のメールに上記が埋め込まれます。
タグ&デバイス記憶の設定
ユーザープールにタグを埋め込むかの設定です。
タグを埋め込みたい場合、キー&値のペアを設定します。
(無理に埋め込む必要はありません。)
またデバイス記憶は、下記の設定を行えます。
項目 | 説明 | 備考 |
---|---|---|
デバイス記憶の有効化 | 常に/ユーザーが選択/記憶しない | |
第二の認証の省略 | はい/いいえ | 「はい」にした場合、記憶済デバイスからのアクセスの場合、認証コード/リンク/TOTPによる認証をスキップ可能。 デバイスを記憶しない場合、設定不要です |
なんかかなり長くなってきたので、続きはその2で。