Azure MarketPlace のイメージから直接デプロイしたVM (AVD) に FSLogix を機能させる

# はじめに
現在は、Azure Virtual Desktop (AVD) で、ホストプールと仮想マシンを作成する際に、どれだけシンプルな画面からデプロイさせられるか？ を研究しています。
その際には、いくつかのハードルがあったのですが、そこで得られたノウハウを記事にしていこうと思っています。
AVDに関する記事は、以下のリンク先で シリーズ化 していますので併せて参照ください。

https://qiita.com/carol0226/items/7318fdd7aff780f5177c

今回のテーマは、ゴールデンイメージを作らずに、MarketPlaceのイメージからデプロイした AVD の VM に対して、初めから FSLogix を機能させようという内容になっています。

---

# FSLogix とは
ユーザーが Windows のクライアントPC にログオンして利用した際のユーザープロファイルの情報を 外部ストレージに保存しておき、次回 他の PC にログオンした際にも、同一の利用環境を提供する仕組みです。

AVD では、多数のホストプールという VM の集まりを稼働させておき、空いている VM に ユーザーをサインインさせる動作となりますが、ユーザープロファイルが VM の Cドライブに保存されていると 利用環境を引き継げなくなります。
FSLogix を導入すると、どの VM にサインインした場合でも、プロファイルコンテナーと呼ばれる VM 外の保存場所から ユーザープロファイルが提供されるため、VM に依存しない形で、ユーザーエクスペリエンスを提供することが可能になります。

従来から、類似の機能として 移動ユーザープロファイルという仕組みがありましたが、機能的には それと同じような目的を果たすものですが、移動ユーザープロファイルは サインインの最中に ファイルサーバーからネットワーク経由でコピーが行われるため、動作が遅くなる欠点がありました。
FSLogix は、ユーザープロファイルが vhdxファイル（仮想ディスク）に保存されており、仮想基盤側で その vhdxファイルを OS にマウントさせるという仕組みになっており、サインイン中の待機時間の短縮に貢献しています。
この仕組みは、AVD とは親和性が高く、組み合わせて利用されることが多いソリューションです。

---

ユーザープロファイルに保存される情報としては、以下が挙げられます。
- ユーザーごとの PC の設定やアプリケーションの設定
　→　NTUSER.DAT、AppData などの隠しファイル属性の フォルダ／ファイル
- ユーザーごとに 保存されたファイル
　→　お気に入り、ダウンロード、デスクトップ、ドキュメント などのフォルダ

ユーザープロファイルとは、下図の通り、エクスプローラーに %USERFROFILE% というパスを入力した際に表示されるファイル群のことです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/7578c82d-cd25-7705-001f-ddae2591b2c5.png)

https://learn.microsoft.com/ja-jp/azure/virtual-desktop/fslogix-containers-azure-files

---

# FSLogix を動作させるために必要なもの
FSLogix を動作させるためには、以下の環境が必要です。

