💬

PowerShell で Azure Virtual Desktop のユーザ割当てを変更する

2022/05/21に公開

そもそも Azure Virtual Desktop の Application group の assignment がどうなってるか

じつは、Application group に対して、RBAC が設定されているだけだったりします。
Assignments 側の画面でこう設定されていたとします。

screenshot of avd user assignment
Application group の assignment のスクリーンショット

んで、同じく Application group の Access control (IAM) を確認するとこんな感じです。

screenshot of Application group RBAC assignment
Application group の RBAC の スクリーンショット

ちょっとわかりづらいですが、ここでは AVD-Collection-01-DAG という Security group に Desktop Virtualization User の RBAC が設定されているだけなんですね。
シンプルでいいなと思いつつ、RBAC の 4,000 割り当てという 制限 を消費していくということでもあります。
マルチセッション ホストの場合には Security group を利用できますが、個人型の場合には困る可能性が、、、ということですね。

ということを踏まえるとこれを変更するための PowerShell は以下のようになるわけです。

PowerShell で Azure Virtual Desktop の user assignment を変更する

こちらが追加する方の PowerShell です。
上記内容を踏まえれば何も難しいことはないです。

Function Add-AzWvdApplicationGroupUser() {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)] [string] $ResourceGroupName,
        [Parameter(Mandatory = $true)] [string] $ApplicationGroupName,
        [Parameter(Mandatory = $true)] [string] $SignInName
    )

    $subscriptionId = (Get-AzContext).Subscription.Id

    New-AzRoleAssignment `
        -Scope "/subscriptions/$subscriptionId/resourcegroups/$ResourceGroupName/providers/Microsoft.DesktopVirtualization/applicationgroups/$ApplicationGroupName" `
        -RoleDefinitionName 'Desktop Virtualization User' `
        -SignInName $SignInName
}

削除する方はこんな感じです。

Function Remove-AzWvdApplicationGroupUser() {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)] [string] $ResourceGroupName,
        [Parameter(Mandatory = $true)] [string] $ApplicationGroupName,
        [Parameter(Mandatory = $true)] [string] $SignInName
    )

    $subscriptionId = (Get-AzContext).Subscription.Id

    Remove-AzRoleAssignment `
        -Scope "/subscriptions/$subscriptionId/resourcegroups/$ResourceGroupName/providers/Microsoft.DesktopVirtualization/applicationgroups/$ApplicationGroupName" `
        -RoleDefinitionName 'Desktop Virtualization User' `
        -SignInName $SignInName
}

2022 年 5 月時点でたぶんこれが公式の PowerShell module で提供されていないので workaround 的に使っていただく分にはいいのかなと。


ちなみに gist にもともとあったのを記事として書き起こしただけです。
https://gist.github.com/skmkzyk/67fc6c0ad361fa7e24275c6f7df704d3

Microsoft (有志)

Discussion