AVDを運用していると、「特定の時間帯だけアクセスを許可したい」「授業やシフトに合わせて利用できるアプリケーショングループを切り替えたい」といったニーズに出会うことがあります。特に教育機関やシェア環境では、ユーザーやグループの割り当てを時間単位で柔軟に制御したい場面が少なくありません。
今回は、こうした要件に応えるために Azure Automation の Runbook を活用し、時間帯ごとに AVD のアプリケーショングループを自動的に切り替える“時間割ソリューション” を構築してみました!
さっそく、構成を見てみましょう!

①Runbookのスケジュール機能により、指定時刻にスクリプトを実行する
②スクリプト内で指定されたアプリケーショングループに対して、指定のユーザー/グループに割り当て/解除を実行する
Runbookスクリプトには、事前に[サブスクリプションID][リソースグループ名][アプリケーショングループ名][ユーザー名/グループ名]を記述しておく。これらの記述が合致しない場合、スキップされます。複数のアプリケーショングループに対して、[割り当て]と[解除]を同時に行います。
【動作例】
unassignMap
AppGroupName:RG1-DAG,RG2-DAG
Grouups:AVD-Group01,test
Users:user01@xxx.onmicrosoft.com
assignMap
AppGroupName:RG1-DAG,RG2-DAG
Grouups:
Users:user10@xxx.onmicrosoft.com
①unassignMap(解除)から処理される
②RG1-DAGに対して、[AVD-Group01][test]の解除が行われる
※[test]は存在しないためスキップされる
③RG1-DAGに対して、[user01]の解除が行われる
④RG2-DAGに対しても同様の解除処理が行われる
⑤すべての解除処理が完了したら、assignMap(割り当て)が処理される
⑥RG1-DAGに対して、[user10]の割り当てが行われる
※Groupsは空欄のためスキップされる
⑦RG2-DAGに対して、[user10]の割り当てが行われる
それでは、やってみよう!!
先ずは、Automationアカウントを作成します。



外部からのトリガーは不要。Webhookなどの受口を設けない。
※プライベートアクセスにすると、プライベートエンドポイントの作成を求められる。

作成後ー[ID]ー[Azureロールの割り当て]を選択
※VMへのSKU変更、起動を実行するための権限を付与します。

スコープ:サブスクリプション
サブスクリプション:対象のアプリケーショングループが存在するサブスクリプションを選択
役割:ユーザー アクセス管理者

EntraIDにてグループを新規作成します。
グループにMicrosoft Entraロールを割り当てることができる:はい
メンバー:※RunbookのマネージドIDを指定
役割:ディレクトリ閲覧者

つづいて、Runbookの作成です。
[Runbook]ー[+作成]を選択

Runbook:新規作成
名前:表示名
Runbookの種類:PowerShell
ランタイム環境:PowerShell-7.2

こちらからダウンロードしたスクリプトをペースト。[保存]ー[公開]を選択
※環境に合わせて設定して下さい。
3行:サブスクリプションID
9行:アプリケーショングループが存在するリソースグループ名
10行:アプリケーショングループ名
11行:Entra グループ名
12行:Entra ユーザー名

[スケジュール]ー[スケジュールの追加]を選択

[スケジュール]を選択

名前:表示名
開始時間:スケジュールを実行する時間
間隔:[2]週間に1回

[パラメータと実行設定]ー[OK]を選択

作成できました。

それでは、確認してみましょう!
既存環境にあるホストプール[AVD-ADMulti]のアプリケーショングループ[AVD-ADMulti-DAG]には、グループ[AVD Users]が割り当てられています。

[スクリプト]
$unassignMap = @(
@{
ResourceGroup = “AVD-ADMulti”
AppGroupName = “AVD-ADMulti-DAG”
Groups = @(“AVD Users”)
Users = @()
$assignMap = @(
@{
ResourceGroup = “AVD-ADMulti”
AppGroupName = “AVD-ADMulti-DAG”
Groups = @()
Users = @(“user10@xxx.onmicrosoft.com”)
スクリプトが実行されると、”AVD Users”が解除されて、”user10″が割り当てられています。

