はじめに
Elastic Beanstalkで構成したALBにCognitoユーザープールの認証を適用しようとした際に、500エラーでハマったので共有しておきます。やろうとしたことは、ほぼ下記の記事と同じです。
インフラエンジニアが一切コードを書かずにWebサーバーに認証機能を実装した話
この記事通りに設定をしたはずなのに、認証が成功するとなぜかALBが500 Internal Service Errorを返してきます。
結論
ALBに設定されているセキュリティグループのアウトバウンド設定が問題でした。下記がElastic Beanstalkが自動で作成したALBに設定されているセキュリティーグループのアウトバウンド設定です。
ALBがIdPエンドポイントにトークンの検証をしに行く際に、httpsでコネクションに行くために、この設定ではつながらないという落ちでした。下記のようにHTTPSも通してあげれば、ちゃんと通りました。IdPのエンドポイントはデュアルスタックで動いているようなので、一応IPv6も入れときましょう。
普段、アウトバウンド側の設定はほとんどいじることがないので、全然気づかずだいぶハマりました。しかし、セキュリティグループを新規作成する時のアウトバウンド側のデフォルトは全開放なのに、なぜElastic Beanstalkさんはこんな中途半端な設定にしてくれちゃっているのでしょうか?