- クライアントへ [FSLogix アプリケーション](https://learn.microsoft.com/ja-jp/fslogix/how-to-install-fslogix "FSLogix アプリケーション") の導入
- [FSLogix コンテナー](https://learn.microsoft.com/ja-jp/fslogix/concepts-container-types "FSLogix コンテナー") を配置するための ファイル共有
- サインイン時に FSLogix を動作させるための [GPO設定](https://learn.microsoft.com/ja-jp/fslogix/how-to-use-group-policy-templates "FSLogix グループポリシーテンプレート")
- [ライセンス](https://learn.microsoft.com/ja-jp/fslogix/overview-prerequisites#eligibility "FSLogix の利用に必要なライセンス")

上記、それぞれの構成について、このあとの章で解説していきます。

https://learn.microsoft.com/ja-jp/fslogix/overview-prerequisites

---

## クライアントへ FSLogix アプリケーション の導入
検証する前の段階では、本記事のテーマ（MarketPlace のイメージを直接展開）を実現するにあたって、FSLogix アプリケーション と呼ばれるエージェントの導入がハードルになると思っていたのですが、結論としては、対処が不要でした。

過去に書かれている AVD + FSLogix 関連のブログ記事などをみると、エージェントの導入が必要なように見えるのですが、いざ イメージの中を確認した結果、MarketPlace で提供されている AVD 用マルチセッションのイメージには FSLogicx アプリケーション が導入されているようでした。
いくつかのバージョンのイメージを展開して中身を確認してみましたが、この認識で問題無さそうです。
これは、大きな発見でした。
以下の公開情報にも、「Windows 10/11 Azure Marketplace画像の一部としてプレインストールした」であれば エージェントの追加インストールは不要というニュアンスで書かれていて、これが私の判断に合致していそうです。

https://learn.microsoft.com/ja-jp/fslogix/how-to-install-fslogix#verify-product-installation-and-version

:::note info
結果的に、「エージェントを導入しなくても使えましたよ！」というのが 本記事で紹介したかったノウハウです。
:::

---

## FSLogix コンテナー を配置するための ファイル共有
### FSLogix コンテナー について
FSLogix コンテナーには、２種類のコンテナーが含まれます。
- [プロファイルコンテナー](https://learn.microsoft.com/ja-jp/fslogix/concepts-container-types#profile-container "プロファイルコンテナー")
- [ODFC コンテナー](https://learn.microsoft.com/ja-jp/fslogix/concepts-container-types#odfc-container "ODFC コンテナー")

:::note info
この記事を書く際に掘り下げていて "ODFCコンテナー" の存在を知ったのですが、結論としては ODFCコンテンツ は プロファイルコンテナー に含まれて利用することが推奨されていて、 ODFCコンテナー を使う場合は、他社製のプロファイル管理ソリューションを利用する際に ODFCコンテンツ を分離させたいときに使うもののようです。
この [FAQ](https://learn.microsoft.com/ja-jp/fslogix/overview-faq#microsoft-365-----------------odfc------------------- "Microsoft 365 アプリケーションを使用する場合、ODFC コンテナーを使用する必要がありますか? → いいえ") と、[この公開情報の注意書きの欄](https://learn.microsoft.com/ja-jp/fslogix/concepts-container-types#profile-container "特に構成されていない限り、プロファイル コンテナーには、すべてのプロファイルと ODFC コンテンツが同じ VHD(x) ファイルに保持されます。 この構成をお勧めします。") を読んでもらうと判ると思います。
:::

今回の検証では、プロファイルコンテナー のみを扱う事にします。

---

### ファイル共有について
コンテナーを配置するための ファイル共有 は ドメインに参加されていて NTFSと共有の権限管理を行えることが要件になっていて、以下の４つの仕組みから選択することが一般的と思います（おそらくSMB＋Kerberos認証に対応しているストレージであれば良いのでしょう）
- [Windows Server のファイルサーバー](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/create-host-pools-user-profile "Windows Server のファイルサーバー") の機能 で提供される ファイル共有
- Azure ストレージアカウントの [Azure Files](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/fslogix-profile-container-configure-azure-files-active-directory?tabs=adds "Azure Files とは") で提供される ファイル共有
- [Azure NetApp Files](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/create-fslogix-profile-container "Azure NetApp Files とは") で提供される ファイル共有
- Windows Server と Azure Stack HCI で構成した [記憶域スペースダイレクト](https://learn.microsoft.com/ja-jp/azure-stack/hci/concepts/storage-spaces-direct-overview "記憶域スペースダイレクト") で提供された ファイル共有

https://learn.microsoft.com/ja-jp/azure/virtual-desktop/store-fslogix-profile

今回の検証では、AVD の一般的な構成であり、コストも安価となる Azure ストレージアカウントのファイル共有を選択することにしました。

:::note warn
Windows ファイルサーバーを使う場合、ADサーバー と同居させて構築すればコスト安ではありますが、ファイルサーバーを独立させたり、冗長化したりを考えると Azure Files の方が安価になると思います。
そのため、検証用途なら Windowsファイル共有もあると思いますが、本番運用で採用されるのかは疑問であり、あえて記事化する意味も無くなってしまうと思い、採用しませんでした。とにかくFSLogix の機能を動かしてみたいという人は、Windowsファイルサーバーでやってみるのも手かと思います。
:::

---

### プロファイルコンテナー ＋ Azure Files の構築手順
次の２STEPで、手順を紹介します。
- Azure Files を構成し、ドメインに参加する
- 作成したファイル共有を FSLogix 向けに権限設定する

---

#### Azure Files を構成し、ドメインに参加する 
この ファイル共有 の準備は、当初 それほど難しく考えていなかったのですが、これが 思っていたよりも大変でした。
この記事と一緒に掲載できないほどのボリュームとなったため、以下の記事で説明しています。
この記事で Azure Files の構成とドメイン参加 までを実施してください。

https://qiita.com/carol0226/private/942dc353dd27f541b74c

---

#### 作成したファイル共有を FSLogix向けに権限設定する
この章では、上記の記事をもとに準備した ファイル共有に対して、FSLogix向けの追加設定を説明します。

1. ドメイン参加済みのマシン（ADサーバー等）でエクスプローラーを開き、前章で構築済みの ファイル共有 へアクセスします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/691f6083-e8f9-bea5-d488-e255f44786f6.png)
1. そこへ、fsl-profiles というフォルダを作成し、「プロパティ」－「セキュリティ」タブの順に開き、「詳細設定」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/79e015bf-e57a-93b9-3c78-e4471e43aa81.png)
1. 以下の「アクセス許可」画面が表示されますが、「継承の無効化」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/f0451bf2-9a3a-773e-ae59-3626783b9de3.png)

:::note warn
既定の権限設定のままだと、管理者ではなく一般ユーザーが fsl-profiles フォルダや その配下のファイルを閲覧したり削除できたりしてしまうため、「継承の無効化」は必須です。
:::

４. 以下の画面が表示されるため「このオブジェクトから継承されたアクセス許可を全て削除します。」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/d5854da4-9f6a-81a3-4052-edeb36e73e69.png)

５. 必要な権限を付与するため、「追加」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/a04043fa-a457-b5f6-30c3-3f6ac0c34b06.png)

６. 以下の順にアクションします。
　① 「プリンシパルの選択」を押す
　②　[CREATOR OWNER] と手入力する
　③ 「名前の確認」を押す
　④　CREATOR OWNER に下線が引かれた状態になったことを確認する
　⑤ 「OK」を押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/d835de6e-a5aa-2ff4-9124-2a52c1f5c59b.png)

７. 以下の下線の通り、プリンシパルに CREATOR OWNER が選択された状態になります。
[適用先] は、「サブフォルダーとファイルのみ」を選択し、
[基本のアクセス許可] は、「変更」にチェックを入れ、変更～書き込み の５つにチェックが入る事を確認します。 
最後に、「OK」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/760b7e3f-6612-6666-029e-bab7ef5f6f6f.png)

８. 以下の画面に遷移するため、赤下線部と同一の設定になっていることを確認します。
続いて、「追加」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/c22fc4e3-29a4-2466-b58c-5ab7670d2e0d.png)

