Google Cloudはマネージドな GKE Agent Sandbox サービスをリリースしました。一方で、オープンソースの kubernetes-sigs/agent-sandbox プロジェクトは、同じ機能をあらゆるKubernetesクラスターに提供します。どちらも、開発者にAIエージェント用の使い捨て可能なLinuxコンテナを提供し、それ以外のインフラには一切影響を与えません。
AI生成コードに「遊び場」が必要な理由
現代のAIエージェントは、単に質問に答えるだけではありません。スクリプトを書き、ウェブを閲覧し、シェルコマンドを実行し、さらにはウェブサービスを立ち上げることもあります。この強力な機能はセキュリティ上のギャップを生みます。生成されたコードにはバグがあったり、悪意があったり、あるいは過剰に攻撃的であったりする可能性があるからです。rm -rf / を実行したり、許可なく内部データベースに接続したりするエージェントは、システム全体を危険にさらす可能性があります。
サンドボックスは、各エージェントを独自のコンテナ(使い捨ての小さな仮想マシン)内に隔離します。エージェントが誤った動作をしても、被害はそのコンテナ内に留まり、ホストや他のワークロードの安全性は保たれます。新しいGKEの提供機能とコミュニティ主導のプロジェクトは、このアイデアをすぐに利用可能なサービスへと変貌させました。
サンドボックスを利用する2つの方法
- GKE Agent Sandbox – Google Cloudの顧客向けのフルマネージドサービス。
kubernetes-sigs/agent-sandbox– あらゆるKubernetesクラスター向けのオープンソースプロジェクト。
どちらも標準的なKubernetesプリミティブに基づいて構築されており、同じコアアーキテクチャを共有しています。
システムの構成
| コンポーネント | 役割 |
|---|---|
| Sandbox | エージェントのコードを実行する隔離されたコンテナ。安定した名前を持ち、必要に応じて永続ストレージを利用できます。 |
| SandboxTemplate | コンテナイメージとセキュリティポリシーを定義する設計図。新しいサンドボックスを作成するための「レシピ」です。 |
| SandboxClaim | 特定のテンプレートからサンドボックスを立ち上げるために、エージェント(またはそのコントローラー)が発行するリクエスト。 |
| SandboxWarmPool | 即座に割り当てられる準備が整った、事前作成済みのサンドボックスのプール。コンテナを「ウォーム」な状態に保つことで、毎回イメージをプルして新しいPodを起動する際のレイテンシを回避します。 |
エージェントが環境を必要とすると、SandboxClaim を発行します。コントローラーはウォームプールを確認し、アイドル状態のサンドボックスを選択して、そのクレームに紐付けます。プールが空の場合は、テンプレートから新しいサンドボックスを作成します。そうでなければ、ミリ秒単位で割り当てが完了します。
調整可能なセキュリティ設定
- デフォルト拒否(Default-deny)ネットワーク – デフォルトでは、サンドボックスは内部ネットワークにアクセスできません。アウトバウンドまたはインバウンドの接続を許可するには、明示的なルールを追加する必要があり、これにより内部サービスが誤って公開されるのを防ぎます。
- 隔離レベル – リスク許容度に合わせてコンテナランタイムを選択できます:
- 速度重視なら、標準的なコンテナ
- 追加のユーザースペース隔離レイヤーが必要なら、gVisor
- 軽量VMのように動作するハードウェア支援型の隔離が必要なら、Kata Containers
- SDK – PythonおよびGoのクライアントライブラリを使用すると、開発者はプログラムによってサンドボックスの作成、取得、破棄を行うことができ、AI駆動のパイプラインのワークフローに適応できます。
メリットを受ける層と、懸念を示す可能性がある層
まとめ
AIエージェントに専用の使い捨てLinux環境を与えることは、AI駆動の自動化における最大の未知数、すなわち「生成されたコードがホストを破壊するリスク」を取り除くことにつながります。Google CloudのマネージドなGKE Agent Sandboxと、コミュニティ運営の kubernetes-sigs/agent-sandbox は、クラウドネイティブ環境とオンプレミス環境の両方において、その隔離を実用的なものにします。俊敏性とセキュリティのバランスを取る必要がある組織は、AI生成コードをサンドボックスという「遊び場」に留めておくための、具体的かつKubernetesネイティブなツールを手にすることになります。
