BLOG
Tech Teardown 029|NVIDIA OpenShell:AIエージェントの安全な実行環境
一、これは何ですか
OpenShellは、NVIDIAが2026年に発表したオープンソースのセキュリティランタイムであり、autonomous AI agentを制約するために特別に設計されました。その基本的な考え方は、agentはタスクを実行できるが、あなたのファイル、ネットワーク、認証情報に無制限にアクセスすることはできないというものです。プロジェクトのリポジトリはGitHubのNVIDIA/OpenShellにあり、2026年10月時点で約17.7kの星と1.8kのフォークがあり、ライセンスはApache-2.0です。リポジトリの主体はRustで、745個の.rsファイルと約65.1万行のコードがあり、36のcrateに分かれています。
これはチャットモデルでもagentフレームワークでもなく、agentの下にある「檻」です。Claude Code、Codex、OpenCode、Copilot CLIなどのコーディングagentに隔離層をかけるものと理解できます。agentは依然として推論やツールの呼び出しを担当しますが、ファイルを読むことができるか、ネットワークに接続できるか、APIキーを使用できるかはOpenShellのポリシーによって決定されます。
NVIDIAはこれを「Open Agent Safety Platform」のソフトウェアベースとして位置づけています。完全な参照アーキテクチャには、Vera CPUとBlueField-4 DPU上のSentry監視も含まれています。ソフトウェア部分は任意のLinux、macOS Apple Silicon、またはWSL2で独立して実行できますが、ハードウェアの強化部分にはNVIDIAのチップスタックが必要です。
なぜ今これが必要なのでしょうか?それはagentの動作方法が変化しているからです。以前のAIツールはほとんど「一問一答」でしたが、現在のコーディングagentは数十分間連続して実行でき、shellを呼び出し、コードを読み込み、依存関係をインストールし、APIを呼び出すことができます。プロンプトが注入されたり、モデルが幻想を生み出したりすると、agentは内部コードを公開ネットワークに送信したり、クラウドクォータを使い果たしたり、さらには生産環境の設定を変更したりする可能性があります。OpenShellが行うべきことは、このような長時間かつ高権限な動作に対して、監査可能で強制実行可能な境界を提供することです。
より広い視点から見ると、OpenShellは業界の懸念に応えるものでもあります。agentが「補助ツール」から「自動化された従業員」へと変わる際、何ができるか、何ができないかを決定するのは誰でしょうか?モデル自体のセキュリティアラインチングだけでは不十分です。なぜなら、agentのタスク自体が危険な操作を行う可能性があるからです。OpenShellの答えは、権限ポリシーを外部に移し、ランタイムで強制実行することで、セキュリティチームがファイアウォールルールを管理するようにagentの境界を管理できるようにすることです。
二、核心メカニズム
OpenShellの核心アーキテクチャは、Gateway、Supervisor、Sandboxの3層に分けられます。
Gatewayは制御プラットフォームであり、サブマシンのライフサイクル、ユーザー認証、ポリシーの適用を管理します。Supervisorは各サブマシンとペアになっており、ワークロードの外で実行され、すべてのアウトバットリクエストが通過する必要がある場所です。Sandboxは、エージェントを実際に実行する隔離環境です。ソースコードにおける主要なcrateはそれぞれopenshell-gateway、openshell-supervisor、openshell-sandboxであり、その中でopenshell-supervisor/src/lib.rsは7200行を超えています。openshell-sandboxの下のsrc/linux/landlock.rs、src/linux/seccomp.rsはLinux上のカーネルレベルの制限を担当しています。
ポリシーは宣言式YAMLで記述されます。単純なネットワークポリシーは次のようになります:どのバイナリがどのホスト、ポート、HTTPメソッドにアクセスできるかを指定し、読み取りまたは書き込み可能かどうかを定めます。ポリシーは静的ドメインと動的ドメインに分かれています:ファイルシステムやプロセスのアイデンティティはサブマシンが作成される際にロックされます;ネットワーク、provider、inferenceルールは実行時にホットロードできます。公式のquickstartではexamples/sandbox-policy-quickstart/policy.yamlが完全な例であり、デフォルトではcurlによるGitHub APIへの読み取り専用アクセスのみが許可されています。
実行時には、OpenShellはネットワークパスにおいて重要な設計を採用しています。エージェントから発行される各アウトバット接続は、supervisor内のHTTP CONNECTプロキシを通過します。ソースコードcrates/openshell-supervisor-network/src/proxy.rsがこのプロセスを処理し、crates/openshell-supervisor-network/src/opa.rsにはOPAエンジンが組み込まれており、YAMLポリシーをRegoにコンパイルし、各リクエストに対してAllow/Deny/Route for inferenceの判断を行います。OPA評価はミリ秒レベルで実行され、プロキシのボトルネックになりません。
証明書処理は別の重要なポイントです。OpenShellはAPIキーをサブマシンのイメージやファイルシステムに記述せず、実行時にProviderメカニズムを通じてバインドします。リクエストがポリシーで許可されたendpointに一致する場合のみ、対応する証明書が環境変数として注入されます。これにより、エージェントが攻撃されてもキーの取得経路が1つ少なくなります。関連する実装はcrates/openshell-core/src/provider_credentials.rsにあります。
最後に形式化検証層があります。openshell-proverは、ポリシー、バイナリ能力、認証範囲をZ3 SMT制約にエンコードし、ポリシー変更前に権限越境やデータ漏洩の可能性をチェックします。ソースコードの入口はcrates/openshell-prover/src/lib.rsで、下層にはz3カートレットが依存しています。これは、ポリシーが有効になる前に検証を実行し、新たなリスクを導入していないことを確認できるという意味です。
隔離実装を見ると、LinuxではLandlock制限ファイルシステム、seccompフィルタリングシステムコール、namespaceを使用してプロセスを隔離しています。openshell-sandbox/src/linux/landlock.rsはパス許可リストを処理し、src/linux/seccomp.rsはseccomp通知を処理し、supervisorがユーザーステージで一部の敏感な呼び出しを仲裁します。この組み合わせにより、サブマシンは完全な仮想マシンを必要とせずに、より厳格な制約を実現できます。
計算バックエンドもモジュール化されています。openshell-gateway/src/lib.rsでは、プラットフォーム条件に応じて異なるcomputeドライバーを登録します:Docker、Podman、Kubernetes、VM(libkrun)、Windows MXC。この設計により、同じポリシーモデルを異なる隔離バックエンドで実行でき、開発テスト用にはDockerを、生産環境ではK8sまたはMicroVMに切り替えることができます。
バイナリアイデンティティは、見過ごされがちなメカニズムです。OpenShellは、ネットワークリクエストを開始する実行ファイルのアイデンティティを認識し、proc/<pid>/cmdline情報と組み合わせて、あるリクエストが許可されたバイナリから来たかどうかを判断します。これにより、エージェントがエンジニアリングを通じてサブプロセスを起動しても、ポリシーは実際のスクリプトの出所を追跡できます。関連するロジックはopenshell-binary-identityとsupervisorのネットワークプロキシに含まれています。
三、技術評価
OpenShellの技術路線は非常に明確です:セキュリティ境界をエージェントの外部に置き、カーネルとポリシーエンジンを使用して強制的な隔離を行い、モデルの自己制約に期待するのではありません。これは、従来の「コンテナ隔離」との最大の違いは、精密さと認証モデルにあります。
通常のコンテナは、ネットワークが通じるかどうかだけを実現できますが、OpenShellはHTTPメソッド、パス、バイナリアイデンティティまで細かく制御できます。例えば、同じGitHub APIであっても、GET /zenは許可されますが、POST issueは拒否されます。コンテナ内のAPIキーは一度注入されると全過程で可視化されますが、OpenShellのProviderのバインディングは、リクエストが認証エンドポイントにヒットしたときだけ認証情報を注入し、漏洩の範囲を縮小します。
コードの規模から見ると、36個のcrate、65万行のRustコードは、これが真の大規模プロジェクトであり、ベータ版ではないことがわかります。中でも、ネットワークエージェントとOPAの統合にはopenshell-supervisor-networkが約1.5万行、OPAエンジンのファイルは1.2万行を超え、sandboxの境界に関連するコードは7000行以上、proverも数千行あります。NVIDIAの公式ブログに掲載されているCoreWeaveのデータによると、Vera CPU上でのsandboxの起動速度はx86より3倍以上速く、agentic loopの実行速度は1.8倍速く、1つのrackで11000以上の並行agent環境をサポートできます。これらの数値はメーカーの自社テスト結果であり、参考にはなりますが、一般的なベンチマークとしては適していません。
他の隔離ソリューションと比較して、OpenShellはコンテナと完全な仮想マシンの間の位置づけです。Dockerはプロセスレベルの隔離のみを提供し、設定は簡単ですが粒度が粗いです。Firecracker MicroVMは仮想マシンに近い隔離を提供しますが、起動と統合コストが高いです。gVisorはユーザーステージでシステム呼び出しの遮断を実現し、互換性は良いですが性能には損失があります。OpenShellは中間的な道を選びました:Landlock/seccompを使用して軽量な隔離を行い、supervisorを使用してL7エージェントと証明書管理を行い、OPAを使用して戦略の表現を行います。この方法はcoding agentのシナリオに最も適しています。なぜなら、agentは頻繁にファイルアクセスやネットワーク呼び出しを行う必要がありますが、ホストマシンの全権限を持つことはできません。
短所も明らかです。まず成熟度です。現在のバージョン0.1.xであり、READMEは安定リリースラインに変更されていますが、Kubernetesのサポートは依然として実験的と記載されており、初期の宣伝ページには「Alpha software — single-player mode」と書かれています。次に、形式化検証のカバレッジです。proverが証明できるのは戦略モデル内の性質であり、LLMの非決定性、ヒントの注入、モデル化されていないインタラクションパスは証明範囲外です。第三に、デプロイメントの複雑さです。実際に動作させるには、DockerやPodman、LandlockがサポートするLinuxカーネル、またはVera/BlueField-4の完全なリファレンスアーキテクチャが必要です。一般開発者はローカルで体験できますが、企業での実装にはかなりの統合コストが必要です。
エコシステムについては、OpenShellはインストール可能なagent skillsを公開しており、skills/ディレクトリにあり、npx skills add NVIDIA/OpenShellでインストールできます。これらのskillは、coding agentに戦略の書き方やgatewayのデバッグ、inference問題の調査方法を教えます。リポジトリ自体もagent駆動のワークフローで開発されており、.agents/skills/にはtriage、security review、spike-buildなどの自動化プロセスがあります。
四、価値判断
OpenShellが解決するのは、エージェントがコードを書き、APIを呼び出し、長時間動作できるようになったときに、内部コードを外部に送信したり、APIキーをログに記録したり、またはデマンド注入によって本来実行すべきでないコマンドを実行するのを防ぐ方法についてです。
その価値は主に3つのシナリオで表れます。第一に、セキュアコーディングエージェントです:Claude CodeやCodexなどのツールに制限された環境を提供し、指定されたリポジトリとAPIのみにアクセスできるようにします。第二に、流出防止のインферンスルーティングです:モデルの呼び出しを企業がコントロールできるエンドポイントに強制転送し、エージェントがどのモデルに接続するかを自ら決定させないようにします。第三に、コンプライアンス監査です:すべてのallow/denyをOSF形式のログに記録し、セキュリティチームの可観測性要件を満たします。
適用対象となる人々を見ると、OpenShellが最も必要なのは、エージェントに実際のコードライブラリ、実際のAPI、実際のインフラストラクチャにアクセスさせているチームです。個人の開発者にとっては、リスクは小さく、インストールするかどうかで大きな違いはありません。しかし、大量のプライベートコード、顧客データ、クラウドリソースを持つ企業にとっては、エージェントの誤操作が実際の損失をもたらす可能性があります。OpenShellは、このようなリスクを「制御不可能」から「戦略的に管理可能」へと変えます。
しかし、その境界も明確です。エージェントが認可された範囲内で悪いことをするのを防ぐことはできません。例えば、読み取りが許可されているファイルに機密情報が含まれている場合です。また、コードレビューやモデルセキュリティテスト、サプライチェーンのセキュリティを代替することもできません。言い換えれば、OpenShellは「できるかどうか」を管理し、「正しく実行できるかどうか」ではありません。
もう一つ注意すべき点は、その真の力はハードウェアスタックを組み合わせることで最大限に発揮されます。単独のOpenShellだけではソフトウェア的な制限が可能ですが、BlueField-4 DPUとSentryを組み合わせると、エージェントが触れられないハードウェアレベルの監視と隔離が実現できます。金融、医療、チップ設計などの高リスクシナリオにおいては、このソフトウェアとハードウェアの組み合わせが最も魅力的です。
五、実装方法
インストールは非常に簡単で、1つのコマンドで済みます:
curl -LsSf https://raw.githubusercontent.com/NVIDIA/OpenShell/main/install.sh | sh
その後、サブマシンを作成します:
openshell sandbox create --name demo --policy examples/sandbox-policy-quickstart/policy.yaml
サブマシンはデフォルトでほとんど外部ネットワークに接続できません。エージェントが特定のサービスにアクセスすることを許可するには、YAMLポリシーを編集し、openshell policy setまたはopenshell policy updateを実行する必要があります。実際のエージェントを実行したい場合は、openshell sandbox create --claudeまたは--codexを使用します。OpenShellは、ローカルで設定されたANTHROPIC_API_KEY、OPENAI_API_KEYなどの証明書を自動的に認識します。
Providerのカスタムプロセスも理解する価値があります。まず、openshell provider profile importを使ってprovider profileをインポートし、アクセス許可のあるendpointと必要な証明書を宣言します。次に、openshell provider createを使ってproviderインスタンスを作成します。最後に、サブマシンを作成する際に --providerオプションを追加します。このようにして、サブマシンのエージェントが見るのはプレースホルダ変数であり、実際のキーはsupervisorがリクエストがポリシーチェックを通過した後に注入します。
CI/CDに統合したいチームの場合、OpenShellはGitHub Actionsの例を提供しています。ワークフローステップでCLIをインストールし、バージョン管理のYAMLポリシーでサブマシンを作成し、エージェントを実行した後、--no-keepオプションを追加して自動的に破棄します。このようにして、セキュリティポリシー自体もコードレビューや監査に利用できます。
選定のヒント:Claude Code/Codex/OpenCodeなどのcoding agentを既に使用しており、それらがローカルファイルやネットワークを無制限にアクセスすることを心配している場合、OpenShellを試す価値があります。一般的な開発者で、たまにAIを利用した編集を行うだけの場合、そのメリットは導入コストにはなりません。生産環境で大規模なエージェントクラスターを構築することを目指している場合は、Kubernetesがより成熟したサポートを提供するまで待ってから評価することをお勧めします。
6. 自ら同様のソリューションを構築する方法
OpenShellを使用しない場合でも、自らエージェントのセキュアな実行環境を構築したい場合は、以下の6ステップから始めましょう:
- Docker、Podman、またはFirecracker MicroVMなどの軽量な隔離バックエンドを選択し、各エージェントに独立したコンテナを割り当てます。
- デフォルトですべてのアウトバウンドネットワークを拒否し、プロキシを使ってすべてのHTTP/HTTPSリクエストを遮断します。
- ポリシーをYAMLまたはJSON形式で記述し、どのバイナリ、ユーザー、endpointがアクセス可能か、および読み取り、書き込み、POST、GETなどの権限を宣言します。
- APIキーをサブマシンの外に置き、プロキシがリクエストがホワイトリストに該当する場合にキーを注入します。起動時にコンテナに挿入するのではなく。
- seccompまたはLandlockを使ってファイルシステムのアクセス範囲を制限し、setuid、sudoなどの権限昇格行為を禁止し、同時にエージェントが実際に必要とする読み取り専用パスのみを公開します。
- すべてのallow/denyログを記録し、定期的にポリシーの変更を監査します。
3番目のステップは最も過小評価されがちです。多くのチームは「api.github.comにアクセスを許可する」だけで十分だと思っていますが、実際に運用する際にはメソッド、パス、バイナリアイデンティティまで詳細化する必要があります。これらの次元がなければ、エージェントは異なるツールやスクリプトを使って本来の目的を回避することができます。5番目のステップも注意が必要です:読み取り専用パスに.envや~/.sshが含まれている場合、鍵が漏れる可能性があるため、最小権限原則を徹底する必要があります。
このプラットフォームはOpenShellのOPA/Regoの深さ、proverによる形式化検証、およびNVIDIAのハードウェアエコシステムには及ばないが、中小規模のチームにとっては典型的なリスクの80%をカバーできる。
結論
OpenShellは、エージェントセキュリティインフラにおいて真剣に検討すべき製品である。これはモデルセキュリティでもアプリケーションセキュリティでもなく、実行時層にセキュリティ境界を設けるものだ。エージェントが実際に動作するチームにとっては、このステップは必然的に踏まれるべきものである。現在の0.1.xバージョンは試験的な使用や小規模なプロジェクトに適しているが、大規模な実用化にはKubernetesの成熟度とコミュニティエコシステムを継続的に監視することが推奨される。
参考文献
- GitHubリポジトリ:NVIDIA/OpenShell, https://github.com/NVIDIA/OpenShell
- NVIDIA公式サイト:https://www.nvidia.com/en-us/ai/openshell/
- 公式ドキュメント:https://docs.nvidia.com/openshell/latest
- NVIDIA技術ブログ:Inside NVIDIA Sentry: Secure AI Agents at Runtime, https://developer.nvidia.com/blog/inside-nvidia-sentry-secure-ai-agents-at-runtime
- NVIDIA技術ブログ:How NVIDIA OpenShell Reference Architecture Secures and Governs AI Agent Workloads at Scale, https://developer.nvidia.com/blog/how-nvidia-openshell-reference-architecture-secures-and-governs-ai-agent-workloads-at-scale
- NVIDIAプレスリリース:NVIDIA Launches Open Agent Safety Platform, https://nvidianews.nvidia.com/news/open-agent-safety-platform