Windows サンドボックス構成
Windows サンドボックスではシンプルな構成ファイルがサポートされており、サンドボックス用のカスタマイズ パラメーターの最小セットを提供しています。 この機能は、Windows 10 ビルド 18342 または Windows 11 で使用できます。 Windows サンドボックスの構成ファイルは XML 形式で、.wsb
ファイル拡張子を介してサンドボックスに関連付けられています。
構成ファイルを使用して、ユーザーは Windows サンドボックスの次の側面を制御できます:
- vGPU (仮想 GPU): 仮想化された GPU を有効または無効にします。 vGPU が無効になっている場合、サンドボックスでは Windows Advanced Rasterization Platform (WARP) が使用されます。
- ネットワーク: サンドボックス内でネットワーク アクセスを有効または無効にします。
- マップ済みフォルダー: "読み取り" または "書き込み" アクセス許可を持つホストからフォルダーを共有します。 ホスト ディレクトリを公開すると、悪意のあるソフトウェアがシステムに影響を与えたり、データを盗んだりする可能性があります。
- Logon コマンド: Windows サンドボックスの起動時に実行されるコマンドです。
- オーディオ入力: ホストのマイク入力をサンドボックスに共有します。
- ビデオ入力: ホストの Web カメラ入力をサンドボックスに共有します。
- 保護されたクライアント: リモート デスクトップ プロトコル (RDP) セッションのセキュリティ設定をサンドボックスに配置します。
- プリンター リダイレクト: プリンターをホストからサンドボックスに共有します。
- クリップボード リダイレクト: ホスト クリップボードをサンドボックスと共有して、相互にテキストとファイルを貼り付けることができるようになります。
- メモリ (MB 単位): サンドボックスに割り当てるメガバイト単位のメモリの量です。
注
現在、サンドボックス ウィンドウのサイズは構成できません。
構成ファイルを作成する
構成ファイルを作成するには、次の操作を行います。
プレーン テキスト エディターまたはソース コード エディター (メモ帳、Visual Studio Code など) を開きます
次の行を挿入します:
<Configuration> </Configuration>
2 つの行の間に適切な構成テキストを追加します。 詳細については、 例を参照してください。
ファイルを任意の名前で保存します。ただし、ファイル名の拡張子が
.wsb
であることを確認します。 メモ帳では、ファイル名と拡張子を二重引用符で囲む (例:"My config file.wsb"
) 必要があります。
構成ファイルを使用する
構成ファイルを使用するには、それをダブルクリックして、その設定に従って Windows サンドボックスを開始します。 次に示すように、コマンド ラインを使用して呼び出すこともできます。
C:\Temp> MyConfigFile.wsb
キーワード、値、制限
vGPU
GPU 共有を有効または無効にします。
<vGPU>value</vGPU>
サポートされている値:
- Enable: サンドボックス内で vGPU のサポートを有効にします。
- Disable: サンドボックス内で vGPU のサポートを無効にします。 この値が設定されている場合、サンドボックスはソフトウェア レンダリングを使用します。これは仮想化された GPU よりも遅くなる可能性があります。
- Default この値は vGPU サポートの既定値です。 現在、この既定値は vGPU が有効になっていることを示します。
注
仮想化された GPU を有効にすると、サンドボックスの攻撃面が増加する可能性があります。
ネットワーク
サンドボックス内でネットワークを有効または無効にします。 ネットワーク アクセスを無効にして、サンドボックスによってさらされる攻撃面を減らすことができます。
<Networking>value</Networking>
サポートされている値:
- Enable: サンドボックス内でネットワークを有効にします。
- Disable: サンドボックス内でネットワークを無効にします。
- Default: この値はネットワーク サポートの既定値です。 この値は、ホストに仮想スイッチを作成してネットワークを有効にし、仮想 NIC を介してサンドボックスをそれに接続します。
注
ネットワークを有効にすると、信頼されていないアプリケーションが内部ネットワークにさら公開される可能性があります。
マップ済みフォルダー
フォルダーの配列。それぞれが、指定されたパスにあるサンドボックスと共有されるホスト コンピューター上の場所を表します。 現時点では、相対パスはサポートされていません。 パスが指定されていない場合、フォルダーはコンテナー ユーザーのデスクトップにマップされます。
<MappedFolders>
<MappedFolder>
<HostFolder>absolute or relative path to the host folder</HostFolder>
<SandboxFolder>absolute path to the sandbox folder</SandboxFolder>
<ReadOnly>value</ReadOnly>
</MappedFolder>
<MappedFolder>
...
</MappedFolder>
</MappedFolders>
- HostFolder: サンドボックスに共有するホスト コンピューター上のフォルダーを指定します。 フォルダーはホスト上に既に存在している必要があります。または、コンテナーの起動に失敗します。
- SandboxFolder: フォルダーをマップするサンドボックス内のマップ先を指定します。 フォルダーが存在しない場合は、作成されます。 サンドボックス フォルダーが指定されていない場合、フォルダーはコンテナー デスクトップにマップされます。
- ReadOnly: true の場合、コンテナー内から共有フォルダーへの読み取り専用アクセスが適用されます。 サポートされる値: true/false。 既定値は false です。
注
ホストからマップされたファイルとフォルダーは、サンドボックス内のアプリによるセキュリティ侵害を受けたり、ホストに影響を与えたりする可能性があります。
Logon コマンド
サンドボックスのログオン後に自動的に呼び出される単一のコマンドを指定します。 サンドボックス内のアプリは、コンテナー ユーザーのアカウントで実行されます。 コンテナー ユーザーのアカウントは管理者アカウントである必要があります。
<LogonCommand>
<Command>command to be invoked</Command>
</LogonCommand>
Command: サインイン後に実行されるコンテナー内の実行可能ファイルまたはスクリプトへのパスです。
注
非常に単純なコマンド (実行可能ファイルやスクリプトの起動など) も機能しますが、複数の手順が含まれたより複雑なシナリオをスクリプト ファイルに配置する必要があります。 このスクリプト ファイルは、共有フォルダーを介してコンテナーにマップし、その後 LogonCommand ディレクティブを使用して実行できます。
オーディオ入力
サンドボックスへのオーディオ入力を有効または無効にします。
<AudioInput>value</AudioInput>
サポートされている値:
- Enable: サンドボックス内でオーディオ入力を有効にします。 この値が設定されている場合、サンドボックスはユーザーからオーディオ入力を受け取ることができます。 マイクを使用するアプリケーションでは、この機能が必要な場合があります。
- Disable: サンドボックス内でオーディオ入力を無効にします。 この値が設定されている場合、サンドボックスはユーザーからオーディオ入力を受信できません。 マイクを使用するアプリケーションは、この設定では正しく機能しない場合があります。
- Default: この値は、オーディオ入力のサポートの既定値です。 現時点では、この既定値はオーディオ入力が有効になっていることを示します。
注
ホスト オーディオ入力をコンテナーに公開すると、セキュリティへの影響が生じる可能性があります。
ビデオ入力
サンドボックスへのビデオ入力を有効または無効にします。
<VideoInput>value</VideoInput>
サポートされている値:
- Enable: サンドボックス内でビデオ入力を有効にします。
- Disable: サンドボックス内でビデオ入力を無効にします。 ビデオ入力を使用するアプリケーションがサンドボックスで正しく機能しない場合があります。
- Default: この値は、ビデオ入力サポートの既定値です。 現時点では、この既定値はビデオ入力が無効になっていることを示します。 ビデオ入力を使用するアプリケーションがサンドボックスで正しく機能しない場合があります。
注
ホスト ビデオ入力をコンテナーに公開すると、セキュリティへの影響が生じる可能性があります。
保護されたクライアント
保護されたクライアント モードが有効になっている場合、サンドボックスは AppContainer 分離実行環境内で実行することで、セキュリティ境界の新しいレイヤーを追加します。
AppContainer 分離では、資格情報、デバイス、ファイル、ネットワーク、プロセス、ウィンドウの分離が提供されます。
<ProtectedClient>value</ProtectedClient>
サポートされている値:
- Enable: Windows サンドボックスを保護されたクライアント モードで実行します。 この値が設定されている場合、サンドボックスは AppContainer 分離で実行されます。
- Disable: 追加のセキュリティ軽減策を適用せずに、サンドボックスを標準モードで実行します。
- Default: この値は、保護されたクライアント モードの既定値です。 現時点では、この既定値はサンドボックスが保護されたクライアント モードで実行されないことを示します。
注
この設定により、ユーザーがサンドボックスへ、またサンドボックスからファイルをコピー/貼り付ける能力が制限される可能性があります。
プリンターのリダイレクト
ホストからサンドボックスへのプリンター共有を有効または無効にします。
<PrinterRedirection>value</PrinterRedirection>
サポートされている値:
- Enable: サンドボックスとのホスト プリンターの共有を有効にします。
- Enable: サンドボックス内でプリンター リダイレクトを無効にします。 この値が設定されている場合、サンドボックスはホストからプリンターを表示できません。
- Default: この値は、プリンター リダイレクト サポートの既定値です。 現時点では、この既定値はプリンターのリダイレクトが無効になっていることを示します。
クリップボードのリダイレクト
サンドボックスとのホスト クリップボードの共有を有効または無効にします。
<ClipboardRedirection>value</ClipboardRedirection>
サポートされている値:
- Enable: サンドボックスとのホスト クリップボードの共有を有効にします。
- Disable: サンドボックス内でクリップボードのリダイレクトを無効にします。 この値が設定されている場合、サンドボックスのコピー/貼り付けとサンドボックス外へのコピー/貼り付けは制限されます。
- Default: この値は、クリップボード リダイレクトの既定値です。 現時点では、ホストとサンドボックスの間のコピー/貼り付けは Default で許可されています。
メモリ (MB 単位)
サンドボックスが使用できるメモリの量をメガバイト (MB) 単位で指定します。
<MemoryInMB>value</MemoryInMB>
指定されたメモリ値がサンドボックスを起動するのに不十分な場合は、必要な最小量に自動的に増加します。
例
例 1
次の構成ファイルを使用すると、ダウンロードしたファイルをサンドボックス内で簡単にテストできます。 このテストを実行できるよう、ネットワークと vGPU は無効化され、サンドボックスには共有ダウンロード フォルダーへの読み取り専用アクセスが許可されます。 便宜上、logon コマンドは、サンドボックスの起動時にサンドボックス内のダウンロード フォルダーを開きます。
Downloads.wsb
<Configuration>
<vGpu>Disable</vGpu>
<Networking>Disable</Networking>
<MappedFolders>
<MappedFolder>
<HostFolder>C:\Users\Public\Downloads</HostFolder>
<SandboxFolder>C:\Users\WDAGUtilityAccount\Downloads</SandboxFolder>
<ReadOnly>true</ReadOnly>
</MappedFolder>
</MappedFolders>
<LogonCommand>
<Command>explorer.exe C:\users\WDAGUtilityAccount\Downloads</Command>
</LogonCommand>
</Configuration>
例 2
次の構成ファイルは、Visual Studio Code をサンドボックスにインストールし、これは少し複雑な LogonCommand セットアップを必要とします。
2 つのフォルダーがサンドボックスにマップされます。最初の (SandboxScripts) には、Visual Studio Code をインストールして実行するVSCodeInstall.cmdが含まれています。 2 つ目のフォルダー (CodingProjects) には、開発者が Visual Studio Code を使用して変更するプロジェクト ファイルが含まれていることが想定されます。
Visual Studio Code インストーラー スクリプトが既にサンドボックスにマップされている場合、LogonCommand はそれを参照できます。
VSCodeInstall.cmd
VS Code をフォルダー downloads
にダウンロードし、フォルダーからインストール downloads
実行します。
REM Download Visual Studio Code
curl -L "https://update.code.visualstudio.com/latest/win32-x64-user/stable" --output C:\users\WDAGUtilityAccount\Downloads\vscode.exe
REM Install and run Visual Studio Code
C:\users\WDAGUtilityAccount\Downloads\vscode.exe /verysilent /suppressmsgboxes
VSCode.wsb
<Configuration>
<MappedFolders>
<MappedFolder>
<HostFolder>C:\SandboxScripts</HostFolder>
<SandboxFolder>C:\Users\WDAGUtilityAccount\Downloads\sandbox</SandboxFolder>
<ReadOnly>true</ReadOnly>
</MappedFolder>
<MappedFolder>
<HostFolder>C:\CodingProjects</HostFolder>
<SandboxFolder>C:\Users\WDAGUtilityAccount\Documents\Projects</SandboxFolder>
<ReadOnly>false</ReadOnly>
</MappedFolder>
</MappedFolders>
<LogonCommand>
<Command>C:\Users\WDAGUtilityAccount\Downloads\sandbox\VSCodeInstall.cmd</Command>
</LogonCommand>
</Configuration>
例 3
次の構成ファイルは、PowerShell スクリプトを logon コマンドとして実行し、左利きのユーザーのためにマウスの主ボタンを入れ替えます。
ホスト上の C:\sandbox
フォルダーがサンドボックス内の C:\sandbox
フォルダーにマップされるため、SwapMouse.ps1
スクリプトがサンドボックス構成ファイルで参照できるようになります。
SwapMouse.ps1
次のコードを使用して PowerShell スクリプトを作成し、SwapMouse.ps1
として C:\sandbox
ディレクトリに保存します。
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
$SwapButtons = Add-Type -MemberDefinition @'
[DllImport("user32.dll")]
public static extern bool SwapMouseButton(bool swap);
'@ -Name "NativeMethods" -Namespace "PInvoke" -PassThru
$SwapButtons::SwapMouseButton(!([System.Windows.Forms.SystemInformation]::MouseButtonsSwapped))
SwapMouse.wsb
<Configuration>
<MappedFolders>
<MappedFolder>
<HostFolder>C:\sandbox</HostFolder>
<SandboxFolder>C:\sandbox</SandboxFolder>
<ReadOnly>True</ReadOnly>
</MappedFolder>
</MappedFolders>
<LogonCommand>
<Command>powershell.exe -ExecutionPolicy Bypass -File C:\sandbox\SwapMouse.ps1</Command>
</LogonCommand>
</Configuration>