Cloudflare Sandboxes が GA — AIエージェント実行環境を「自社で持たない」受託設計 2026 | GH Media
URLがコピーされました

Cloudflare Sandboxes が GA — AIエージェント実行環境を「自社で持たない」受託設計 2026

URLがコピーされました
Cloudflare Sandboxes が GA — AIエージェント実行環境を「自社で持たない」受託設計 2026

「エージェントが書いたコードを実行させたいが、社内インフラには絶対に直接走らせたくない」「ブラウザ操作系のエージェントを動かす VM を増やすたび運用コストが膨らむ」——4 月以降、エージェントの 実行環境(ランタイム)に関する相談が一気に増えました。背景には、Cloudflare が AI エージェント向けの永続化対応隔離実行環境「Cloudflare Sandboxes」を GA(一般提供)に格上げしたことがあります。エージェントが任意コードを実行・ファイル操作・ブラウザ操作する際の隔離環境を、自社で持たずに Cloudflare 側に寄せられるようになりました。

本記事では、エージェントが「実行する側」になる時代の受託設計指針と、既存サンドボックス基盤(自前 K8s / Firecracker / コンテナ)からの移行ステップを整理します。

なぜ「エージェント専用サンドボックス」が必要なのか

「エージェントが書いたコードを動かす」という要件は、2026 年現在ほぼすべての本格的なエージェント案件で発生します。しかし、これを既存のインフラに直接走らせるのは複数の意味で危険です。

リスク影響
任意コード実行社内ネットワーク全体への横展開
永続化されないファイル系操作エージェントの状態が次回ターンで消える
ブラウザ操作の VM コスト1 セッションごとに VM 起動が必要
監査証跡の断絶何のコードが何のリソースを触ったか不明

これらを「自社で K8s + Firecracker + ストレージ + ネットワーク隔離」で組むと、インフラチーム 2〜3 名張り付きの構成になります。Cloudflare Sandboxes は、ここを丸ごと引き受けてくれるため、受託案件で組むときの責任分界点が明確になります。

アーキテクチャ全体像

弊社が受託案件で標準化している構成は次の 4 層です。

  1. エージェント層 — Claude / Gemini / OpenAI(Workers AI 上または外部)
  2. オーケストレーション層 — Workers / Durable Objects、ツール呼び出し管理
  3. 隔離実行層(Cloudflare Sandboxes) — 永続ファイルシステム付き隔離 VM
  4. 業務 UI 層 — Slack / 社内ポータル / Web UI

エージェントが「コードを書いて実行する」「ブラウザを操作する」「ファイルを保存する」という処理は、すべて Sandboxes 内で完結させます。エージェントは外側から命令するだけで、本体ロジックは Sandbox に閉じ込めるのがセキュリティの肝です。

受託で押さえる 5 つの設計指針

1. 「セッション = サンドボックス」マッピングを明確にする

Cloudflare Sandboxes は永続化されているため、次回呼び出し時に前回の状態を引き継げます。受託で組むときに最初に決めるのは 「サンドボックスの単位は何か」 です。

マッピング適用例
ユーザー単位ChatGPT 風の対話エージェント
プロジェクト単位顧客プロジェクト用の調査エージェント
タスク単位1 回のジョブで使い捨て

ユーザー単位だと長期コンテキストが豊かになる反面、データ保持責任が重くなります。プロジェクト単位が、受託案件ではバランスが良いことが多いです。

2. 入出力境界での「Sanitize」を必ず入れる

エージェントが Sandbox 内で吐いたコマンドや結果を、外部に渡す前に必ずサニタイズします。

async function runInSandbox(sandboxId: string, code: string) {
  const result = await env.SANDBOX.get(sandboxId).exec({
    language: "python",
    code,
    timeout_ms: 30_000,
    network: "deny",  // デフォルトで外向き通信は拒否
  });
  return {
    stdout: redactSecrets(result.stdout),
    stderr: redactSecrets(result.stderr),
    files: result.files.filter(f => isAllowedPath(f.path)),
  };
}

ポイントは network: "deny" をデフォルトにし、必要なドメインだけ allowlist で開けることです。これだけで、SSRF や外部送信系の事故を大幅に減らせます。

3. ストレージは「セッション内 / セッション間」で分離

