👋

Enterprise Application の権限管理を Microsoft Graph PowerShell でやってみる

2024/01/31に公開

TL;DR

  • Azure OpenAI Service から作成できるサンプルの Web Apps の権限管理をしたい
  • 「Assignment required?」を設定すると利用できるユーザーは確かに絞れるのですが、管理者の追加の手順が必要そう
  • Microsoft Graph PowerShell を使ってとりあえずシュッとやれることを確認した

はじめに

Azure OpenAI Service から作成できる sample-app-aoai-chatGPT の権限管理をしようと思ったんですよね。
で、Microsoft Entra ID でそれっぽい設定にしてみたんですが、どうもうまくいかず、これがあってるのかさらに理解を進めなきゃなと思いつつ、とりあえずこうやればできたよというメモです。

何をしているのか

Azure OpenAI Service から作成できる Web Apps ですが、規定では該当テナントのユーザーであればだれでも使えるようになっているはずです。
これに対して、特定のユーザーのみに権限を付与する、ということをやっていきます。

Microsoft Entra ID を開いて、Enterprise Application の一覧から作成した Web Apps と同じ名前のものをクリックします。
まずは、Properties の中にある「Assignment required?」を Yes にします。

Assignment required switch on Enterprise Application properties page
Assignment required switch on Enterprise Application properties page

次に、Users and groups から権限をつけたいユーザーやグループを追加します。

Users and groups for Enterprise Application
Users and groups for Enterprise Application

気持ち的にはこれでいけるはずなのですが、実際にはうまくいかず、user consent が必要で、それにはテナントの管理者が必要ということで詰まってしまいます。
一度 Assignment required?No に戻して、該当のユーザーでログインしてみると、Enterprise Application > Permissions > User consent の部分が変わっていることに気づきます。
原因調査は別途やるのですが、とりあえず Microsoft Graph PowerShell を使ってこの権限を追加します。

Microsoft Graph PowerShell を使っていく

ということで Microsoft Graph PowerShell を使っていきましょう。
まだインストールしてないよ、という方は以下のリンクからどうぞ。

https://learn.microsoft.com/powershell/microsoftgraph/installation?wt.mc_id=MVP_391314

ログインしてそれっぽいコマンドを叩いていく

ということで準備が整いました。

Connect-MgGraph

まずはログインします。
-Scopes の指定が必要なのは Connect-AzAccount とは結構違うなと感じますね。

Connect-MgGraph -Scopes "Application.Read.All", "Directory.Read.All", "DelegatedPermissionGrant.ReadWrite.All" -TenantId xxxxxxxx.onmicrosoft.com

次の cmdlet に必要な情報を集めておく

なんかここら辺似たような GUID が 3 種類あって、かつ名前も似ていてわかりづらいですよね。
今回 PowerShell の中で使っていくのは、clientIdresourceId です。

で、これはどこから取得できるかですが、再度 Microsoft Entra ID を開いて、Enterprise Application の一覧から先ほどの Web Apps と同じ名前のものをクリックします。
clientId はその概要の画面の中にある Object ID です。

Object ID on Enterprise Application overview page
Object ID on Enterprise Application overview page

resourceId も探してみたんですが、ちょっと見当たらず、とりあえず Get-MgOauth2PermissionGrant | Where-Object {$_.ClientId -eq "メモった clientId"} とやれば出力されるのでそれをメモっておきましょう。

Get-MgUser

次に、権限を追加するユーザを検索しておきます。

$user = Get-MgUser -Filter "userPrincipalName eq 'hoge@xxxxxxxx.onmicrosoft.com'"

New-MgOauth2PermissionGrant

ということで取得した $user を使って実際の権限を追加します。

$params = @{
	clientId    = "<メモった clientId>"
	consentType = "Principal"
	PrincipalId = $user.Id
	resourceId  = "<メモった resourceId>"
	scope       = "openid offline_access profile User.Read User.ReadBasic.All"
}

New-MgOauth2PermissionGrant -BodyParameter $params

Remove-MgOauth2PermissionGrant

削除する場合には該当の grant をつかんでからその ID を指定して削除します。

$grant = Get-MgOauth2PermissionGrant | Where-Object {$_.ClientId -eq "<メモった clientId>"} | Where-Object { $_.PrincipalId -eq $user.id }
Remove-MgOauth2PermissionGrant -OAuth2PermissionGrantId $grant.Id

まとめ

ということで、Microsoft Graph PowerShell を使って Azure OpenAI Service から作成できる Web Apps の権限管理をしました。
まだ理解が不十分であるためワークアラウンド的になっていますが、とりあえず追加と削除ができるようになりました。

参考

  • Install the Microsoft Graph PowerShell SDK
    SDK はインストールしないんですがまぁとりあえずここから

https://learn.microsoft.com/powershell/microsoftgraph/installation?wt.mc_id=MVP_391314

  • Connect-MgGraph
    まずはこれから

https://learn.microsoft.com/powershell/module/microsoft.graph.authentication/connect-mggraph?wt.mc_id=MVP_391314

  • Get-MgOauth2PermissionGrant
    今ついてる権限の一覧はこちらから、Where-Object とかを挟まないと全部が出力されます

https://learn.microsoft.com/powershell/module/microsoft.graph.identity.signins/get-mgoauth2permissiongrant?wt.mc_id=MVP_391314

  • New-MgOauth2PermissionGrant
    権限を追加する場合はこちらから

https://learn.microsoft.com/powershell/module/microsoft.graph.identity.signins/new-mgoauth2permissiongrant?wt.mc_id=MVP_391314

  • Remove-MgOauth2PermissionGrant
    権限を削除する場合はこちらから

https://learn.microsoft.com/powershell/module/microsoft.graph.identity.signins/remove-mgoauth2permissiongrant?wt.mc_id=MVP_391314

  • Text Blurrer - Microsoft Edge Addons
    いろいろぼかしてるのはこれとかを使っています

https://microsoftedge.microsoft.com/addons/detail/text-blurrer/ignhinbnamdnglcofbcconhndfilnmpj

Discussion