AWSでCTFdを構築しよう!
CTF・CTFdとは
CTF(Capture The Flag)とは、コンピューターセキュリティの知識と技術を競い合うセキュリティ競技です。
参加者はサーバーやWebアプリケーションに隠された「Flag(フラグ)」を探し出し、スコアを競います。
CTF運営者にとって課題となるのが、安全でスケーラブルな環境をどのように用意するか です。
そんなときに便利なのが、オープンソースのCTFプラットフォーム CTFd。
本記事では、AWSのマネージドサービスを活用して ECS Fargate + RDS + EFS + ALB でCTFdを構築する手順を丁寧に紹介します。
手順
はじめに: 事前準備
本ガイドでは、ローカル環境からAWSへCTFdをデプロイします。
そのため、まず以下のツールをPCにインストールしておきましょう。
🧰 必要なツール一覧
ツール | 用途 | 備考 |
---|---|---|
Git | CTFdのソースコードを取得する | Zenn解説あり |
Docker | CTFdのコンテナイメージをビルド・実行する | WindowsではWSL2が必要 |
AWS CLI | AWSリソースの操作やECRへのログインに利用 | AWSアカウント連携が必要 |
💡 インストール参考記事
環境構築が初めての方は、以下のZenn記事を参考に設定しておくとスムーズです。
-
【git】Windowsにgitをインストールしよう
→ Gitのインストールと初期設定を丁寧に解説しています。 -
Windows環境下でDockerを使う場合
→ Docker Desktopの導入からWSL2設定までカバーしています。 -
【AWS】aws cliの設定方法
→aws configure
コマンドによる初期設定方法を解説しています。
⚙️ 動作確認
インストール後、以下のコマンドでバージョンが表示されれば準備完了です。
git --version
docker --version
aws --version
ステップ1: CTFdのDocker準備(ローカルPC)
AWSにデプロイする前に、ローカルでCTFdのDockerイメージを作成します。
これにより、アプリの動作を確認でき、ECSでも同じ環境を再現できます。
1. CTFdソースコードの取得
まず、GitHubからCTFdのソースコードを取得します。
git clone https://github.com/CTFd/CTFd.git cd CTFd
2. Dockerイメージのビルド
CTFdディレクトリ内で以下のコマンドを実行します。
docker build -t ctfd-app .
-t ctfd-app
は、作成するDockerイメージの名前を指定しています。
3. ローカル実行で動作確認
ビルドしたイメージを使ってローカルで起動します。
docker run -p 8000:8000 ctfd-app
ブラウザで http://localhost:8000 にアクセスし、CTFdの初期画面が表示されればOKです。
ステップ2: AWS環境の準備
AWS上にCTFdを動かすためのネットワークとリポジトリを準備します。
1. VPCの作成
-
AWSコンソールで VPC サービスを開く
-
「VPCを作成」をクリック
-
以下の設定を入力
-
名前タグ:
ctfd-vpc
-
サブネット数: パブリック2 / プライベート2
-
NATゲートウェイ: 無し(検証用)
-
-
「VPCを作成」をクリック
2. ECRリポジトリの作成
Dockerイメージを保存する場所を用意します。
-
AWSコンソール → ECR サービス
-
「リポジトリを作成」 → 名前に
ctfd-repo
を入力 -
可視性: プライベート
-
そのまま「作成」をクリック
3. ECRへのDockerイメージのプッシュ
ECRリポジトリの詳細画面で「プッシュコマンドの表示」をクリックし、
表示されたコマンドをローカルのターミナルで順に実行します。
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin <アカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com
docker tag ctfd-app:latest <アカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/ctfd-repo:latest
docker push <アカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/ctfd-repo:latest
ステップ3: データベースとストレージの準備
CTFdのデータとファイルを永続化するため、RDSとEFSを構築します。
1. RDS(MySQL)を作成
-
AWSコンソール → RDS → 「データベースを作成」
-
エンジン: MySQL
-
テンプレート: 無料利用枠
-
設定
-
DBインスタンス識別子:
ctfd-db
-
マスターユーザー名:
admin
-
パスワード: 任意の強力な文字列
-
-
接続設定
-
VPC:
ctfd-vpc
-
パブリックアクセス: 無効
-
-
セキュリティグループ:
ctfd-db-sg
(後でECSから3306を許可) -
追加設定 → 初期データベース名:
ctfd
-
「データベースを作成」クリック
作成後、RDSエンドポイント(例: ctfd-db.xxxxx.ap-northeast-1.rds.amazonaws.com
)を控えておきます。
2. EFS(永続ストレージ)
-
AWSコンソール → EFS
-
「ファイルシステムを作成」クリック
-
VPCに
ctfd-vpc
を選択 -
セキュリティグループ:
ctfd-efs-sg
(ECSから2049を許可) -
作成完了後、EFS IDを控える
ステップ4: ECSサービスの構築
1. タスク定義の作成
-
AWSコンソール → ECS → 「タスク定義」 → 「新しいタスク定義の作成」
-
設定項目:
-
起動タイプ: Fargate
-
CPU: 1 vCPU
-
メモリ: 2GB
-
コンテナ名:
ctfd-container
-
イメージURI:
ECRのURI
-
ポートマッピング:
8000/tcp
-
-
環境変数を設定
DATABASE_URL=mysql+pymysql://admin:<RDSパスワード>@<RDSエンドポイント>:3306/ctfd UPLOAD_FOLDER=/var/uploads
-
ボリュームを追加
-
名前:
ctfd-volume
-
タイプ: EFS
-
ファイルシステムID: 作成したEFS ID
-
-
コンテナマウントポイント
-
ソースボリューム:
ctfd-volume
-
コンテナパス:
/var/uploads
-
-
「作成」をクリック
2. クラスターとサービスの作成
-
クラスター名:
ctfd-cluster
-
サービス名:
ctfd-service
-
起動タイプ: Fargate
-
タスク定義: 作成したタスク定義を選択
-
サブネット: パブリックサブネット
-
セキュリティグループ:
ctfd-ecs-sg
-
ロードバランサー設定:
-
新しいALB作成
-
名前:
ctfd-alb
-
リスナー: HTTP(80)
-
ターゲットグループ:
ctfd-tg
-
ヘルスチェックパス:
/
-
-
確認して「作成」をクリック
ステップ5: 動作確認
-
ECSのサービスが「実行中」になるまで数分待機
-
AWSコンソール → EC2 → 「ロードバランサー」から
ctfd-alb
を選択 -
DNS名をコピーしてブラウザでアクセス
-
CTFdのセットアップ画面が表示されれば構築成功です 🎉
ステップ6: 本番環境向けの改善ポイント
今回の構成(ECS + RDS + EFS + ALB)はシンプルで十分動作しますが、
本番運用では以下のサービスを追加することで安定性・セキュリティが大幅に向上します。
🔹 ElastiCache (Redis)
CTFdはセッション管理やキャッシュでRedisをサポートしています。
Amazon ElastiCache for Redis を導入すると:
-
ログインやスコア更新が高速化
-
同時接続数が多いCTFでも安定
-
キャッシュ層をAWSが自動スケーリング
🔹 AWS Certificate Manager (ACM)
ALBにSSL証明書を適用してHTTPS化することで、通信を暗号化できます。
-
ACMで無料の証明書を発行
-
ALBリスナーにHTTPS(443)を追加
-
自動更新で運用負荷を削減
🔹 その他のおすすめ設定
-
CloudWatch Logs: ECSやALBのアクセスログを一元管理
-
Secrets Manager: RDSパスワードを安全に管理
-
Auto Scaling: イベント開催時の負荷に応じて自動スケール
まとめ
本記事では、ECS Fargate + RDS + EFS + ALB を使ってCTFdをAWS上に構築する手順を紹介しました。
最小構成でも十分に動作しますが、ElastiCache や ACM を組み合わせることで
「高速・安全・スケーラブルなCTF環境」が完成します。
AWSのマネージドサービスを活用して、
インフラ管理に悩まずCTF問題作成に集中できる環境 を手に入れましょう!
Discussion