Cloudflare Sandboxes の永続ストレージは便利ですが、用途を整理しないとデータの寿命が把握不能になります。受託案件では次の 3 階層で整理しています。

  • セッション内(揮発): /tmp 相当、セッション終了で破棄
  • セッション間(永続): /workspace 相当、サンドボックス単位で保持
  • 永続ストレージ(外部): R2 / KV、サンドボックス越しに保存

「ユーザーが次回も使うファイル」は /workspace、「他ユーザーと共有する成果物」は R2、と明確に分けます。

4. 監査証跡は「Sandbox 起動 / コマンド実行 / ファイル変更」の 3 階層で残す

監査要件があるエンタープライズ案件では、次の 3 階層を別ストレージに永続化します。

- sandbox_id ─┬─ start_event (user_id, project_id, started_at)
              ├─ command_event (cmd, exit_code, duration_ms)
              └─ file_event (path, op, size, hash)

特に 「どの会話でどのコードが実行され、どのファイルが書き込まれたか」conversation_id まで紐づけて残しておくと、PII 漏洩や誤実行の事後検証が圧倒的に速くなります。

5. コスト管理は「タイムアウト × アイドル破棄」で

Cloudflare Sandboxes は永続化が便利な反面、放置するとサンドボックスがどんどん溜まります。受託では次の 2 つを必ず仕込みます。

  • コマンド実行タイムアウト: 30 秒〜 5 分(用途による)
  • アイドル時の自動破棄: 24 時間アクセスがなければ削除

これだけで月額コストの肥大を 7〜8 割抑えられます。

既存サンドボックス基盤からの移行ステップ

「すでに自前で Firecracker / K8s ベースのサンドボックス基盤を持っている」案件では、いきなり全面切り替えではなく段階移行が安全です。

Step 1: 新規ユースケースだけ Cloudflare Sandboxes へ

既存基盤はそのまま、新規エージェント案件のみ Cloudflare Sandboxes で実装。

Step 2: 短命サンドボックスから移行

タスク単位の使い捨てサンドボックス(コード実行、Web スクレイピング)を先に移行。

Step 3: 永続セッションの移行

ユーザー単位 / プロジェクト単位のサンドボックスを、データ移行とともに切り替え。

Step 4: 自前基盤の縮退

トラフィックを Cloudflare 側に寄せきった後、自前基盤の運用を縮退。

弊社が OpenAI Agents SDK v2 のサンドボックス・メモリ運用 で整理した「実行環境とエージェントの責任分離」は、Cloudflare Sandboxes でも同じ整理が活きます。

適用判断 — Cloudflare Sandboxes が「向く」ケース、「向かない」ケース

ケース向く / 向かない理由
一般的な業務エージェント向くWorkers/Durable Objects との統合がスムーズ
ブラウザ操作系エージェント向くヘッドレスブラウザを Sandbox 内で完結
機密データを扱う基幹連携要検討データ保管場所のリージョン要件次第
GPU が必要な ML ワークロード向かないSandboxes は CPU 中心
100ms 未満のレイテンシ要件要検討コールドスタート設計を別途必要

「向く / 要検討 / 向かない」の判断は、受託の初期ヒアリングで必ず確認します。誤った判断のまま PoC を進めると、後段で大幅な手戻りになります。

Anthropic Computer Use を業務に組み込むガイド で触れたブラウザ操作系のサンドボックス要件は、Cloudflare Sandboxes と組み合わせる場合の好適例です。

まとめ

Cloudflare Sandboxes の GA は、エージェントが「実行する側」に回る時代に、自社で隔離環境を運用しなくて済む現実解を提供します。受託で押さえる 5 点は次の通りです。

  1. セッション = サンドボックスのマッピングを最初に決める
  2. 入出力境界で Sanitize、ネットワークはデフォルト deny
  3. ストレージを「セッション内 / セッション間 / 外部」の 3 階層で分離
  4. 監査証跡を 3 階層で残す
  5. タイムアウトとアイドル破棄でコストを抑制

弊社では Cloudflare Sandboxes を採用したエージェント案件を進めています。「自前でサンドボックスを運用するコストが重い」「セキュリティ部門の承認が下りない」案件があれば、お気軽にご相談ください。

URLがコピーされました

グリームハブ株式会社は、変化の激しい時代において、アイデアを形にし、人がもっと自由に、もっと創造的に生きられる世界を目指しています。

記事を書いた人

鈴木 翔

鈴木 翔

技術の可能性に魅了され、学生時代からプログラミングとデジタルアートの分野に深い関心を持つ

関連記事