Azure Virtual Desktop のセッションホストで USB 記憶域装置 (USBメモリ) を使う！

# 1. はじめに
AVD (Azure Virtual Desktop) のセッションホストは Azure VM として稼働するため、USB 記憶域デバイスなどの物理デバイスを直接接続させることはできません。そのため、デバイスのリダイレクト機能を有効化し、接続元 PC に接続した USB 記憶域デバイスをセッションホストにリダイレクト接続してみたいと思います。リダイレクトできるデバイスはいろいろありますが、今回は USB 記憶域装置のリダイレクト方法をまとめたいと思います。
なお、本投稿では AVD 環境はセットアップ済みの前提になります。

# 2. デバイスのリダイレクト
AVD でリダイレクトできるデバイスはこちらのドキュメントにまとまっています。
+ [デバイスのリダイレクトを構成する](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/configure-device-redirections)

ホストプールの RDP プロパティから構成することで、USB デバイスだけでなく、マイク、カメラ、プリンターやスマートカードなどもリダイレクトすることが可能です。

## 2.1 リモート デスクトップ クライアントの機能の比較
ホストプールの RDP プロパティにデバイスのリダイレクト設定をしても、リモートデスクトップクライアントがその動作をサポートしていない場合は利用できません。

AVD のリモートデスクトップクライアントは下記があり、それぞれのリモートデスクトップクライアントで利用可能な機能はこちらを参照してください。
+ [Azure Virtual Desktop に接続する場合のリモート デスクトップ クライアントの機能の比較](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/compare-remote-desktop-clients?toc=%2Fazure%2Fvirtual-desktop%2Fusers%2Ftoc.json)

各リモートデスクトップクライアントのダウンロードや利用方法はこちらをご参照ください。
+ [Windows デスクトップクライアント](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/users/connect-windows?tabs=subscribe)
+ [Windows 用 Azure Virtual Desktop ストア アプリ](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/users/connect-windows-azure-virtual-desktop-app?tabs=subscribe)
+ [Web クライアント](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/users/connect-web)
+ [macOS クライアント](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/users/connect-macos)
+ [iOS と iPad OS クライアント](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/users/connect-ios-ipados)
+ [Android と Chrome OS クライアント](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/users/connect-android-chrome-os)
+ [シンクライアント](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/users/connect-thin-clients)

