👥
非アクティブな Microsoft Entra ID ユーザーを調査
はじめに
Microsoft Entra ID でユーザーの最終サインイン日時が取得できるようになりました。
いままでも以下のような非アクティブなユーザーを調査する方法があったのですが、別サービスやライセンスが必要でした。
- 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 日ログインがないユーザーを洗い出すことなどが可能になります。
懸念点
私の検証環境はユーザー数が少ないので問題ないのですが、数千・数万ユーザーのテナントで動くのかは確認できていません。
Discussion