DEVELOPER’s BLOG

技術ブログ

[AWS ECS + Rails] スティッキーセッションとCSRFトークンエラー対策

2025.11.06 Momoka FUJIEDA
AWS コラム
[AWS ECS + Rails] スティッキーセッションとCSRFトークンエラー対策

  1. はじめに
  2. スティッキーセッション(Sticky Session)とは
  3. Railsのセッション管理とCSRFトークン
  4. スティッキーセッションを無効化し、redisにセッションを保持させる場合
  5. 負荷分散とスティッキーセッションの設定 × セッションの保存場所

1. はじめに

AWS ECS上でRails on Railsで開発したWebアプリケーション(以下Railsアプリ)を運用する際、ユーザーごとのセッション管理は重要なポイントです。
負荷分散を行いたいのに、スティッキーセッションを無効にするとCSRF(クロスサイトリクエストフォージェリ)のトークンエラーが発生してしまうことがあります。「CSRFトークンエラーを避けるために、やむを得ずスティッキーセッションを有効にしている...」という状況になっていませんか?
この記事では、スティッキーセッションの設定とRailsセッションの保存場所の適切な組み合わせについて紹介します。


2. スティッキーセッション(Sticky Session)とは

AWSにおけるスティッキーセッションとは、ロードバランサー(ALB)が同じユーザーからのリクエストを常に同じサーバー(ECSタスク)へ振り分ける仕組みです。
ALBは独自に生成するCookieを用いてユーザーを識別し、前回接続したサーバーにリクエストを送ります。
ECサイトの購入フローのように、途中の入力内容を保持しておきたいステートフルなアプリや処理に便利です。


3. Railsのセッション管理とCSRFトークン

Railsではユーザーごとのセッション情報は、デフォルトでは Cookie に保存します。
またRailsはCSRF対策として、フォームに埋め込む CSRFトークン をセッションに保存し、次のリクエストで一致するか確認します。

ここで問題となるのが、スティッキーセッションを無効化した場合です。
ECSタスク間でリクエストが振り分けられると、リクエスト先のサーバーにセッションが存在せず、CSRFトークンが一致しなくなりエラーが発生します。

この問題を解決する方法が、RailsセッションをRedisなどの外部ストレージに置くことです。
Redisにセッションを保存することで、全てのサーバーが同じセッション情報を共有できるため、CSRFトークンエラーが解消されます。


4. スティッキーセッションを無効化し、redisにセッションを保持させる場合

Redisを使うためのgemを導入します。

gem 'redis-actionpack'

config/initializers/session_store.rb に redisサーバーの設定を記載します。(ドキュメント参考


5. 負荷分散とスティッキーセッションの設定 × セッションの保存場所

ECSタスクを複数台使ってアプリを運用しているとき、アプリの規模やステートフル/ステートレスかどうか、またはセキュリティ制約上セッション情報を保持する場所に制限があるかなどによって、負荷分散の必要性とそれに伴うセッション管理方式が決まります。

                       
スティッキーセッションセッションの保存場所負荷分散の効率実装難易度
無効化Redis等の外部ストレージ高いやや難しい
(gem導入)
有効化サーバーのメモリ/Cookie低い容易
(デフォルト設定)


まとめると、システムの性質や要件に応じて次のように使い分けます:

ステートフルアプリや検証環境の場合

  • スティッキーセッションを有効にする
  • セッションをCookieに保存

ステートレスアプリや本番環境など安定運用を重視する場合

  • 負荷分散のため、スティッキーセッションを無効にする
  • セッションはRedisなどの外部ストレージに保存



これにより、CSRFトークンエラーを避けつつ、安定したアプリ運用が可能になります。




X(旧Twitter)・Facebookで定期的に情報発信しています!

関連記事

85% が「自社でも実現できる」と回答。AI エージェントがデータを見て動く時代の業務変革

アマゾンジャパン品川オフィス はじめに AI BPRとは ワークショップの内容 参加者の声 組織への展開と本格導入 1.はじめに 売上や現場の数字を見ながら、次々と判断を下す毎日。「これAIでやってくれないかなぁ」と感じたことはありませんか。 生成 AI のニュースは毎日のように流れてきますが、自社の業務で「使える」という実感を持てている方は、まだ少ないのではないでしょうか。業務の中で日々判断を重ねている方ほど、目の前の業務を AI が

記事詳細
85% が「自社でも実現できる」と回答。AI エージェントがデータを見て動く時代の業務変革
AWS データ分析 生成AI
データと現場の声をAIエージェントが分析!「SMART」で作る新しい店舗運営のカタチ

はじめに 環境構築手順 Store Manager Agentで実現できること まとめ 1.はじめに 店舗運営において、こんなお悩みはありませんか。 売上データは見ているが、次に何をすべきか判断に迷う 売場づくりや品揃えが、どうしてもベテラン頼みになってしまう 在庫・売上・時間帯など、考えるべき要素が多すぎる 数字の振り返りはしているものの、改善アクションに落とし込めない こうした課題は、特定の業種だけのものではありません。 例えば、 ス

記事詳細
データと現場の声をAIエージェントが分析!「SMART」で作る新しい店舗運営のカタチ
AWS データ分析 生成AI
AWS Japan様と共催ワークショップ AIエージェントText2SQLでデータ分析

アマゾンジャパン品川オフィス3階 森のようなアトリウム はじめに Text2SQLとは ワークショップの内容 参加者の声 PoCから本格導入まで 1.はじめに 営業担当から突然、「この商品の半年分の売上推移のデータください」と言われ、思いがけないタイミングでデータ集計に時間を取られてしまう--。そんな依頼を様々な部署から受け、毎日追われている、というご経験がある方もいらっしゃるのではないでしょうか? こうした課題を解決する手段として注目

記事詳細
AWS Japan様と共催ワークショップ AIエージェントText2SQLでデータ分析
AWS 生成AI
踏み台EC2からセッションマネージャーへの移行の推奨

はじめに 踏み台EC2の課題 セッションマネージャーを使用した構成 セッションマネージャーの利点 まとめ はじめに アプリケーションEC2への接続手段として、従来は「踏み台EC2(Bastion Host)」を構築してSSH接続する方法が一般的でした。 しかし、現在はその手法は必ずしも効率的とは言えなくなっています。 現在はAWS Systems Manager Session Manager(SSM セッションマネージャー)を利用す

記事詳細
踏み台EC2からセッションマネージャーへの移行の推奨
AWS

お問い合わせはこちらから