[AWS] ALBの認証機能とCognitoを使ったアクセス制限

Application Load Balancer(以下:ALB)を使ってGoogle認証でログインをさせる方法については以前に記事にまとめましたが、今回はAWS Cognitoを組み合わせた認証を試してみたので手順をまとめます。

試した感想としては、AWS Cognitoだけでユーザー管理を行うと管理者の手間がかかりがちなので、Lambdaなどを組み合わせてうまく解決できる構築を用意した方が良さそうなイメージでした。

ただし小規模運用の場合ならAWS Cognitoの最低限の機能を使えば十分かもしれません。

事前準備


今回も事前準備としてHTTPS通信を許可したALBを作成しておきました。
このALBには[access-test.noname.work]というサブドメインを割り当ててあり、ブラウザからアクセスすると「HelloWorld!!」が表示される状態にしてあります。

プールの作成


AWS Cognitoのコンソールにアクセスします。
[ユーザープールの管理]から新規にプールの作成を行います。


プール名を指定したら[ステップに従って設定]します。


今回は単純な機能のみを扱いたいため、メールアドレスでのサインアップとします。
また、標準属性は特に設定しませんでした。


通常の運用であれば[管理者のみ]がユーザーを管理できるべきなのですが、[自己サインアップを許可]するとどのような挙動になるのかも確認したかったので、今回は自己サインアップを有効にしてみました。

先に結論として述べておくならば、自己サインアップを有効にすると誰でもアクセス可能になってしまうため扱いには工夫が必要そうです。


二段階認証も扱えるようなのでCognitoは結構便利ですね。
この辺りは必要そうな物をチェックしておきました。


アカウント作成時に送信されるメールのメッセージなどを編集できますが、デフォルトのままでも特に迷わないと思ったのでこのままにしておきます。


アプリクライアント名を決めておきます。
ALBではクライアントシークレットを使用するためチェックを入れておきます。


最終確認で問題がなければこのままプールを作成します。
プール作成後にいくつか設定をする必要がありますので次の項目も確認しておいてください。

Cognitoの設定


プールが作成できたら、Cognitoの認証ページで使用するドメインを決めておきます。
デフォルトで用意されているAmazonのドメインを使うか、自分のドメインを利用できます。

自分で用意した独自ドメインを利用する場合にはRoute53のAliasに指定されたCloudFrontドメインを登録する必要があります。


アプリクライアントの設定から、コールバック用のURLを指定します。
コールバックURLは
https://[ALBのドメイン]/oauth2/idpresponse
を設定します。


本来であればユーザー管理からログイン用のユーザーを作成しておきます。
しかし今回は自己サインアップを試してみたいため、ユーザーが登録されていないことを確認しておきます。

ALBでの設定


ALBの設定からリスナールールを編集します。


[アクションの追加]から[認証]を追加します。


認証方法にCognitoを選択して先ほど設定したプールを設定すれば準備は完了です。

アクセス確認


ブラウザから検証ページである[https://access-test.noname.work]へのアクセスを試みると認証ページに遷移されることが確認できました。
今回は自己サインアップを行うため[Need an account?]からアカウント作成に進みます。


アカウントに登録するメールアドレスとパスワードを設定しました。


すると確認用のメールが送信されたため、メールに書かれている認証コードを入力してアカウントを作成します。


アカウントが作成されて、ALBの静的Webページにアクセスできることが確認できました。


AWS Cognitoのプールからユーザー一覧を確認すると、ユーザーが追加されたことが確認できました。
このままの設定だと誰でもログイン可能になってしまうので、自己サインアップを許可する場合には工夫が必要になりそうですね。

終わりに

ALBの認証機能とAWS Cognitoを組み合わせたアクセス制御を試してみました。
シンプルな使い方としてはAWS Cognitoのユーザー管理は[管理者のみ]が行えるようにしておいて、アクセスしても良い人を順次登録していく使い方となりそうです。

自己サインアップについても試してみましたが、アクセス制限の目的ではそのままの設定で運用していくのは厳しそうに感じました。
アプリケーション側の制御やLambdaを使って登録ユーザーの条件を絞ることができれば良さそうですが、この辺りは要検証が必要になりそうですね。

今回はあまり深掘った検証は行いませんでしたが、ALBでのアクセス制御の選択肢の一つとして参考になれば幸いです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)