PowerShellでAzure AD ロールと管理者の権限一覧を取得する
Azure ADにはロールと管理者という設定画面があり、この設定を変更することで「この管理者には〇〇をさせたい」「この管理者には××の権限を渡さない」といったことを実現できるようになっています。
このロールと管理者を割り当てるにあたって「この管理者にはこの管理をさせたい」という観点では割り当てがしやすいのですが、「今の管理者にどれだけの権限があるのか」を確認するのは少し難しかったりします。
もう少し詳細にすると、どのロールにどんな権限があるのかはAzure ADの管理画面から確認することは難しいです。
そこで今回はPowerShellを使ってどのロールにどんな権限が割り当てられているのか一覧を出力する方法を解説します。
前提として
※この項目はすでにご存じの方であれば読み飛ばしても大丈夫です。
Azure ADやMicrosoft 365製品の管理権限はロールベースのアクセス制御(Role Base Access Control:RBAC)という概念で実装されています。
簡単に説明すると、何ができるのかという具体的な項目はスコープ(権限)として準備されています。その中から必要に応じてロールに対してスコープを割り当てていき、さらにユーザーにロールを割り当てるという流れになります。
最終的にはロールが割り当てられたユーザーは、そのロールに割り当てられているスコープの操作をすることができるという仕組みです。
ユーザーに複数のロールを割り当てることも可能ですし、1つのロールに複数のスコープを割り当てることもできるので柔軟な権限割り当てが可能になっています。
前準備:Azure ADモジュールのインストール
すでに実施済みの方が多いかとは思いますが、Azure AD PowerShellモジュールをインストールしておきましょう。
管理者権限でPowerShellを起動し、 Install-Module AzureAD でOKです。
モジュールをインストールしたら、Connect-AzureADコマンドでAzureADに接続します。このとき、AzureAD管理者権限のあるMicrosoft 365アカウントで認証しましょう。
ロール一覧を表示する
ロール一覧の表示は下記のコマンドで表示されます。
Get-AzureADMSRoleDefinition
このままでは少しわかりにくいので、Id, DisplayName, Descriptionだけ抜き出すとイメージがわきやすくなります。
Get-AzureADMSRoleDefinition | Select-Object -Property Id,DisplayName,Description | Format-Table
例えば、グローバル管理者の説明欄を確認すると、名前=DisplayName、説明=Description、テンプレートID=Idということがわかります(英語表記と日本語表記で異なりますが)。
ロールに割り当てられている権限を確認
特定のロールに割り当てられている権限
例えば、グローバル管理者に割り当てられているすべての権限は下記のコマンドで確認できます。
(Get-AzureADMSRoleDefinition -Filter "DisplayName eq 'Global Administrator'").RolePermissions.AllowedResourceActions
グローバル管理者なので数はかなり多く、全部で150ありました。
すべてのロールに割り当てられている権限
ロール割り当てされている権限をすべて出力する場合は下記のコマンドになります。
$roles = Get-AzureADMSRoleDefinition
foreach($role in $roles){
$role.displayname
($role).RolePermissions.AllowedResourceActions
}
特定の権限が割り当てられているロール
アプローチを逆にして、ある特定の権限が割り当てられているロールを出力する場合は下記のとおりです。
下記の例では監査ログ(microsoft.directory/auditLogs/allProperties/read)にアクセスできるロールの一覧を出力します。
$roles = Get-AzureADMSRoleDefinition
foreach($role in $roles){
foreach($permission in ($role).RolePermissions.AllowedResourceActions){
if($permission -eq "microsoft.directory/auditLogs/allProperties/read"){
$role.DisplayName
}
}
}
特定の権限が割り当てられているロールが割り当てられているユーザー
ちょっと長いですが、いわんとしていることはわかっていただける・・・と思います。
コマンドは下記のような形になります。
$roles = Get-AzureADMSRoleDefinition
foreach($role in $roles){
foreach($permission in ($role).RolePermissions.AllowedResourceActions){
if($permission -eq "microsoft.directory/auditLogs/allProperties/read"){
$role.DisplayName
$assign = Get-AzureADMSRoleAssignment -Filter ("roleDefinitionId eq '" + $role.Id + "'")
Get-AzureADUser -ObjectId $assign.PrincipalId
}
}
}
上記コマンドではそもそもユーザーの割り当てがないロールに関してはエラーが出てきてしまいますが、そのあたりはPowerShellのエラー実行ポリシー変更などで必要に応じて対応してください。
また、Userロールは管理者権限とは関係のないロールになります(Azure ADのロールと管理者一覧には無い)のでスキップする処理を組み込んでもよいかもしれません。
下記画像の結果では監査ログを利用できるロールのうち、グローバル管理者に割り当てられているユーザーがいることがわかります。
まとめ
- Azure ADロールと管理者の割り当て権限一覧はPowerShellの操作が必要
- スクリプト化すればいろいろな角度から設定を把握できます