背景と目的
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 に仮想マシンを登録する
RDP 接続するとストレージアカウントにコンテナーが作成される
コンテナー内に VHD が作成される
仮想マシンに VHD がマウントされる
もう 1 つの仮想マシンにも RDP 接続できるがプロファイルがロックされているのでローカルプロファイルが作成される
左の仮想マシンはテーマを変更しており、右の仮想マシンは同じユーザーでサインインしてもテーマはデフォルトのまま。
2 つの仮想マシンからサインアウトするとロックファイルが消える
先ほどローカルプロファイルが使用された仮想マシンに RDP 接続してユーザープロファイルが適用されたことを確認する
検証環境を削除
bash
# リソースグループを削除します
az group delete \
--name ${prefix}-rg \
--yes
参考