ロードバランサを使うとうまく認証ができない…
どうしたらいいんだろう…
このような疑問にお答えします。
- AWS
- EC2
- ELB or ALB
- GitHub
などのOAuth認証を行おうとしたときに
直接サーバ(EC2)にアクセスした場合は正常に認証できるが、ロードバランサ(ELB, ALB)を経由するとうまく認証できないときがある。
みたいなことが発生しました。
この問題を解決したいと思います。
原因:認証前と認証後で別のサーバにアクセスしている
ロードバランサは任意のサーバにリクエストを受け流します。
そのため、本来であれば
- サーバAから認証→サーバAでコールバック実行
- サーバBから認証→サーバBでコールバック実行
ということがしたいのに
- サーバAから認証→サーバBでコールバック実行
- サーバBから認証→サーバAでコールバック実行
というパターンが発生してしまいます。
そこで、ユーザごとにどちらのサーバで認証を行うか設定する必要があります。
解決:スティッキーセッションを利用する
こちらの問題はスティッキーセッションを利用することで解決できます。
スティッキーセッションとは、ユーザーごとにサーバへの割り振り行う機能です。
セッションの有効期限も設定できます。
スティッキーセッションは簡単に設定できます。
維持設定を有効化する
こちらの設定はターゲットグループ(EC2 > ロードバランシング > ターゲットグループ)に対して行います。
設定するターゲットグループを選択すると、「説明」の下のほうに属性という項目があります。

そして、「属性の編集」から維持設定を有効化することで、スティッキーセッションが有効になります。

たったこれだけで認証がうまくいくようになります。
あとがき
認証のように、続けて同じサーバにアクセスする必要がある場合には便利です。
自力でやろうとするとかなり大変ですよね…スティッキーセッションありがたい。
私も初めてのときは結構困ったのですが、どうやってスティッキーセッションの存在を知ったんだろう…?
どうやって調べたのか覚えてない…調べ方も難しいですね。
どうやって調べたらいいのかわからないからどういうキーワード設定するべきなのかわからないけど、同じ問題に悩んでる人に伝わるといいな!