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で定期的に情報発信しています!

関連記事

EOL管理のコストと手間を解消!Amazon InspectorとAIで実現する低負担な方法

目次 はじめに:EOL管理、やった方がいいのはわかっているけど...... 1.EOL管理には、3つの壁がある 2.Amazon Inspectorと生成AIで実現する、第三の選択肢 3.実際にやってみました 4.低コスト・低負担で運用を続けられる 結論:EOL管理は、思っているほど大変じゃない はじめに:EOL管理、やった方がいいのはわかっているけど...... EOL(End of Life)をしっかり管理することは、ソフトウェアの

記事詳細
EOL管理のコストと手間を解消!Amazon InspectorとAIで実現する低負担な方法
AWS 生成AI
DevOps Agentとは?マルチクラウド時代の自律型AI運用ガイド

マルチクラウドやハイブリッド環境が当たり前になったいま、SREやDevOpsチームの皆様は、こんな悩みを抱えていないでしょうか。 サービスと環境が増え続け、全体像が誰の頭にもない 各社クラウド・オンプレが入り組み、障害原因の切り分けに時間がかかりすぎる デプロイ起因の障害はコード変更まで追うのが大変 こうした課題を打破するのが、2026年3月に一般提供開始された「AWS DevOps Agent」です。 本記事では、その概要とAIエージェントを真の戦力にす

記事詳細
DevOps Agentとは?マルチクラウド時代の自律型AI運用ガイド
AWS SRE 生成AI
AIによる組織変革の新たな一手「AI BPR」とは?

「生成AIで月◯万時間の削減!」 そんな華々しい成果をニュースで見かけて自社でも生成AIを導入したものの、次のような壁にぶつかっていませんか? 個人の利用止まりで、組織の業務フロー自体は変わっていない 一部の層はAIを使ってくれるが、全社的に広がっていかない 業務プロセスのどこにAIを組み込むべきか具体化しない こうした悩みは、AI導入におけるアプローチの「前提」に原因があります。 本記事では、この壁を破る新たな手法「AI BPR(AI-driven B

記事詳細
AIによる組織変革の新たな一手「AI BPR」とは?
AWS 生成AI
守る運用に改善するSREを。AIエージェントで効率的なSREの実践方法

深夜のアラート対応、障害調査のログ突き合わせ、セキュリティ検知のトリアージ。毎月の報告書は「異常なし」なのに、同じインシデントが繰り返される。そんなシステム運用に疲弊していませんか。 原因は担当者の能力でも姿勢でもなく、体制にあります。安定を守る責任が重いほど、改善に割く余力は構造的になくなっていくためです。このことを改善する方法がSRE(Site Reliability Engineering)ですが、必要なエンジニアリングコストの高さが導入の壁でした

記事詳細
守る運用に改善するSREを。AIエージェントで効率的なSREの実践方法
AWS SRE 生成AI

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