背景と目的
Azure Virtual Desktop とか Microsoft Dev Box とか、複数のデスクトップ環境を用意するのは数年前よりかなり簡単になりました。とはいえ、条件付きアクセスとかで制限はできるもののパブリックネットワークを経由してアクセスするのが好ましくないケースもあると思います。例えば、基盤を管理運用するための踏み台環境のケースで考えると、プライベートネットワーク経由で接続できる複数のマルチセッション仮想マシンを用意しておき、利用者が必要に応じて接続先を使い分ける方法で事足りたりします。そこで今回は、AzureAD Join した Windows 11 に RDP できる環境を Azure CLI で作ってみました。
検証環境を作成
bash
# 環境変数をセットします
region=japaneast
prefix=mnrdevvm
adgrp=mnrdevvm-group
# リソースグループを作成します
az group create \
--name ${prefix}-rg \
--location $region
仮想マシンを作成
bash
# パスワードを生成します
vmpasswd=$(openssl rand -base64 16)
echo $vmpasswd
# 仮想マシンを作成します
az vm create \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--os-disk-name ${prefix}-vmOSDisk \
--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 \
--nsg-rule NONE \
--public-ip-address-dns-name ${prefix}
# RDP ポートを開けます
az network nsg rule create \
--resource-group ${prefix}-rg \
--name Allow-RDP \
--nsg-name ${prefix}-vmNSG \
--priority 100 \
--source-address-prefixes $(curl -s inet-ip.info) \
--destination-port-ranges 3389 \
--access Allow \
--protocol Tcp
AzureAD Join の設定
bash
# AzureAD Join 拡張をインストールします
az vm extension set \
--resource-group ${prefix}-rg \
--vm-name ${prefix}-vm \
--name AADLoginForWindows \
--publisher Microsoft.Azure.ActiveDirectory
# セキュリティグループのユーザーに仮想マシンユーザー権限を付与します
az role assignment create \
--assignee $(az ad group list \
--display-name $adgrp \
--query [0].id \
--output tsv) \
--role "Virtual Machine User Login" \
--scope $(az vm show \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--query id \
--output tsv)
# NLA を無効にします
az vm run-command invoke \
--command-id DisableNLA \
--resource-group ${prefix}-rg \
--name ${prefix}-vm
AzureAD 資格情報を使用して RDP 接続
資格情報を AzureAD\UPN の形式で入力する必要があります (例: AzureAD\john@contoso.com)
検証環境を削除
bash
# リソースグループを削除します
az group delete \
--name ${prefix}-rg \
--yes
参考