🔏
Sentinel でユーザーの Microsoft365 利用状況を把握
はじめに
退職したユーザーやテストユーザーなど、M365 ライセンスを付与しているけれども使用していないユーザーはライセンスを無駄に消費していることになります。これらの棚卸の方法は以下のリンクにある標準のレポートや PowerBI を使う方法 (PowerBI Pro が必要) などいくつかありますが、今回は Sentinel で把握する方法を確認します。
取得したログを分析する
Sentinel では本件に関連するログとして Entra ID のサインインログ (SigninLogs) とM365 の Teams/Exchange Online / SharePoint Online ログが取得可能です。(2025.01 時点)
取得方法の詳細説明は割愛しますが、これらは以下コネクタから取得します。
また Sentinel では、UEBA 機能を有効にすると、IdentityInfo テーブルが作成されます。こちらは、テナント内のアカウントが記録されるテーブルです。
こちらの一覧に対して、Entra ID のサインインログ、Teams/ExO/SPO ログがあるユーザーを突き合わせ、アクセス有無の一覧を表示するクエリを作成します。
// OfficeActivity テーブルで過去 90 日間に活動が記録されたユーザーの一覧を取得
let OfficeActiveUsers = OfficeActivity
| where TimeGenerated >= ago(90d)
| summarize by UserId;
// SigninLogs テーブルで過去 90 日間にサインイン活動が記録されたユーザーの一覧を取得
let SignInActiveUsers = SigninLogs
| where TimeGenerated >= ago(90d)
| summarize by UserPrincipalName;
// IdentityInfo テーブルを参照し、過去14日間のユーザー情報を収集
IdentityInfo
| where TimeGenerated >= ago(14d)
| where isnotempty(AccountUPN)
| summarize max(TimeGenerated) by AccountUPN,AccountDisplayName,IsAccountEnabled
// IdentityInfo に OfficeActiveUsers を左外部結合し、Office 活動の有無を付加
| join kind=leftouter (OfficeActiveUsers | project UserId | extend OfficeActivity = "Yes") on $left.AccountUPN == $right.UserId
// IdentityInfo に SignInActiveUsers を左外部結合し、サインイン活動の有無を付加
| join kind=leftouter (SignInActiveUsers | project UserPrincipalName | extend SignInActivity = "Yes") on $left.AccountUPN == $right.UserPrincipalName
// 必要なフィールドを選択し、null の場合には No を設定
| project AccountUPN, AccountDisplayName, IsAccountEnabled, SignInActivity = coalesce(SignInActivity, "No"), OfficeActivity = coalesce(OfficeActivity, "No")
出力結果は以下のイメージです。
注意点
- ログ量が多いテーブルを用いるため、完了しない可能性があります。その場合は 90 日としている期間を短縮して再実行してみてください。
- OfficeActivity については、一部管理操作や DLP のログも含まれます。そのため、Yes だとしてもM365 サービスを使用していないケースがあります。
- OfficeActivity は現在 Teams/ExO/SPO ログになるため、これら以外のサービスのみを使用している場合でも No となります。SigninLogs の結果と合わせ、ライセンスの要否をご判断ください。
Discussion