AI News HubLIVE
站内改写4 分で読了

Fedora LinuxでマイクロVMを使ってAIコーディングエージェントを隔離する

Claude CodeやCodexのようなAIコーディングエージェントは強力だが、全コマンドを許可するのは危険。この記事では、Fedora Linux上でPodmanのkrunランタイムを使用してマイクロVMでエージェントを隔離する方法を紹介する。コンテナよりも強力なセキュリティを提供し、詳細な手順と実際の例(Pythonプロジェクト)を説明する。ただし、マイクロVMは完全な隔離ではない。

ソースHacker News AI著者: vitorsr

AIコーディングエージェント(Claude CodeやCodexなど)は毎月能力が向上しており、生産性向上に役立ちます。しかし、すべてのコマンドを承認するのは煩わしく、一方でエージェントに作業マシン上の任意のコマンドを実行させるのは危険です。エージェントはkubectlで本番クラスタを探索したり、SSHで本番サーバーにリモートコマンドを実行したりするのが非常に得意です。

幸い、Linuxディストリビューションにはプロセス分離のための多くのオプションがあります。エージェントを完全に別のユーザーとして、コンテナ内で、またはVM内で実行できます。この記事では、マイクロVM(microVM)を使ってコーディングエージェントを隔離する方法を説明します。

セキュリティ上の懸念

AIエージェントを無人モードで実行することは、信頼できないコードを実行することに似ています。AnthropicやGoogleといったエージェントの背後にある企業は認証情報を盗もうとはしていませんが、Slopsquattingやプロンプトインジェクションなどの新しい攻撃ベクトルが次々に登場しています。

コーディングエージェント自体には、プロンプトインジェクションを拒否するための組み込みの緩和策が用意されています。例えば、軽量サンドボックス技術(Linuxではbwrap)がもう一つの防御層となります。しかし、サンドボックスエスケープは依然として問題です。CVE-2026-39861はマルチプラットフォームのサンドボックスエスケープの例です。

コンテナを使用してエージェントを独自の名前空間に隔離することはできますが、ホストカーネルを共有します。最近のカーネル脆弱性のいくつかは権限昇格(通常ユーザーからrootへの切り替え)をもたらし、コンテナだけではセキュリティ境界として不十分であることを示唆しています。

マイクロVMの探求

まず、マイクロVMとは何かを見てみましょう。他のVMと同様に、それぞれ独自のカーネルを持ちます。従来のVMと比較して、非常に短い時間(数百ミリ秒)で起動しますが、完全なVMのすべての機能を提供するわけではありません。

この記事では、Podmanのkrunランタイムの使用法を説明します。このアプローチはコンテナと同様のワークフローを提供しますが、すべてのコンテナをマイクロVMとして実行します。

ランタイムのインストール:

dnf install crun-krun

マイクロVMを実行するには、ターミナルで--runtime=krunオプションを付けてPodmanを実行します:

podman run --runtime=krun --rm -it fedora:44 /bin/bash

注意点

マイクロVMは通常のコンテナではないため、いくつかの動作が異なる場合があります。まず、krunアノテーションで十分なCPUとRAMを割り当ててください。デフォルトは小さすぎてOOM(メモリ不足)による強制終了が発生する可能性があります。次に、libkrunのバージョンが1.8以上であることを確認してください。古いバージョンでは、コーディングエージェントでEnterキーが押せなくなるバグがあります。第三に、マイクロVMはDockerfileで設定されたUSERを無視し、常にrootとして起動します。手動で適切なユーザーに切り替えるか、エントリポイントスクリプトに切り替え処理を記述してください。

実践:PythonプロジェクトでClaude Codeを隔離

このセクションでは、uvで管理されたPythonプロジェクトの簡単な設定を概説します。podman-composeを使用してプロジェクトをマイクロVMにマウントします。コンテナと比較して、このpodman-composeにはUID/GID変換、SELinuxラベリング、およびHWリソースのための追加アノテーションが必要です。最終的な設定はコンテナに必要なものと非常に似ています。

podman-composeのインストール:

dnf install podman-compose

設定は3つの部分からなります:Dockerfile、docker-compose.yaml、entrypoint.sh。

Dockerfile:Fedora:44をベースに、ホストのUID/GIDに一致する非特権ユーザーを作成し、uvとClaude Codeをインストールし、エントリポイントスクリプトをコピーします。USER appuserを最後に置きますが、krunはこれを無視するため、エントリポイントスクリプトでユーザー切り替えを処理します。

docker-compose.yaml:サービスクロードを定義し、アノテーションでkrunランタイムとハードウェアリソースを指定します。user: "${HOST_UID}:${HOST_GID}"userns_mode: keep-idでUID/GIDマッピングを実現します。ボリュームラベルU,zは、それぞれ再帰的なchownとSELinuxの再ラベリングを処理します。

entrypoint.sh:現在のユーザーを確認し、appuserでなければuv syncを実行後にrunuserでappuserに切り替えてコマンドを実行。appuserの場合は直接実行します。

実行手順

コンテナのビルド:

$ HOST_UID=$(id -u) HOST_GID=$(id -g) podman-compose -f .agent-sandbox/docker-compose.yaml build

外部ボリュームを作成して対話的に実行:

$ podman volume create claude-config
$ HOST_UID=$(id -u) HOST_GID=$(id -g) podman-compose -f .agent-sandbox/docker-compose.yaml run --rm claude

マイクロVM内でuname -aを実行すると、カーネルが異なることを確認できます。

ワンクリックセットアップスクリプト

上記の設定を手動で繰り返すのは面倒ですが、シンプルなスクリプトで自動化できます。sbxコマンドをインストールし、init、build、runの3つのサブコマンドを提供します。

注意:マイクロVMは絶対安全ではない

マイクロVMはハードルを大幅に上げますが、完全な分離ではありません。危険なソフトウェアを実行する場合は、完全なVMまたはクラウドVMを使用することを推奨します。

結論

マイクロVMはAIエージェントを実行するのに最適な選択肢と思われます。コンテナと同様のワークフローを提供しながら、エージェントはハイパーバイザーの背後にある独自のカーネル上で実行されます。この記事ではFedora LinuxにネイティブなPodmanとkrunランタイムを使用したワークフローを説明しましたが、他のプラットフォームにも多くのオプションがあります(例:dockersandbox)。

注:AI利用について:この記事は私自身が執筆しました。Claude(Anthropic)を使用して文法、表現、文構造を大幅に改善しましたが、技術的内容と主張はすべて私自身のものであり、テスト済みです。