ウェブサイト検索

Microsoft 365の管理者ロールを持つユーザーをエクスポートする


Microsoft 365における管理者ロールを持つユーザーの追跡は、必要以上の権限を持つユーザーがいないことを確保するために重要です。ユーザーがMicrosoft 365管理センターへのアクセスを必要とする際にしばしば見られるのは、グローバル管理者の権限があまりにも簡単に与えられてしまうことです。

権限に関しては、常に最小特権の原則に従うことが重要です。これは、ユーザーが作業を行うために必要な最小限の権限を付与することを意味します。

この記事では、Microsoft 365で管理者ロールを持つすべてのユーザーを表示し、エクスポートするための3つの方法を紹介します。

方法1 - 管理センターを使用する

Microsoft 365管理センターの[役割] > [役割の割り当て]で役割の割り当てを見ることができます。ただし、各役割を個別に開いて、どのユーザーにその役割が割り当てられているかを確認する必要があります。

ただし、管理センターから割り当てられた役割を持つユーザーのリストをエクスポートすることができます。これは、すべての割り当てを迅速に確認する最も簡単な方法です。以下の手順に従って、管理センターの役割割り当てページを開くか、こちらの直接リンクを使用してください。

  1. M365 管理センターを開く
  2. 役割の拡張と役割の割り当てを開く
  3. 管理者リストをエクスポートをクリックしてください

方法2 - Microsoft Entraを使用する

もちろん、Microsoft Entraでの役割と管理者を表示および管理することもできます。管理センターと同様に、すべての割り当てのリストをダウンロードすることができます:

  1. Microsoft Entraを開く
  2. アイデンティティの下で役割と管理者を拡張します
  3. 役割と管理者を開く
  4. 課題をダウンロードをクリックしてください

方法3 - PowerShellを使用する

テナント内の管理者ロールを持つすべてのユーザーを表示する別のオプションは、PowerShellを使用することです。PowerShellの利点は、結果を自分のニーズに合わせて変更できることです。たとえば、結果に含まれるユーザーのマネージャーの部署も一覧表示したい場合です。

以下のスクリプトは、さらなるニーズに応じて拡張できるシンプルなバージョンです。Microsoft Graphと、RoleManagement.Read.DirectoryおよびUser.Read.Allのスコープを使用します。

まず、利用可能なすべての役割を取得し、その後、どのユーザーにその役割が割り当てられているかを確認します。結果はユーザーごとにソートされているので、ユーザーが複数の役割を持っている場合でも簡単に確認できます。

param (
    [Parameter(
        Mandatory = $false,
        HelpMessage = "Get only users with an admin role"
      )]
    [switch]$usersOnly = $true,

    [Parameter(
        Mandatory = $false,
        HelpMessage = "Enter path to save the CSV file"
      )]
      [string]$path = ".\Users-with-admin-role-$((Get-Date -format "MMM-dd-yyyy").ToString()).csv"
)

Check if MS Graph module is installed
if (Get-InstalledModule Microsoft.Graph) {
    # Connect to MS Graph
    Connect-MgGraph -Scopes "RoleManagement.Read.Directory", "User.Read.All" -NoWelcome
}else{
    Write-Host "Microsoft Graph module not found - please install it" -ForegroundColor Black -BackgroundColor Yellow
    exit
}

Initialize an array to store the results
$results = @()

Get all directory roles and Loop through each role
Get-MgDirectoryRole | ForEach {

    # Get members of the current role
    $members = Get-MgDirectoryRoleMember -DirectoryRoleId $_.Id
    
    # Process each member
    foreach ($member in $members) {

        # Only process user objects (skip groups or service principals)
        if ($usersOnly -and ($member.AdditionalProperties.'@odata.type' -ne '#microsoft.graph.user')) {
            continue
        }
        # Get detailed user information including sign-in activity
        $user = Get-MgUser -UserId $member.Id -Property "Id,UserPrincipalName,DisplayName,AccountEnabled"
    
        # Create new entry for each user-role combination
        $results += [PSCustomObject]@{
            DisplayName = $user.DisplayName
            Role = $_.DisplayName
            AccountEnabled = $user.AccountEnabled
            UserPrincipalName = $user.UserPrincipalName
        }
    }
}

Export results to CSV
$results | Sort-Object UserPrincipalName, Role | Out-GridView # Export-Csv -Path $path -NoTypeInformation -Encoding Utf8

私のGitHubリポジトリからここで完全なスクリプトを入手できます。

まとめ

ユーザーがどの役割を持っているかを追跡することが重要です。ユーザーに役割を割り当てるときは、必要最低限の権限を持つ役割を割り当てるようにしてください。

質問があれば、下にコメントを残してください。