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

関連記事

AWSのインフラコスト見積もりでの「この値なに?」をちょっと解説(AWS Fargate編)

目次 はじめに AWS Fargateの選択・入力項目 ・説明 ・ロケーションタイプを選択 ・リージョンを選択 ・オペレーティングシステム ・CPUアーキテクチャ ・タスクまたはポッドの数 ・平均期間 ・割り当てられたvCPU の量 ・割り当てたメモリ量 ・Amazon ECS に割り当てられたエフェメラルストレージの量 まとめ はじめに AWSのインフラコスト見積もりでおなじみのAWS Pricing Calculator、 リストから選択あるいは値を入

記事詳細
AWSのインフラコスト見積もりでの「この値なに?」をちょっと解説(AWS Fargate編)
AWS
分析は、会話でできる─AIエージェントで変わる顧客データの使い方

はじめに:顧客データ活用が進まない AIエージェントを利用した顧客データ活用環境(Amazon Bedrock) AIエージェントで顧客データを分析する まとめ:スモールスタートで始める顧客データ活用 1.はじめに:顧客データ活用が進まない 「顧客データをもっと活用したい」という声をよく耳にします。購買データ、会員データ、来店履歴、キャンペーンの反応率など、日々さまざまなデータが蓄積されていますが、それらを活用して顧客理解を深め、顧客体験

記事詳細
分析は、会話でできる─AIエージェントで変わる顧客データの使い方
AWS 生成AI
EC2・Fargateコスト最適化:Savings Plansとリザーブドインスタンスの使い分けガイド

はじめに Savings Plansとリザーブドインスタンスの基本 EC2とFargate(ECS/EKS)に対する割引プランの選び方 まとめ 1. はじめに EC2やFargate(ECS/EKS)を長期間運用する場合、Savings Plansやリザーブドインスタンスによる割引を適切に活用し、コストを抑えることが欠かせません。 本記事では、EC2・Fargate を対象に、Savings Plansとリザーブドインスタンスの基本を整理し、それぞれの特

記事詳細
EC2・Fargateコスト最適化:Savings Plansとリザーブドインスタンスの使い分けガイド
AWS
Fargate (ECS/EKS) × Savings Plansでコスト見積もりする方法

はじめに Fargate(ECS/EKS)のコスト最適化とSavings Plansの基本 Savings Plans適用後のFargate(ECS/EKS)の費用を計算する方法 まとめ 1. はじめに Fargate(ECS/EKS)のコストを最適化するには、長期運用を見据えてSavings Plansの割引を活用することが重要です。試算には多くの方が公式ツールのPricing Calculatorを利用していると思います。 しかし、Fargateにつ

記事詳細
Fargate (ECS/EKS) × Savings Plansでコスト見積もりする方法
AWS

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