# 3. USB 記憶域デバイスのリダイレクトを設定する
USB 記憶域デバイスのリダイレクト設定方法は以下のドキュメントに記載の設定をすれば OK です。やってみましょう。
+ [USB リダイレクト](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/configure-device-redirections#usb-redirection)

## 3.1 AVD RDP プロパティの設定
Docs に注意書きがある通り、USB 記憶域装置をリダイレクト接続する場合は AVD ホストプールの RDP プロパティに以下の設定を追加します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/6184a906-c69b-d077-a3c6-b1e26cea08c4.png" width=60%>

|パラメーター|設定内容|
|--|--|
|usbdevicestoredirect:s:*|クライアントでサポートされているすべてのデバイスに対して USB デバイスのリダイレクトを有効にする|
|devicestoredirect:s:*|すべてのディスク ドライブのリダイレクトを有効にする|

設定箇所は下記の通り、`ホストプール` の `RDP プロパティ`から`詳細`タブを選択し、パラメーターを入力してください。2つのパラメーターは `;` で区切れば OK です。以下からコピペで貼り付けてください。
```Powershell
devicestoredirect:s:*;usbdevicestoredirect:s:*
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/fc282bcb-8752-88e6-c96d-54e228b5550a.png)

なお、設定を保存すると `デバイスのリダイレクト` に設定が反映されたことを確認できます。こちらから設定しても大丈夫です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/44dcd45c-be1f-a60d-f3b1-6c5844d17633.png)

## 3.2 セッションホストの設定
USB リダイレクトを使用するため、セッションホストでプラグアンドプレイデバイスのリダイレクトを有効化する必要があります。グループポリシーやローカルグループポリシーから設定してください。

今回は検証のため、ローカルグループポリシーに設定します。

１. セッションホストに管理者権限でログインします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/8b6500ec-998d-3260-0f2e-922ea27c1532.png" width=60%>

２. ファイル名を指定して実行より、`gpedit.msc`を実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/8300ea80-3993-d5f5-5ed7-3c006a5636b9.png)

３. ローカルグループポリシーエディタから、以下を展開します。
+ `コンピューターの構成 > 管理用テンプレート > Windows コンポーネント > リモート デスクトップ サービス > リモート デスクトップ セッション ホスト > デバイスとリソースのリダイレクト`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/79e0b349-0d18-a2bd-853b-8ae5e467dbd2.png)

４. 下記ポリシーを `無効化` し、プラグアンドプレイのリダイレクトを許可する設定にします。
+ `サポートされているプラグ アンド プレイ デバイスのリダイレクトを許可しない`
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/c9e7a2c6-a854-17ad-be03-8a0595f6b3f6.png" width=60%>

５. 設定が完了したらセッションホストを再起動します。

これでセッションホストの設定は完了です。

## 3.3 リモートデスクトップ接続する PC の設定
最後にリモートデスクチップ接続する接続元の PC で RemoteFX USB デバイスリダイレクトを許可する設定を実施します。
このポリシーもグループポリシーやローカルグループポリシーから設定してください。
本手順では、ローカルグループポリシーの設定を実施します。

１. セッションホストと同様にローカルグループポリシーを開きます。
２. ローカルグループポリシーエディタから、以下を展開します。
+ `コンピューターの構成 > ポリシー > 管理用テンプレート > Windows コンポーネント > リモート デスクトップ サービス > リモート デスクトップ接続クライアント > RemoteFX USB デバイス リダイレクト`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/dde340ec-b728-d021-65d6-9caff3db97c3.png)

３. 下記ポリシーを有効化し、RemoteFX による USB デバイスのリダイレクトを有効化します。リダイレクトを許可するユーザーを `管理者` もしくは `管理者とユーザー` を設定します。
+ `サポートされている他の RemoteFX USB デバイスのこのコンピューターからの RDP リダイレクトを許可する`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/314c01fb-a9da-c062-1d3c-e5d3b87aba4e.png)


４. 設定した PC を再起動します。

これで接続元 PC の操作は完了です。

# 4. AVD セッションホストに USB 記憶域デバイスをリダイレクト接続する
USB リダイレクトの設定は完了したので、実際に試してみましょう。

１. `Windows デスクトップクライアント`からセッションホストにログインします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/8b6500ec-998d-3260-0f2e-922ea27c1532.png" width=60%>

２. 次に接続元 PC に USB 記憶域デバイスを接続します。
プラグアンドプレイにより、接続元 PC に USB 記憶域デバイスが接続されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/6c0a04eb-4cf7-9013-1cb5-93b36fed8a91.png" width=60%>

３. 接続元 PC に接続した USB 記憶域デバイスを取り出します。実際に取り外すのではなく、タスクトレイの `ハードウェアを安全に取り外してメディアを取り出す` から接続した USB 記憶域デバイスを右クリックし、`Mass Storage Device の取り外し` をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/b1412125-989d-9f16-a206-03798c095186.png" width=60%>

４. リモートデスクトップ接続したセッションホストを全画面表示し、画面上部のアイコンをクリックし、セッションホストに接続する USB 記憶域デバイスを選択し、OK をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/e68cc54e-e587-c25c-e49b-4be1b169dafc.png)

`USB 大容量記憶域装置` にチェックを入れるのを忘れないよう注意してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/6de5af22-b047-4845-6dce-fe8e0104ce98.png)

５. しばらくするとセッションホストに USB 記憶域装置が接続されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/8e3908a5-d499-d69b-3cd7-1a6afd6d0c3c.png)

これで USB 記憶域装置のリダイレクトができました。
セッションホストは Azure の仮想マシンですが、仮想マシンに物理的に USB 記憶域装置を接続した状態と同じ環境になりました。セッションホストのデバイスマネージャーから確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/ff83f0f9-8eba-3899-782d-9d50ef823f6a.png)

セッションホストで USB 記憶域装置のシリアル番号などを認識することができるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/180e9034-267b-e9af-aca1-1661996944a9.png)

なお、接続元 PC のローカルドライブをリダイレクト接続させたくない場合は、RDP プロパティの設定値を変更することで、以下の C ドライブのリダイレクトを抑制することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/a3f8eb04-9c29-d622-8c20-a9fff9b02ecf.png)

RDP プロパティから `ドライブとストレージのリダイレクト` を `動的なドライブ：後で接続されるドライブをリダイレクトする` や `ドライブとラベルを手動で入力する`に変更してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/e6e1c25c-a8c8-7fe6-ff35-d08abec8f58f.png)

C ドライブ以外がリダイレクトされてしまう可能性はありますが、C ドライブやその他ドライブのリダイレクトを抑制することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/a0f140cf-8374-11c5-4bf3-4417b1c0bfbf.png)

# ５. まとめ
USB リダイレクトにより、AVD セッションホストで USB 記憶域装置を直接接続した状態にすることができます。許可した USB 記憶域装置のみ利用させたい場合などに有効な方法と思いますので、ぜひ試していただければと思います！