Enterprise Application の権限管理を Microsoft Graph PowerShell でやってみる
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
次に、Users and groups から権限をつけたいユーザーやグループを追加します。
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 を使っていきましょう。
まだインストールしてないよ、という方は以下のリンクからどうぞ。
ログインしてそれっぽいコマンドを叩いていく
ということで準備が整いました。
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 の中で使っていくのは、clientId
と resourceId
です。
で、これはどこから取得できるかですが、再度 Microsoft Entra ID を開いて、Enterprise Application の一覧から先ほどの Web Apps と同じ名前のものをクリックします。
clientId
はその概要の画面の中にある Object ID です。
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 はインストールしないんですがまぁとりあえずここから
-
Connect-MgGraph
まずはこれから
-
Get-MgOauth2PermissionGrant
今ついてる権限の一覧はこちらから、Where-Object
とかを挟まないと全部が出力されます
-
New-MgOauth2PermissionGrant
権限を追加する場合はこちらから
-
Remove-MgOauth2PermissionGrant
権限を削除する場合はこちらから
- Text Blurrer - Microsoft Edge Addons
いろいろぼかしてるのはこれとかを使っています
Discussion