👥

非アクティブな Microsoft Entra ID ユーザーを調査

2024/06/19に公開

はじめに

Microsoft Entra ID でユーザーの最終サインイン日時が取得できるようになりました。
https://learn.microsoft.com/ja-jp/entra/fundamentals/whats-new#general-availability---lastsuccessfulsignin

いままでも以下のような非アクティブなユーザーを調査する方法があったのですが、別サービスやライセンスが必要でした。

  • Sentinel を利用してサインイン ログを分析し IdentityInfo と突き合わせて調査
  • アクセス レビュー機能を利用 (Microsoft Entra ID P2 が必要)

今回の GA で上記のようなサービスを利用せず、ユーザーのプロパティ情報のみで非アクティブなユーザーを調査できます。

やってみる

まずは Graph Explorer を使用して API を叩いてみます。

https://graph.microsoft.com/v1.0/users/?$select=signInActivity


AuditLog.Read.All が必要となるようなので、追加します。


もう一度実行すると以下のように取得できました。


想定通り取得できることを確認できたので PowerShell スクリプトにしていきます。MS Graph PowerShell の Get-MgUser で同じように情報が取得できるため、そちらを利用して UPN と最終サインイン日時の一覧を作成します。

# Microsoft Graphに接続
Connect-MgGraph -Scopes "User.Read.All", "AuditLog.Read.All"

# ユーザー情報を取得
$users = Get-MgUser -Property "userPrincipalName,signInActivity" -All

# 空の配列を作成して結果を保存
$result = @()

# 各ユーザーの情報を処理
foreach ($user in $users) {
    $upn = $user.userPrincipalName
    $signInActivity = $user.signInActivity
    $lastSignInDateTime = if ($signInActivity) { $signInActivity.lastSignInDateTime } else { $null }

    # 結果を配列に追加
    $result += [PSCustomObject]@{
        'UPN' = $upn
        'Last Sign-In DateTime' = $lastSignInDateTime
    }
}

# 結果をテーブル形式で表示
$result | Format-Table -AutoSize
 

以下のように結果が出力されます。Last Sign-In DateTime は一度もログインがないユーザーのはずです。こちらを活用して、例えば過去 30 日ログインがないユーザーを洗い出すことなどが可能になります。

懸念点

私の検証環境はユーザー数が少ないので問題ないのですが、数千・数万ユーザーのテナントで動くのかは確認できていません。

Microsoft (有志)

Discussion