ふりぶろぐ
Web Engineer's Blog
ALB

【ALB, ELB】スティッキーセッションで認証問題を解決!【ロードバランサ】

ALB

ロードバランサを使うとうまく認証ができない…
どうしたらいいんだろう…

このような疑問にお答えします。

環境
  • AWS
    • EC2
    • ELB or ALB
  • Twitter
  • GitHub
  • Facebook

などのOAuth認証を行おうとしたときに

直接サーバ(EC2)にアクセスした場合は正常に認証できるが、ロードバランサ(ELB, ALB)を経由するとうまく認証できないときがある。

みたいなことが発生しました。

この問題を解決したいと思います。

原因:認証前と認証後で別のサーバにアクセスしている

ロードバランサは任意のサーバにリクエストを受け流します。

そのため、本来であれば

  • サーバAから認証→サーバAでコールバック実行
  • サーバBから認証→サーバBでコールバック実行

ということがしたいのに

  • サーバAから認証→サーバBでコールバック実行
  • サーバBから認証→サーバAでコールバック実行

というパターンが発生してしまいます。

そこで、ユーザごとにどちらのサーバで認証を行うか設定する必要があります。

解決:スティッキーセッションを利用する

こちらの問題はスティッキーセッションを利用することで解決できます。

スティッキーセッションとは、ユーザーごとにサーバへの割り振り行う機能です。
セッションの有効期限も設定できます。

スティッキーセッションは簡単に設定できます。

維持設定を有効化する

こちらの設定はターゲットグループ(EC2 > ロードバランシング > ターゲットグループ)に対して行います。

設定するターゲットグループを選択すると、「説明」の下のほうに属性という項目があります。

ターゲットグループの説明

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

属性の編集

たったこれだけで認証がうまくいくようになります。

あとがき

認証のように、続けて同じサーバにアクセスする必要がある場合には便利です。

自力でやろうとするとかなり大変ですよね…スティッキーセッションありがたい。

私も初めてのときは結構困ったのですが、どうやってスティッキーセッションの存在を知ったんだろう…?
どうやって調べたのか覚えてない…調べ方も難しいですね。

どうやって調べたらいいのかわからないからどういうキーワード設定するべきなのかわからないけど、同じ問題に悩んでる人に伝わるといいな!

ABOUT ME
りーふ
たまにブログを書いてるWebエンジニア。 サーバーサイドメインでインフラとフロントエンドもたまにやります。 Javaが得意。 Play Frameworkが好き。 本業は迷惑をかけない程度に手を抜くスタイル。 意識高い系は苦手。