プログラミング
MXC - サンドボックス化されたコード実行システム
MXC - a sandboxed code execution system (github.com)
要約
MXC (Microsoft eXecution Container) は、Windows、Linux、macOS上で信頼できないコード(モデル出力、プラグイン、ツール)を実行するためのサンドボックス化されたコード実行システムです。OSネイティブのプロセスサンドボックスからフルVMまで、複数のコンテインメントバックエンドを統一されたコンテインメントモデルと型付きSDKの背後に提供します。クロスプラットフォーム対応、JSONベースの設定、多様なコンテインメントバックエンド、ポリシー駆動のサンドボクシング、状態認識ライフサイクル、Rust/.NET/Node.js SDK、診断ツールを備えています。
全文翻訳
MXC - サンドボックス化されたコード実行システム
Microsoft eXecution Container (MXC)
MXCは、Windows、Linux、macOS上で信頼できないコード(モデル出力、プラグイン、ツール)を実行するためのサンドボックス化されたコード実行システムです。OSネイティブのプロセスサンドボックスからフルVMまで、複数のコンテインメントバックエンドを、統一されたコンテインメントモデルと型付きSDKの背後に提供します。
機能
クロスプラットフォーム: プラットフォームに適したコンテインメントバックエンドを備えたWindows、Linux、macOSのサポート
JSONベースの設定: バージョン管理されたコンテナー作成リクエストとセキュリティポリシー
複数のコンテインメントバックエンド: ProcessContainer、Windows Sandbox、LXC、Bubblewrap、Seatbelt、MicroVM (Nanvix)、Hyperlight、IsolationSession、WSLC
ポリシー駆動のサンドボクシング: ファイルシステムポリシー: 読み取り専用、読み取り/書き込み、拒否されたパスリスト
ネットワークポリシー: プロキシサポート、アウトバウンド制御、バックエンド依存のホストフィルタリング
UIポリシー: クリップボード、ディスプレイ、GUIアクセス制御
状態認識ライフサイクル: プロビジョニング、開始、実行、停止、デプロビジョニングされた永続コンテナー
Rust、.NET、Node.js SDK: ワンショット実行および状態認識実行のためのバージョン管理されたAPI
診断: コンテナー内のアクセス拒否エラーを理解するためのツール
MXCとは?
MXCは、アプリケーションに組み込まれるSDK依存関係です。
App[あなたのアプリケーション<br/>起動API] --> SDK[MXC SDK<br/>Rust / .NET / Node<br/>(プロセス内)]
SDK --> Backend[選択されたバックエンド<br/>(プロセス内)]
Backend --> Container[分離されたワークロード<br/>ProcessContainer / WSLC / Bubblewrap / ...]
あなたのアプリケーションは以下を指定します。
コンテナータイプ
コンテインメントルール
ワークロードコマンド
MXCはリクエストを検証し、バックエンドを選択し、結果のコンテナーでワークロードを起動します。
どのコンテナータイプがサポートされていますか?
MXCは、Windows、Linux、macOS上でプラットフォームに適したコンテナーバックエンドを介してワークロードを実行します。
実行プラットフォーム | デフォルトバックエンド | その他のバックエンド | 最小ホストOS | Windows OSバージョンサポート
Windows 11 x64 / ARM64 | processcontainer | windows_sandbox*, wslc, microvm*, hyperlight*, isolation_session | Windows | OSバージョンサポート
Linux x64 / ARM64 | bubblewrap | lxc, microvm, hyperlight | - | -
macOS ARM64 / x64 | seatbelt | - | -
* これらのバックエンドは実験的です。
MXCの使用方法
パッケージマネージャーを通じてSDKをインストールします。このリポジトリをクローンする必要はありません。
SDKパッケージ | URL
Rust | https://crates.io/crates/mxc-sdk
.NET | https://www.nuget.org/packages/Microsoft.Mxc.Sdk
Node.js | https://www.npmjs.com/package/@microsoft/mxc-sdk
Node.jsおよび.NETパッケージには、ネイティブランタイムアセットが含まれています。Rustクレートは、MXC SDK、エンジン、および選択されたバックエンドを、消費するアプリケーションにビルドします。
SDK以外の利用:
wxc-exec.exeのようなプラットフォーム固有の実行可能ファイルは、安定したスキーマで定義されたJSONコンテナー作成リクエストを受け付けます。テスト用、またはSDKをアプリに埋め込めない場合に使用します。
コンテインされたワークロードの実行
完全なSDKサンプルについては、Rust、.NET、Node.jsのサンプルを参照してください。
サンプルNode.jsスニペット
import { spawn, type ContainerRequest } from '@microsoft/mxc-sdk/v1';
const request: ContainerRequest = {
command: 'node -e "console.log(\'hello from container\')"',
network: {
egress: {
default: 'deny',
},
},
timeoutMs: 30_000,
};
const child = await spawn(request);
実行可能なストリーミング標準I/OサンプルとSDK APIリファレンスを参照してください。
私のアプリケーションがサンドボックスで実行されません!
コンテインメントルールを調整する時間がない限り、アプリケーションはサンドボックスでの実行時にアクセス問題に遭遇します。お手伝いします。
デバッグコンソールモード
ネイティブ実行可能ファイルは通常、標準入力、出力、およびエラーをワークロード用に予約します。MXC診断出力には --debug を使用してください。
wxc-exec.exe --debug config.json
MXC診断については、開発者リファレンス全体を参照してください。
監査モード
警告: --audit は、分析中のワークロードのすべてのサンドボックスセキュリティを無効にします。信頼できないコードの実行には絶対に使用しないでください。監査モードは、ポリシー作成者がアクセス拒否エラーを見つけ、信頼されたツールが実際に必要とするファイルと機能を許可するProcessContainerポリシーを再構築するのに役立ちます。
サポートされているWindowsリリースでは、次を実行します。
wxc-exec.exe --audit policy.json
MXCは、観察されたアクセスを記録し、ポリシー作成アーティファクトを生成します。安全な拒否と記録の診断、監査出力、およびサポートされているワークフローについては、ログアクセス拒否を参照してください。
テレメトリ
公式のMicrosoftビルドは、オプションの診断テレメトリをMicrosoftに送信できます。テレメトリは、個々の実行がオプトインし、Windowsユーザーが明示的に同意し、管理ポリシーが収集を許可し、アプリケーションがコンテインされたワークロードリクエストでテレメトリオプションを有効にしない限りオフです。管理者はテレメトリをブロックできますが、ユーザーの同意を付与することはできません。ローカルのオープンソースビルドは、Microsoftへのテレメトリルーティング用に設定されておらず、テレメトリはWindows以外のプラットフォームでは機能しません。制御とプライバシーの詳細については、テレメトリポリシーと同意を参照してください。
ソースからのビルド
MXCを開発している場合、ネイティブランタイムを変更する場合、またはパッケージ化されたSDKの代わりにスタンドアロン実行可能バイナリを使用する場合に、ソースからビルドします。リポジトリビルドは、プラットフォームネイティブのランタイムと実行可能ファイルを生成し、Node.js SDKが使用するネイティブアセットをステージングします。
ビルドの前提条件:
Rust、バージョン1.93にピン留め (src/rust-toolchain.toml による)
Node.js 24以降およびnpm
選択されたバックエンドによって記述されたプラットフォームツールチェーンと前提条件
ビルド
Windows: build.bat --all # 現在のアーキテクチャ用のリリースビルド
Linux: ./build.sh --all # リリースビルド
macOS: ./build.sh --all # ネイティブアーキテクチャ用のリリースビルド
ドキュメント
コンシューマー向けドキュメント | リポジトリの場所 | 目的
SDKサンプル | samples/ | 実行可能なRust、.NET、Node.jsシナリオ
SDK APIリファレンス | docs/api-reference/ | サポートされているV1操作と型
コンテナーライフサイクル | docs/container-lifecycle.md | 永続コンテナーのライフサイクル概要
ログアクセス拒否 | docs/logging-access-denied.md | ブロックされたアクセスの診断とポリシー作成
テレメトリ | docs/telemetry.md | 同意と管理者の制御
バックエンドガイド | docs/backends/ | プラットフォームとバックエンドの前提条件と動作
リポジトリの貢献者は、MXC開発ドキュメントから始めるべきです。
貢献
貢献ガイドラインについては、CONTRIBUTING.mdを参照してください。
ライセンス
詳細については、LICENSE.mdを参照してください。