
multi-juicer v10.3.0
セキュリティトレーニングやCapture The Flag(CTF)のために、複数のJuice Shopインスタンスをホストおよび管理します。
CTFやセキュリティトレーニングをOWASP Juice Shopで実施するのは通常かなり難しいものです。Juice Shopは同時に複数のユーザーが使用することを想定していません。各自のマシンでJuice Shopを起動する方法を全員に指示するのも一応機能しますが、貴重な時間を大幅に奪ってしまいます。
MultiJuicerを使用すると、中央のKubernetesクラスタ上で各参加者に個別のJuice Shopインスタンスを実行でき、ローカルにJuice Shopインスタンスを用意することなくイベントを開催できます。
機能:
- 必要に応じて新しいJuice Shopインスタンスを動的に作成
- 単一のドメインで動作し、トラフィックを参加者のJuice Shopインスタンスに送信するLoadBalancerを備えています
- すべての参加者の進捗を表示する便利なリーダーボード
- インスタンス管理のための便利な管理ページ
- Juice Shopコンテナ再起動時のチャレンジ進捗のバックアップと自動適用
- 古い未使用のインスタンスを自動的にクリーンアップ
アーキテクチャと個々のコンポーネントの詳細については、アーキテクチャドキュメントを参照してください。
👉 MultiJuicerを初めて使う方は? 参加者の登録方法、JuiceShopインスタンスの入手方法、スコアボードでのスコア追跡方法については、ビジュアルウォークスルーをご覧ください。
インストール
MultiJuicerはKubernetes上で動作します。インストールにはhelmが必要です。
helm install multi-juicer oci://ghcr.io/juice-shop/multi-juicer/helm/multi-juicer
本番イベントでMultiJuicerを使用する前に設定が必要と思われる値のチェックリストについては、プロダクションノートを参照してください。
JuiceShop v20+のAI/LLM関連チャレンジをサポートするMultiJuicerのセットアップについては、AI/LLM設定ガイドを参照してください。
特定のクラウドプロバイダ/環境向けインストールガイド
一般的にMultiJuicerはほとんどすべてのKubernetesクラスタで動作しますが、Kubernetesに不慣れな方のために、いくつかの特定のクラウドプロバイダ向けにKubernetesクラスタをセットアップしMultiJuicerをインストールするガイドを用意しています。
セットアップのカスタマイズ
スタックのセットアップ方法にはいくつかのオプションがあり、JuiceShopインスタンスを好みに合わせてカスタマイズするオプションがあります。デフォルトの設定値は helm/multi-juicer/values.yaml にあります。
ファイルをダウンロードして保存し、以下のコマンドを実行してhelmにデフォルトの代わりにあなたの設定ファイルを使用するように指示します:
helm install -f values.yaml multi-juicer ./multi-juicer/helm/multi-juicer/
JuiceShopインスタンスとMultiJuicer UIのテーマ(テーマ、ロゴ、有効なチャレンジなど)をカスタマイズするには、JuiceShopカスタマイズガイドを参照してください。
アンインストール
helm delete multi-juicer
FAQ
クラスタにはどの程度の計算リソースが必要ですか?
安全側で見積もるには:
- 1GBのメモリと1CPUのオーバーヘッド、MultiJuicer自体に
- 300MBと0.2CPU × 参加者数/チーム数、個々のJuiceShopインスタンスに
上記の数値はデフォルトのリソース制限を反映しています。これらは調整可能です。セットアップのカスタマイズを参照してください。
MultiJuicerは何人のユーザーを処理できますか?
実際には固定の制限はありません。(設定することは可能ですが😉)個々のインスタンスへのすべてのトラフィックが流れるカスタムLoadBalancerは、好きなだけレプリケートできます。また、Horizontal Pod AutoscalerをアタッチしてLoadBalancerを自動スケーリングすることもできます。
なぜカスタムLoadBalancerなのか?
既存のロードバランサーでは簡単に解決できないいくつかの特別な要件があります:
- デプロイメントのユーザー数を特定のチームのメンバーのみに制限すること。
- ロードバランサーのクッキーは安全で、別のインスタンスにアクセスするためのなりすましが容易であってはならない。
- 新しいインスタンスの起動処理。
カスタムロードバランサーなしでこれらの問題を解決する素晴らしいアイデアがあれば、ぜひお知らせください。ご連絡をお待ちしています!
なぜチームごとに個別のKubernetesデプロイメントなのか?
これにはいくつかの正当な理由があります:
- チームのインスタンスを個別に削除できること。アクティブなチームのインスタンスを削除せずに安全にスケールダウンすることは、スケールドデプロイメントでは非常に困難です。希望するスケールのみを選択でき、どのポッドを保持し、どのポッドを破棄するかは選択できません。
- ポッドが再作成された後も、ポッドがチームに正しく関連付けられていることを保証すること。個別のデプロイメントでは問題になりませんが、スケールドデプロイメントでは非常に困難です。
- チーム名をデプロイメント名に埋め込めること。これは愚かな理由のように思えますが、
kubectlを使うだけでデバッグが非常に簡単になります。
kubectlを使ってJuiceShopを簡単に管理するには?
kubectlのcustom-columns機能を使用して、関連情報とともにすべてのJuiceShopを一覧表示できます。
$ kubectl get -l app.kubernetes.io/name=juice-shop -o custom-columns="TEAM:metadata.labels.team,SOLVED-CHALLENGES:metadata.annotations.multi-juicer\.owasp-juice\.shop/challengesSolved,LAST-REQUEST:metadata.annotations.multi-juicer\.owasp-juice\.shop/lastRequestReadable" deployments
TEAM SOLVED-CHALLENGES LAST-REQUEST
foobar 3 Wed May 4 2042 18:14:22 GMT+0000 (Coordinated Universal Time)
team-42 0 Wed May 4 2042 18:14:30 GMT+0000 (Coordinated Universal Time)
the-empire 0 Wed May 4 2042 18:14:46 GMT+0000 (Coordinated Universal Time)
このプロジェクトはどこから来たのですか?
このプロジェクトはドイツのソフトウェア開発企業iteratecで、自社の開発者とクライアント向けのセキュリティトレーニングを実施するために始まりました。その後、2019年にオープンソース化され、2023年にOWASP組織/OWASP Juice Shopプロジェクトに寄贈されました。
お問い合わせ!
OWASP Slackワークスペースの#project-juiceshopチャンネルでお問い合わせいただけます。フィードバックや使用報告をお聞かせいただけると嬉しいです。まだOWASP Slackワークスペースに参加されていない場合は、このリンクから参加できます。