Application Load Balancer + Amazon Cognito のユーザ認証でハマった話

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

こんにちは、マネージドサービス部テクニカルサポート課の坂口です。

先日、お客様からのお問い合わせ対応のため、Application Load Balancer(以下、ALB) + Amazon Cognito(以下、Cognito) のユーザ認証に関して検証したところ、いくつかハマったので対処方法を記載します。

はじめに

解決後に下記弊社記事の存在を知りました。
環境構築の際はこちらを参考にしてください。 blog.serverworks.co.jp

ALB リスナールールで認証設定時に「The user pool client must have a client secret」

エラー内容の通り、アプリケーションクライアントでクライアントシークレットを生成していないのが原因でした。
クライアントシークレットの生成はアプリケーションクライアント作成時のみ生成可能となっているので、アプリケーションクライアントの再作成で解決しました。

docs.aws.amazon.com

ALB にアクセス後「An error was encountered with the requested page. 」

アプリケーションクライアントのコールバック URL が正しく設定されていないのが原因でした。
コールバック URL を正しい設定に修正することで解決しました。

  • エラー発生時の設定

https://[ALB の DNS 名]/[パスパラメータ]/oauth2/idpresponse

  • 正しい設定

https://[ALB の DNS 名]/oauth2/idpresponse

docs.aws.amazon.com

IdP アプリで次のリダイレクト URL のいずれかを許可します。ユーザーが使用するものであればどれでも構いません。ここで DNS はロードバランサーのドメイン名であり、CNAME はアプリケーションの DNS エイリアスです。

https://DNS/oauth2/idpresponse

https://CNAME/oauth2/idpresponse

認証成功後「401 Authorization Required」

Cognito にて認証成功後、ALB から 401 Authorization Required が返ってきました。

ブラウザキャッシュ後、再度アクセスしましたが事象再現せず。 原因は設定不備ではなく、単にログインプロセスでタイムアウトしていただけでした。

docs.aws.amazon.com

例えば、ユーザーが Application Load Balancer を使用してログインページをロードする場合、15 分以内にログインプロセスを完了する必要があります。15 分間のタイムアウトの期限れ後にユーザーが待機してログインしようとすると、ロードバランサーが HTTP 401 エラーを返します。ユーザーはページを更新して、もう一度ログインする必要があります。

また、ALB のアクセスログを確認すると、ALB から「401」が返されていて、エラー理由コードは「AuthInvalidStateParam」となっていました。

docs.aws.amazon.com

まとめ

エラーの原因は設定不備が多く、「ドキュメントを読む」ことの大切さを感じました。
同じ事象が発生した際に参考になれば幸いです。

坂口 大樹 (記事一覧)

マネージドサービス部テクニカルサポート課

2023年3月にサーバーワークス入社。

スパイスカレーが好きです。