0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cognito の Managed Login で Email の MFA を有効化する

Posted at

はじめに

Cognito の Managed Login が追加され、リッチな認証画面が提供されました。ALB と Cognito を連携することで、比較的簡単に認証機能を追加できるうれしさがあります。セキュリティをより高めるために、Cognito の MFA を利用したくなります。

今回の記事では、Cognito の MFA として Email を利用したときの Managed Login の利用方法を確認してみようと思います。

User Pool

適当に User Pool を作成します。

image-20250222180643644.png

Create

image-20250222180737000.png

SES の連携設定

Cognito の MFA を Email にするときに、SES との連携設定が必要です。Edit を押します。

image-20250222213228506.png

この記事の手順では、事前に SES でドメイン sugiaws.tokyo を登録しており、これを利用します。

FROM sender name は 表示名 <送信元メールアドレス> の形式で指定すると良いです。

image-20250222213343349.png

MFA を有効化

MFA を有効化します。

image-20250222180847424.png

User Pool の単位では、Optional MFA として、 Email message を有効化します。

この画面で指定する User Pool の Optional MFA の意味は、User Pool の中で MFA を利用するユーザーと利用しないユーザーの混在を許すという意味です。「MFA を必須にしたいんだ」ということを考えると思うのですが、その場合は、Optional MFA を選択したうえで、MFA を必須にしたいユーザー単位で MFA を有効化すれば大丈夫です。

image-20250222225518847.png

Callback

Cognito と連携する Web アプリケーションの Callback URL を設定します。

image-20250222182553937.png

こんな感じに、Web アプリケーションの ドメイン名の末尾に、/oauth2/idpresponse を追記した URL を設定します。これは、ALB と Cognito の連携で必要な設定です。

image-20250222182650190.png

ALB と Cognito を紐づける

ALB の HTTPS Listener を Cognito と紐づけます。

image-20250222182149093.png

上の手順で作成した Cognito Userpool を選択します。

image-20250222182422969.png

Self sign-up の停止

Self sign-up は停止します。

image-20250222182751921.png

チェックを外します。

image-20250222182759489.png

招待メールを設定

ユーザーの招待メールを、わかりやすく日本語で送信できます。

image-20250222183206390.png

こんな感じのメッセージをテンプレートとして登録できます。

{username} に一時パスワードを送付します。<br>
一時パスワード :  {####} <br>

以下のサイトにアクセスしてください <br>
https://coginito-mfa-test01.sugiaws.tokyo/

image-20250222183308680.png

管理者が招待

では、管理者としてユーザーを招待してみましょう。Create user を押します。

image-20250222182833633.png

メールアドレスを入れて、Create User を押します。

image-20250222182923473.png

作成したユーザーは MFA は無効化されているので、有効化をします。ユーザーの詳細画面を開きます。

image-20250222230559276.png

Update MFA configuration を押します。

image-20250222230624133.png

Email の MFA を有効化します。

image-20250222230643504.png

ユーザーに届くメール

ユーザーのメールアドレスに次のようなメールが届きます。

image-20250222183543803.png

ログインします。

image-20250222183606762.png

パスワードを入れます。

image-20250222183623237.png

パスワードを変更します。

image-20250222183636933.png

メールに MFA としてのコードが送られます。

image-20250222215029803.png

こんな感じのメールが届きます。

image-20250222215055691.png

コードを入れます。

image-20250222215111401.png

ログインできました。

image-20250222215124697.png

パスワードを忘れたとき

この手順では、Managed Login 上のセルフサービスのパスワードをリセットする機能の「パスワードをお忘れですか?」は動作しません。

image-20250222231556973.png

Email を利用した MFA の場合、パスワードリセットの手法を Email にはできない仕様の制限事項があるためです。

ユーザーは、同じ E メールアドレスまたは電話番号で MFA とパスワードのリセットコードを受け取ることはできません。MFA の E メールメッセージからワンタイムパスワード (OTPs) を使用する場合は、アカウントの復旧に SMS メッセージを使用する必要があります。

Email の MFA を利用する場合は、SMS が利用できるように、UserPool の必須属性に電話番号を入れておくと良いと思います。

ただ、電話番号を利用していない場合は、別の手法でパスワードをリセットできます。管理者側で作業を行います。リセットしたいユーザーを選択します。

image-20250222231836000.png

Update MFA configuration を押します。

image-20250222231900203.png

一時的に MFA を無効化します。

image-20250222231929609.png

これで、ユーザー側のセルフサービスでパスワードのリセットが可能です。Managed Login の画面で「パスワードをお忘れですか?」を選択します。

image-20250222232324795.png

コードが送られます。

image-20250222232334513.png

コードが送られます。

image-20250222232349501.png

コードを入れてパスワードをリセットします。

image-20250222232407666.png

これでパスワードがリセットされログインができるようになります。

なお、このままでは MFA が無効化されているので、例えば、1 日後に管理者が MFA で Email を有効化すると良いでしょう。(もしかしたら、Lambda 連携でリセット後に MFA 自動有効化が出来るかも)

検証を通じてわかったこと

  • Cognito の MFA には、Email、TOTP (Time-based One-time Password)、SMS の 3 種類が選択できる

  • TOTP の選択肢は、MFA のデバイスを紛失したときの MFA リセットが直接的には出来なさそうだった。

    • こちらの記事 では、MFA の選択肢として SMS を利用できるようにしたうえで、TOTP の Device を紛失したときに、一時的に SMS に切り替えたうえで、Access Token を基に再度 TOTP Device を登録する手順が説明されている。
    • また別の記事 では、Cognito User Pool の MFA 設定を Require (必須) ではなく、Option にすることで、管理者側がユーザーの Access Token を取得する手順が説明されている。しかし、Option にすると、Managed Login でユーザーがサインアップする際に、MFA デバイスの登録画面が出てこなくて、独自の Web アプリケーション側で TOTP 登録画面を提供する必要があり、少し面倒。
    • このことを踏まえると、Email を利用した MFA では、デバイスを紛失する心配がなくなりよさそうに思う。登録したメールアドレスが利用できなくなってしまう場合が考えられるが、社内でユースケースではメールアドレスの紛失は基本考えなくてよいと思う。
  • Email を利用した MFA の場合、パスワードリセットの手法を Email にはできない仕様の制限事項がある。Email の MFA を利用する場合は、SMS が利用できるように、UserPool の必須属性に電話番号を入れておくと良いと思う。(この記事の手順ではやってないけど)

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?