😀

Azure の Windows 11 マルチセッション仮想マシンで FSLogix ユーザープロファイルを使う構成を A

に公開

背景と目的

Azure Virtual Desktop 環境に適用する前に、FSLogix ユーザープロファイル機能だけを動作検証したく、Azure CLI で検証環境を作ってみました。

検証用の仮想ネットワークを作る

bash
# 環境変数をセットします
region=japaneast
prefix=mnrfsl
adgroup=mnravd-group

# リソースグループを作成します
az group create \
  --name ${prefix}-rg \
  --location $region

# VNET を作成します
az network vnet create \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vnet \
  --address-prefixes 10.1.0.0/16 \
  --subnet-name default-subnet \
  --subnet-prefix 10.1.0.0/24

# NSG を作成します
az network nsg create \
  --resource-group ${prefix}-rg \
  --name ${prefix}-nsg

# NSG ルールを作成します
az network nsg rule create \
  --resource-group ${prefix}-rg \
  --name Allow-RDP \
  --nsg-name ${prefix}-nsg \
  --priority 100 \
  --source-address-prefixes $(curl -s inet-ip.info) \
  --destination-port-ranges 3389 \
  --access Allow \
  --protocol Tcp

# サブネットに NSG を紐付け Storage サービスエンドポイントを有効にします
az network vnet subnet update \
  --resource-group ${prefix}-rg \
  --vnet-name ${prefix}-vnet \
  --name default-subnet \
  --network-security-group ${prefix}-nsg \
  --service-endpoints Microsoft.Storage

FSLogix プロファイルを格納するストレージアカウントを作成

bash
# ストレージアカウントを作成します
az storage account create \
  --resource-group ${prefix}-rg \
  --name ${prefix}stor \
  --kind StorageV2 \
  --sku Standard_LRS \
  --default-action Deny

# サブネットからのみアクセス可能にします
az storage account network-rule add \
  --resource-group ${prefix}-rg \
  --account-name ${prefix}stor \
  --vnet-name ${prefix}-vnet \
  --subnet default-subnet \
  --ip-address $(curl -s inet-ip.info)

# アクセスキーを取得します
storagekey=$(az storage account keys list \
  --account-name ${prefix}stor \
  --resource-group ${prefix}-rg \
  --query "[0].value" \
  --output tsv)

検証用の仮想マシンを作成

bash
# azureuser 用のパスワードを生成します
vmpasswd=$(openssl rand -base64 16)
echo $vmpasswd

# 仮想マシンを 2 つ作成します
for i in {1..2}; do
  az vm create \
    --resource-group ${prefix}-rg \
    --name ${prefix}-vm${i} \
    --os-disk-name ${prefix}-vm${i}OSDisk \
    --image microsoftwindowsdesktop:windows-11:win11-21h2-avd:latest \
    --license-type Windows_Client \
    --size Standard_D2as_v4 \
    --storage-sku Standard_LRS \
    --admin-username azureuser \
    --admin-password $vmpasswd \
    --assign-identity \
    --vnet-name ${prefix}-vnet \
    --subnet default-subnet \
    --nsg "" \
    --public-ip-address-dns-name ${prefix}${i} \
    --zone ${i}
done

# AzureAD Join 拡張をインストールします
for i in {1..2}; do
  az vm extension set \
    --resource-group ${prefix}-rg \
    --vm-name ${prefix}-vm${i} \
    --name AADLoginForWindows \
    --publisher Microsoft.Azure.ActiveDirectory
done

# NLA を無効にします
for i in {1..2}; do
  az vm run-command invoke \
    --command-id DisableNLA \
    --resource-group ${prefix}-rg \
    --name ${prefix}-vm${i}
done

# セキュリティグループのユーザーに仮想マシンユーザー権限を付与します
for i in {1..2}; do
  az role assignment create \
    --assignee $(az ad group list \
    --display-name $adgroup \
    --query [0].id \
    --output tsv) \
    --role "Virtual Machine Administrator Login" \
    --scope $(az vm show \
    --resource-group ${prefix}-rg \
    --name ${prefix}-vm${i} \
    --query id \
    --output tsv)
done

FSLogix を設定

bash
# 各仮想マシンの FSLogix を有効にします
for i in {1..2}; do
  az vm run-command invoke \
    --command-id RunPowerShellScript \
    --resource-group ${prefix}-rg \
    --name ${prefix}-vm${i} \
    --script "Set-ItemProperty -Path HKLM:\SOFTWARE\FSLogix\Profiles -Name Enabled -Type DWord -Value 1"
done

# 新しく作成される VHD サイズを 5000 メガバイトにします
for i in {1..2}; do
  az vm run-command invoke \
    --command-id RunPowerShellScript \
    --resource-group ${prefix}-rg \
    --name ${prefix}-vm${i} \
    --script "Set-ItemProperty -Path HKLM:\SOFTWARE\FSLogix\Profiles -Name SizeInMBs -Type DWord -Value 5000"
done

# ローカルプロファイルの削除を有効にします
for i in {1..2}; do
  az vm run-command invoke \
    --command-id RunPowerShellScript \
    --resource-group ${prefix}-rg \
    --name ${prefix}-vm${i} \
    --script "Set-ItemProperty -Path HKLM:\SOFTWARE\FSLogix\Profiles -Name DeleteLocalProfileWhenVHDShouldApply -Type DWord -Value 1"
done

# Cloud Cache 構成を設定します
for i in {1..2}; do
  az vm run-command invoke \
    --command-id RunPowerShellScript \
    --resource-group ${prefix}-rg \
    --name ${prefix}-vm${i} \
    --script "Set-ItemProperty -Path HKLM:\SOFTWARE\FSLogix\Profiles -Name CCDLocations -Type String -Value 'type=azure,connectionString=\"DefaultEndpointsProtocol=https;AccountName=mnrfslstor;AccountKey=${storagekey};EndpointSuffix=core.windows.net\"'"
done

AzureAD 資格情報を使用して RDP 接続

資格情報を AzureAD\UPN の形式で入力する必要があります (例: AzureAD\john@contoso.com)

Mac の Microsoft Remote Deesktop に仮想マシンを登録する

fslogix-vm-storage-01.png

RDP 接続するとストレージアカウントにコンテナーが作成される

fslogix-vm-storage-02.png

コンテナー内に VHD が作成される

fslogix-vm-storage-04.png

仮想マシンに VHD がマウントされる

fslogix-vm-storage-03.png

もう 1 つの仮想マシンにも RDP 接続できるがプロファイルがロックされているのでローカルプロファイルが作成される

左の仮想マシンはテーマを変更しており、右の仮想マシンは同じユーザーでサインインしてもテーマはデフォルトのまま。

fslogix-vm-storage-05.png

2 つの仮想マシンからサインアウトするとロックファイルが消える

fslogix-vm-storage-06.png

先ほどローカルプロファイルが使用された仮想マシンに RDP 接続してユーザープロファイルが適用されたことを確認する

fslogix-vm-storage-07.png

検証環境を削除

bash
# リソースグループを削除します
az group delete \
  --name ${prefix}-rg \
  --yes

参考

https://learn.microsoft.com/ja-jp/fslogix/cloud-cache-configuration-reference

https://qiita.com/mnrst/items/412dac20ca6beabe7513

Discussion