Amazon Cognitoによる認証をALBに連携

ハンズオン

Amazon Cognitoとは?まずは概要を理解しよう

Amazon Cognitoは、AWSが提供するユーザー認証・認可のためのフルマネージドサービスです。アプリケーションにログイン機能を組み込む際、通常はユーザー管理、パスワード管理、多要素認証(MFA)、トークン管理など多くの実装が必要になりますが、Cognitoを利用するとこれらをクラウド側で自動的に処理できます。

特に、Webアプリ・社内ポータルなどで「ユーザー認証を安全に、かつ短期間で導入したい」場合に非常に効果を発揮します。
GoogleやAppleなどの外部IdPとの連携、SAML連携、多要素認証など、一般的な認証要件にすべて対応している点が大きな特徴です。

また、CognitoはALB(Application Load Balancer)と統合できるため、アプリ側にログイン画面を実装しなくても、ALBがアクセス時に自動でCognito認証へリダイレクトする仕組みが構築できます。
これにより、既存のEC2ベースのシステムにも認証を安全かつ簡単に追加できるのが強みです。

今回のハンズオンでは、このCognitoを利用して、ALBに対して
「アクセス前にCognito認証を要求する」構成を作成します。

Amazon Cognitoの設定方法やALBとの連携方法について解説します。
構成としては以下のように、既存のALBによる通信にCognito認証を追加するイメージです。

事前準備

今回はALBによるEC2への分散処理は構築している前提になります。
その上で、ALBのDNS名を控えておきます。  ※Cognitoでの設定時に使用

1.Cognitoユーザープールの作成

AWSコンソール ⇒ Cognitoを検索

ユーザープール ⇒ ユーザープールを作成をクリック

アプリケーションを定義
アプリケーションタイプ:従来のウェブアプリケーション
アプリケーション名:任意の名前

オプション設定   ※あくまで一例のため、必要に応じて変更
サインイン識別子のオプション:メールアドレス
自己登録:有効化
サインアップの必須属性:email

リターンURLを追加
リターンURL:https://(ALBのDNS名)/oauth2/idpresponse
注意 ALBの仕様によりCognitoの認証結果を「/oauth2/idpresponse」に返すため、記載が必須

2.ユーザープールにユーザーを作成

ユーザー管理 ⇒ ユーザー ⇒ ユーザーを作成をクリック

ユーザー情報を設定し「ユーザーを作成」をクリック
※初回の仮パスワードは自身で設定するかランダムで生成するかを選択可能

「Eメールにて招待を送信」を選ぶことで、登録したメールアドレスには初期パスワードの通知

3.ALBにCognito認証を紐づけ

ALBを選択し、「リスナーとルール」⇒「リスナーの編集」をクリック

デフォルトアクション
事前ルーティングアクション:ユーザーを認証
アイデンティティプロバイダー:Amazon Cognito
ユーザープールID、ユーザープールドメイン、ユーザープールクライアントID:作成したものを選択

4.ブラウザからALBのDNSにアクセス

ブラウザにてALBのURLにアクセスすると、Cognitoのログイン画面表示

上記で作成したユーザーにてログインすると、初回のパスワード変更を求められる

パスワード設定すると、Cognito認証は完了し、ALBのターゲットであるEC2等にアクセス
テストサイトが表示されたので、設定としては問題ないことを確認

まとめ

今回はALBによる通信にCognitoを使用した認証機能を追加する手順を解説しました。
他にも認証の仕組みを実現する方法はありますが、AWSのサービスとして実現する方法の1つとして使用を検討してみてください!

関連記事

コメント

タイトルとURLをコピーしました