９. 項番６と同じ画面になるため、同様に [推奨される ACL](https://learn.microsoft.com/ja-jp/fslogix/how-to-configure-storage-permissions#recommended-acls "推奨される ACL") に記載された設定になるように プリンシパルを追加していきます。
|プリンシパル|アクセス|継承元|適用先|
|:-:|:-:|:-:|:-:|
|CREATOR OWNER|変更|なし|サブフォルダーとファイルのみ|
|ドメイン名￥Domain Admins|フル コントロール|なし|このフォルダー、サブフォルダー、およびファイル|
|ドメイン名￥Domain Users|変更|なし|このフォルダーのみ|

１０. 最終的に 以下の設定値になったことを確認して、「OK」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/f71ecb90-f881-b256-ab6c-254bfee31fd6.png)

:::note warn
設定ミスがあると、意図しなかった権限のユーザーにファイルを見られてしまったり、削除されてしまったり、FSLogix が機能しないなどの問題に関わるため、厳重にチェックしてください。
:::

https://learn.microsoft.com/ja-jp/fslogix/how-to-configure-storage-permissions#apply-windows-acls-using-windows-explorer

---

## サインイン時に FSLogix を動作させるための GPO 設定
FSLogix は、クライアント上でユーザーがサインインする際に 動作する必要があります。
そのためには、ドメインコントローラーのグループポリシーで FSLogixのためのポリシー設定を行っておき、クライアントへ配布されたポリシー設定を使って、FSLogixのエージェントとOSが ユーザープロファイルの制御を行う・・・という感じで動作します。

