Sandbox を有効活用しよう


Sandbox を有効活用しよう

Windows 10 Pro で使えるSandbox。皆さん使ってますか?
Sandbox の使用目的としてよく上げられるのが得体のしれないソフトとか試すときに、安全に試せるよ~というモノですが、それだけじゃなくて他にも便利な使い方がありそうです。

Sandbox の使い道

怪しいソフトを検証する以外にも、以下の様な使い道が考えられます。

  • Python のコードを複数のバージョンで検証
    仮想環境を作るのも良いかもですが、Sandboxで完全に分離した環境で試せます
  • ライセンスサーバの更新後に、アプリが起動するかの確認
    複数のバージョンに対応したライセンスサーバの場合、それぞれのバージョンで確認するため、環境を揃えるの大変

というシチュエーションの時に便利です。

Sandbox で、ホストからファイルを受け取りたい

得体のしれないソフトを試す、という目的の為か、Sandbox は通常下記の様な形で動作します。

インターネット上に落ちてるツールを試したいという事なら良いでしょうが

  • ツールが外部ネットから自由にダウンロード出来るものではない
  • ツール自体は外部ネットから落とせるが、検証したいファイルはホストPC、又はイントラ上にある

ということも良くある話です。
そういった場合は、下記の様なファイルを用意すると便利です。

wsb ファイル
<Configuration><VGpu>Default</VGpu>
    <MappedFolders>
        <MappedFolder>
            <HostFolder>ホストPC側の共有したいフォルダ</HostFolder>
            <ReadOnly>true</ReadOnly>
        </MappedFolder>
    </MappedFolders>
    <LogonCommand>
        <Command></Command>
    </LogonCommand>
</Configuration>

<ReadOnly>true</ReadOnly><ReadOnly>false</ReadOnly>に変える事で、Sandbox側から書き込み可能な状態になります。
怪しいソフトを確認する場合はtrueにすべきですが、素性の分かっているソフトの動作確認ならfalseでもよいでしょう。
例えば、画像加工ツールなどの動作確認で、加工結果の確認はホスト側のアプリで行いたい、という事もあるでしょう。

この内容のテキストファイルを、拡張子「wsb」で保存し、そのファイルをダブルクリックする事で、ホストPC側の共有したいフォルダがSandbox 仮想PCのデスクトップに現れます。
これで、Sandbox PC ⇔ ホストPC のファイル共有が出来ました。先の図で言うと、右側の「×」が無くなった状態です。

イントラ上のライセンスサーバにアクセスしたい

イントラネット上にあるライセンスサーバにアクセスして、ソフトの動作確認を行いたいという事もあるでしょう。
あるいは、イントラ上のNASにあるファイルにアクセスしたいとか。
そういった場合は、下記の様に<Networking>Enable</Networking>を加えると良いです。

wsb ファイル
<Configuration><VGpu>Default</VGpu>
    <Networking>Enable</Networking>
    <MappedFolders>
        <MappedFolder>
            <HostFolder>ホストPC側の共有したいフォルダ</HostFolder>
            <ReadOnly>true</ReadOnly>
        </MappedFolder>
    </MappedFolders>
    <LogonCommand>
        <Command></Command>
    </LogonCommand>
</Configuration>

これで、Sandbox PC ⇔ イントラネット 間の接続が可能になります。最初の図で言うと、左側の「×」が無くなった状態です。

番外編(大きな声じゃ言えないけれど)

出先のネットワークに接続した状態で、家のVPNに接続すると、下図の様に出先のイントラネットに接続できなくなります。

そこで、Sandboxを起ち上げて、Sandboxから自宅にVPNを張れば、下図ののような形になりホストPCからイントラにアクセスできます。

ただし、Sandbox は起ち上げる度に初期化された状態で立ち上がるため、VPN接続設定を毎回しなければなりません。

VPN接続設定を、バッチ(&PowerShell)で作成する

Sandbox 直接関係ないじゃん、という突込みは無しで
VPN接続設定をPowerShell & バッチファイルで作成しちゃおうという話
接続方法は、L2TP/IPSec です。

VPN 接続設定を作成
$VpnName = "接続設定名"
$VpnUrl = "VPN接続先のURL(IPアドレスでも可)"
$PreKey = "事前共有キー"

$RasExec = "C:\windows\system32\rasdial.exe"
$VpnUser = "サインインユーザー名"
$VpnPass = "サインインパスワード"

#Remove Vpn Adaptor
#Remove-VpnConnection -Name $VpnName -Force -PassThru

#Create VPN Adaptor
Add-VpnConnection -Name $VpnName `
                  -ServerAddress $VpnUrl `
                  -RememberCredential -L2tpPsk $PreKey `
                  -AuthenticationMethod CHAP,MSChapv2 `
                  -EncryptionLevel Optional `
                  -TunnelType L2tp `
                  -Force

#Add User & Pass
cmd.exe /c $RasExec $VpnName $VpnUser $VpnPass

#Disconnect
cmd.exe /c $RasExec /Disconnect

-EncryptionLevel Optionalの部分は

の指定箇所です。

  • 暗号化しない → NoEncryption
  • 暗号化は省略可能 → Optional
  • 暗号化が必要 → Required
  • 最強の暗号化 → Maximum

を指定します。

-AuthenticationMethod CHAP,MSChapv2は、

の箇所です。

  • Pap
  • Chap
  • MSChapv2
  • Eap
  • MachineCertificate

を指定できます。複数指定する場合は、前述の記載の様に、カンマで区切ります。
この辺の設定は、VPN接続先の設定に合わせて下さい。

上記の様にして作成したシェルスクリプトファイルを、下記の様なバッチで実行します。

PowerShell のシェルスクリプト?を起動するバッチ
powershell -NoProfile -ExecutionPolicy Unrestricted シェルスクリプトファイルパス

これで、VPN接続設定が作成されます。
Sandbox を起動した後、このバッチを動かせば、VPN接続設定が作成されるので、それを使用してVPN接続すればOK。

Hyper-V の仮想環境で良いんじゃね?

ちょっと試すためだけに、OSのライセンスを用意するのは、どうかと思う訳ですよ。
開発環境でSDKマンセーの人には、関係ないかもですが。