Cognitoの「マネージドログイン」使用時に MFA(多要素認証)を「オプション」にする際の注意点

記事タイトルとURLをコピーする

こんにちは。
カスタマーサクセス部の山本です。😺

Cognito の「マネージドログイン」機能

Cognitoには「マネージドログイン」という機能があります。
この機能を使うと、Cognito が用意しているログイン認証用のフロントエンドをユーザー自身がGUIでカスタマイズして、アプリケーションに統合できます。
これにより、ユーザーは認証画面をプログラムで作成する必要がなくなります。

参考:Apply branding to managed login pages - Amazon Cognito

You might want to provide a consistent user experience between your authentication service and your application. You can accomplish this goal either with custom forms and back-end API operations in an AWS SDK, or with managed login. Managed login and the classic hosted UI are web front ends for the component of your application that serves authentication with user pools.

山本による和訳:

アプリケーションに対して一貫した認証を提供する方法を考える際、自作のカスタムフォームやAPIをAWS SDKを使って作成することもできますし、「マネージドログイン」を利用することもできます。「マネージドログイン」や以前から提供されている「Hosted UI」の機能を使って、ユーザープールを利用したログイン認証のフロントエンドを作成し、アプリケーションで使用することができます。

「マネージドログイン」が提供するデフォルトのログイン認証画面の例

GUIでカスタマイズする画面

「ブランディング」配下の「マネージドログイン」のところから変更できるようです。

ファビコンまで変更できます。すごいですね。

ダークモードにしたり、画像も埋め込めます。

「マネージドログイン」機能の 2024年11月22日のリリースアナウンス

参考:Amazon Cognito がエンドユーザー体験に対する豊富なブランディングをサポートする Managed Login を導入 - AWS

Managed Login を使用することで、パスワードレス認証やローカリゼーションなどのカスタム実装の設計と保守という、差別化につながらない面倒な作業を排除することができます。たとえば、Managed Login には、パスキー、メールアドレス、またはテキストメッセージによるサインインなど、パスワードなしのログイン用の組み込み統合が用意されています。これにより、お客様はカスタムコードを作成しなくても、手間のかからない安全な認証方法を柔軟に実装できます。Managed Login により、AWS マネジメントコンソールを通じてエンドユーザーのサインアップとサインインのエクスペリエンスを設計および管理できるようになりました。

人間のユーザーには Authenticator を使ってMFA(多要素認証)をしてもらい、システムのユーザーは MFA が要らないような場合の対応

Cognito の ユーザープールに、人間のユーザーとシステムのユーザーを作り、それぞれ次のように認証を行おうとしています。

  • 人間のユーザーの場合:MFA(多要素認証)を有効にし、Authenticator を使います。
  • システムのユーザーの場合:MFAを無効にし、IDとパスワードのみで認証します。

Cognitoのユーザープールでは、MFA(多要素認証)を必須にするか、オプションにするかを選べます。

上記の要件では、MFAをオプションにして、人間のユーザーにはMFA(Authenticator)を設定してもらうのが良さそうです。
しかし、「マネージドログイン」を使用する場合、MFAをオプションにすると、Authenticator の初期設定用 QR コードの登録画面が表示されないようです。
人間のユーザーにだけ Authenticator の初期設定用 QR コードを表示する認証画面を、プログラムで作成するしかないようです。
このためにプログラムを作成するのは少しつらいですね。

AWS ドキュメントの該当箇所

ユーザープールで をオプションMFAに設定すると、ホストされた UI はユーザーにプロンプトを表示しません。オプションの を使用するにはMFA、 を設定することをユーザーに選択するよう促すインターフェイスをアプリ内に構築しMFA、API入力をガイドして追加のサインイン要素を検証する必要があります。

参考:ユーザープールMFAへの の追加

似たようなことで困っていたユーザーさんの例:InvalidParameterException: User does not have delivery config set to turn on SOFTWARE_TOKEN_MFA #4645

SMS なら設定可能

SMS はユーザー属性に phone_number があれば設定できます。

SMS にチェックを入れます。

プログラミングをどうしてもしたくない場合の方法

MFA を必須にした状態では Authenticator の初期設定用 QR コードの登録画面が表示されます。

したがって、人間のユーザーを追加する時に限って、MFA を必須にする という回避策を取ることもできます。

注意点

この手順を行っている間は、MFAが必須になるため、APIを使用するユーザーがログインする際にMFAの登録が求められます。そのため、人間のユーザーを登録している間は、APIでのログインができません。

プログラミングをどうしてもしたくない場合の手順

一連の手順を記載しますので、もし、この運用をする際には参考にしてください。

ユーザープールの「サインイン」セクションで MFA を 「必須」に設定します

ユーザーを作成します。

詳細は割愛します。

ログインページから QR コードを表示します

ログインページを表示します。

サインインします。

Authenticator を選択します。

QR コードを読みます。

サインインしました。

ユーザーの MFA 設定を更新します。

ユーザープールの「サインイン」セクションで MFA を 「オプション」に戻します。

まとめ

Cognitoの「マネージドログイン」機能は、プログラムを作成せずに認証画面をカスタマイズできる便利なツールです。これを利用することで、アプリケーションの認証体験を統一することができます。しかし、ユーザー種別に応じたMFA(多要素認証)の設定には注意が必要です。特に、人間のユーザーにはAuthenticatorを使用し、システムのユーザーにはMFAなしで認証を行う場合、MFAのオプション設定が必要になります。 「マネージドログイン」を使用すると、MFAをオプションにしている場合にはAuthenticatorのQRコード登録画面が表示されないため、人間のユーザーだけにQRコードを表示するためのプログラムを作成する必要があります。これを回避するためには、人間のユーザー追加時にMFAを必須にする方法もありますが、その間はAPIユーザーのログインが制限される点に注意が必要です。

余談

冬ですね。

山本 哲也 (記事一覧)

カスタマーサクセス部のインフラエンジニア。

山を走るのが趣味です。