今回の検証では、VMイメージ をデプロイしたあとに そのまま FSLogix を自動的に機能させたいため、ドメインコントローラーの グループポリシー を利用します。

そのための手順として、以下の２STEP を行います。
- ポリシーテンプレートのダウンロードと保存
- FSLogix のポリシー設定

---

### ポリシーテンプレートのダウンロードと保存
1. 以下の URL から、FSLogix アプリケーションをダウンロードして解凍します。
（アプリをインストールはしないので、注意してください）
https://aka.ms/fslogix_download

1. ダウンロードして解凍すると、fslogix.adml と fslogix.admx というファイルがあるため、この２つだけ使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/7fe172c9-24e8-824c-055c-aa11f26e2e5b.png)

1. この２つのファイルを、ドメインコントローラー の以下のフォルダへコピーします。<br>※フォルダが無い場合は 手動で作ってください（この場合、後述する セントラルストア の説明も参照ください）

|ファイルの種類|ドメインコントローラーのファイルの場所|
|:-:|:-:|
|fslogix.admx|%systemroot%\sysvol\domain\policies\PolicyDefinitions|
|fslogix.adml|%systemroot%\sysvol\domain\policies\PolicyDefinitions\ja-jp|

下図のように、admlファイル は、 ja-JPフォルダ の配下にコピー
admxファイル は、他の admxファイル と同じ場所にコピー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/6acc18e7-3550-7ff4-8183-a8e4c49c8742.png)
（参考：ドメイン ファイルの場所）
https://learn.microsoft.com/ja-jp/fslogix/how-to-use-group-policy-templates#domain-file-locations

（参考：セントラルストアについて）
ドメインコントローラーが ポリシーテンプレートを管理する方法として、ローカルストア と セントラルストア という仕組みがあります。
以下のサイトで解説されているのですが、内容が難しいと感じる人は 何も考えずに Sysvolフォルダ配下に PolicyDefinitions というフォルダを作ってください。
https://learn.microsoft.com/ja-jp/troubleshoot/windows-client/group-policy/create-and-manage-central-store#the-central-store

---

### FSLogix のポリシー設定
FSLogix用の admx と adml ファイルが配置できたら、グループポリシーエディタを使って、FSLogix の設定ができるようになります。

1. ドメインコントローラーで、「グループポリシーの管理」を開きます。
1. AVD の VM が配置されている OU を右クリックし、「このドメインに GPO を作成し、このコンテナーにリンクする」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/b9c54934-e638-1332-33f2-beefc6e57f2c.png)
1. GPO の名称として、FSLogix などの判りやすい名称をつけて、「OK」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/cf647931-21ff-65d1-137b-30735e709c50.png)
1. 作成された GPO を右クリックして、「編集」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/3f4e749e-bc22-35ee-ae13-a248f2a85361.png)
1. 赤枠の v を開いていきます。
緑下線のとおりに「FSLogix」が表示されない場合は、前章の admx と adml のコピーが適切に行われていません。見直してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/de97ef98-23ff-b1de-ee1d-bfe2eb9f0080.png)
1. 上図で、赤下線で示した３項目のポリシー設定を行います。

