DEVELOPER’s BLOG

技術ブログ

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

2025.11.06 藤枝 桃加
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責任共有モデルの誤解によるリスク─セキュリティ事故から見えた教訓

はじめに 責任共有モデルにおける責任範囲 EC2・S3・IAMにおける共通の設定ミスとリスク IAM権限エスカレーション攻撃の典型的な流れ 複合的なクラウド侵害シナリオ事例 SREによる包括的なクラウドセキュリティ改善 1. はじめに AWSなどクラウドは、提供事業者と構築ベンダーや利用者による責任共有モデルに基づいています。責任共有モデルがセキュリティなど、双方の守るべき範囲を示してくれています。しかし、このモデルを正しく理解し

記事詳細
AWS責任共有モデルの誤解によるリスク─セキュリティ事故から見えた教訓
AWS SRE
これだけでOK!AWS Compute Optimizer 簡単実装ガイド

はじめに AWS Compute Optimizerとは? 対象リソースについて AWS Compute Optimizerの採用メリット AWS Compute Optimizerの採用デメリット 実装ステップ:AWS Compute Optimizerを有効化する方法 AWS Compute Optimizerの導入で次の一歩を踏み出そう 1.はじめに AWSのリソースコストを削減したいと考えていても、「会社のアカウント情

記事詳細
これだけでOK!AWS Compute Optimizer 簡単実装ガイド
AWS コラム
Amazon S3のコストを60%以上削減!データストレージと転送最適化の4つの方法

背景 原因調査 解決策 結果 1.背景 AWSを使用する多くの企業にとって、Amazon S3(Simple Storage Service)は最も利用されるストレージサービスの一つです。S3は、スケーラブルで信頼性が高く、データを安全に保存できるため非常に人気があります。しかし、使い方によってはストレージコストが膨らみ、毎月の予算を圧迫する原因にもなります。私たちAUCでは、SRE活動の一環としてAWSのコスト適正化を進めており、特にA

記事詳細
Amazon S3のコストを60%以上削減!データストレージと転送最適化の4つの方法
AWS SRE コラム
【Redshift vs. BigQuery】「運用性でRedshift」という選び方

目次 結局、何が違うのか? Redshiftの運用性 1. AWS上の対向システムとの統合容易性 2. 機械学習ベースの管理タスク自動化 3. Glue/Lake Formation による一元的なメタデータ・アクセス権限管理 まとめと次回予告 出典(いずれも記事公開時点閲覧) 結局、何が違うのか? こんにちは、アクセルユニバース株式会社、データサイエンティストの世古大樹です。 クラウド環境にデータウェアハウス(DWH)を構築しようとする場合、まず候補に上

記事詳細
【Redshift vs. BigQuery】「運用性でRedshift」という選び方
AWS コラム データ分析

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