|項目名|値|詳細項目|
|:-:|:-:|:-:|
|Enabled|有効|   |
|Delete Local Profile When VHD Should Apply|有効|   |
|VHD Locations|有効|\\\carol0226storage.file.core.windows.net\share\fsl-profiles|

（VHD Locations の設定例）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/a4ffe80f-c202-a48c-063b-e694f7ac4470.png)
７. 設定が全て完了したら、グループポリシー管理エディターを閉じます。

８. AVD の VM で、Gpupdate /force のコマンドを叩くか、再起動することで、このポリシーが適用され FSLogix が動作するようになります。

（参考：グループ ポリシー管理エディター）
https://learn.microsoft.com/ja-jp/fslogix/how-to-use-group-policy-templates#group-policy-management-editor

---

# 動作確認

## サインイン画面での確認
うまく VM にポリシーが適用されると、以下の通り サインイン時に「FSLogix Apps Services の処理が完了するのをお待ちください」と表示されます。
この表示がされない場合は、ポリシーが VM に適用されていないことが疑われます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/679ae27e-bcbe-8ee4-5009-27249c451b34.png)

---

## ユーザープロファイルが VM を跨いで引き継がれていることの確認
AVD にサインインが成功したら、デスクトップ上にファイルを保存したり、壁紙を変更したりしてみてください。コマンドで ホスト名を確認して、そのあと、サインアウトします。
ホストプールに複数台の VM があれば、先ほどの VM を停止します。
再度 AVD にサインインした際に 先ほどの設定変更が 引き継がれていることが確認できます。コマンドで ホスト名を確認して、先ほどの VM名 とは違うことを確認します。

---

## ストレージブラウザーに作成されたプロファイルの確認
ストレージブラウザーで確認すると、fsl-profiles の配下に フォルダが増えています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/6a562bf4-3b55-99c4-40de-f5abe65b7a2f.png)
さらに、そのフォルダを開くと、vhdファイル ファイルが存在する事が判ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/a61c6c50-a08d-6280-86ab-3e41a4c6df9d.png)

:::note info
管理者であれば、この vhdファイルを ストレージブラウザー から削除することも可能です。
その場合は、次回 ユーザーがサインインした場合に「初回ログオン」の扱いとなり 新たに プロファイル（vhdファイル）が作成されます。
:::

---

## VM にマウントされている プロファイルコンテナー の確認
ユーザーが、VM のローカル管理者権限を持っていれば「ディスクの管理」で ディスクの状態を見る事ができます。FSLogix の VHDファイルは、「ディスク2」としてマウントされていることが判ります。 
下図では、testnogu と testnogu4 という２つのユーザーで 同じ VM に同時にサインインした場合です。このようにマルチセッションでサインインした場合は、複数のプロファイルが同時にマウントされていることが判ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/702f8575-e540-4204-0b76-a2e9fccd3a58.png)

---

## 他人のプロファイルを参照したり、削除したりできない事の確認
サインインしたユーザーが、プロファイルフォルダーへアクセスします。
２ユーザー分の プロファイルフォルダーが表示されますが、自分のフォルダにしかアクセスできないことを確認しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/2c231b60-2a3f-c944-1197-7518542c39b1.png)
以下の通り、自分のフォルダ (testnogu) は、参照できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/9beaeffe-6b95-53d0-b7d7-c1ce045d5bd1.png)
以下は、testnogu というユーザーが、testnogu4 というユーザーのプロファイルフォルダーを開こうとした場合です。開くこともできませんし、削除しようとしても消せない事が判ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/a1478ebd-0c96-b2a6-556d-01f7a3712cf4.png)

:::note info
これで、FSLogix をうまく機能させることができました。
おつかれさまです。
:::

# 参考
いつも参考にさせていただいています。

くらう道：FSLogix Profile Container と Office Container を設定してみる！

https://www.cloudou.net/azure-virtual-desktop/avd032/