M365Con 2027 – 無料オンラインカンファレンス · 11–22 Jan 2027 · 120 sessions→ m365con.net

ブログ · Mirko Peters

Microsoft Graphで見落とされがちなM365コンプライアンスの盲点を明らかにする

By ·

ポッドキャストと関連技術ブログへ、ようこそお戻りくださいました! Microsoft 365 のコンプライアンス ダッシュボードを既定の状態のまま信頼し、すべてが…と思い込んだことがあるなら…

Automatically translated with AI from the original post. Read the English original

▶ BLOGUncovering M365Compliance Blindspots…M365.FM
Titelbild: Uncovering M365 Compliance Blindspots with Microsoft Graph

ポッドキャストと関連する技術ブログへようこそ。標準のMicrosoft 365コンプライアンスダッシュボードをそのまま信頼し、すべてが完全に把握できていると考えているなら、それは誤った安心感に陥っているかもしれません。既定のコンプライアンスダッシュボードは要約を示すためのものであり、絶対的な真実を示すものではありません。データ損失防止(DLP)の検出、eDiscoveryのアクション、基盤となるセキュリティアラートといった重要なシグナルは、多くの場合、別途アクセス許可、高度なクエリパラメーター、適切なデータの結合を必要とするMicrosoft Graphのエンドポイントの裏側にあります。このディープダイブでは、標準のレポートで重要な情報が欠けている理由を探り、照会すべきGraphエンドポイントを正確に整理し、その未加工の証拠をMicrosoft Purviewに直接取り込んで、明確で根拠のあるレポートを作成する方法を紹介します。このトピックに関する詳しい議論は、関連するポッドキャストエピソード「Find Missing Microsoft 365 Compliance Data with Graph」でお聴きいただけます。

概要

既定のコンプライアンスダッシュボードは要約であり、真実そのものではありません。重要なシグナル(DLPの検出、eDiscoveryのアクション、セキュリティアラート)は、別のアクセス許可が必要なGraphエンドポイントの裏側にあることが多いのです。本記事では、正確なAPI、スコープ、スクリプトのパターンを整理し、完全な忠実度の証拠を取得して、明確で根拠のあるレポートのためにPurviewへ集約する方法を紹介します。

対象読者

  • 監査に耐えうる証拠を必要とするコンプライアンス、法務、リスク管理の担当者

  • レポートと自動化を構築するM365およびEntraの管理者

  • DLP、eDiscovery、アラートのテレメトリを相関分析するセキュリティチーム

見落としの原因(標準ダッシュボードで欠けるもの)

  • 集計と遅延: UIの要約では、入れ子になったインシデントの詳細や最近のアクティビティが省略されます

  • 範囲の欠落: eDiscoveryのアクションやDLPの一致は、標準のエクスポートの対象外になる場合があります

  • 分割されたアクセス許可: /security と /compliance のエンドポイントでは、必要なスコープが異なります

  • 結合の欠如: ダッシュボードでは、インシデントをユーザー、カストディアン、ケースの手順と関連付けることがほとんどありません

利用価値の高いGraphエンドポイント(そのままコピーして使えるリスト)

  • セキュリティアラート(網羅性)

    • エンドポイント: /security/alerts または /security/alerts_v2

    • アプリのアクセス許可(例): SecurityEvents.Read.All(新しいモデルでは Alerts.Read.All)

    • 用途: アラートのタイムライン、重大度、状態、担当者の確認

  • DLPポリシーとアクティビティ(データ損失)

    • エンドポイント(テナントによって利用可否が異なります):

      • /security/dataLossPreventionPolicies(ポリシーの一覧)

      • /security/dlpIncidents、またはセキュリティ名前空間の高度なDLPインシデントエンドポイント(テナントに依存)

    • アプリのアクセス許可: SecurityEvents.Read.All(利用可能な場合は、特定のDLP読み取りスコープと組み合わせて使用)

    • 用途: 一致内容、場所(Exchange、SharePoint、Teams)、処理結果

  • eDiscovery(ケースとアクション)

    • /compliance/ediscovery/cases

    • 子パス: /custodians、/searches、/reviewSets、/noncustodialDataSources、/operations

    • アプリのアクセス許可: eDiscovery.Read.All(ケースを管理する場合は書き込みも)

    • 用途: ケースの状態、保持、カストディアン、エクスポート、レビューアーの操作

  • 監査とサインインのコンテキスト(補足的な証拠)

    • /auditLogs/directoryAudits、/auditLogs/signIns

    • アプリのアクセス許可: AuditLog.Read.All、Directory.Read.All

    • 用途: 誰が、いつ、何を変更したか、セッションのコンテキスト

ヒント: コンプライアンス関連のペイロードは深く入れ子になっていることが多いため、$expand の使用を検討し、@odata.nextLink でページングし、表示名や部署を取得するために /users/{id} と結合してください。

認証とアクセス許可(トラブルのない方法)

  • 無人で実行するジョブには、アプリケーションのアクセス許可(サービスプリンシパル)を使用します

  • 組織で権限の分離が求められる場合は、セキュリティ用と基本のGraph用に別々のアプリを登録します

  • 同意は最小特権のスコープだけに限定し、シークレットと証明書は Key Vault に格納してください。

  • 429および503に対して指数バックオフを実装し、ログに x-ms-request-id を記録します

スクリプトのパターン(PowerShellまたはPython)

  • Select と Expand: 必要なフィールドだけを $select=… で要求し、入れ子になったエンティティには $expand=… を使用します

  • フィルターと時間枠の設定: 差分取得には $filter=createdDateTime ge {ISO8601} を使用

  • ページング処理: @odata.nextLink でループし、結果が 1 ページに収まるとは想定しない

  • 正規化: 読みやすい出力にするため、ユーザー ID やオブジェクト ID を事前に名前と部署へ変換する

  • コンテキストの結合: エクスポート前に、インシデントへユーザー、サイト、チーム、ケースのメタデータを追加する

Purview への組み込み(データを意思決定につなげる)

  1. 出力の標準化: フィールド名を統一した CSV/JSON で出力する(tenant、incidentId、workload、userId、userUPN、severity、status、created、lastAction、caseId)

  2. 取り込み: Purview が読み取れるセキュアなストレージ(例: ADLS Gen2)にファイルを配置する

  3. タグ付けとラベル付け: ルーティング用に秘密度ラベルまたはカスタムタグ(例: 「DLP-PII-High」)を適用する

  4. ダッシュボード: 傾向、担当者、SLA の経過日数を確認するため、Purview(または Purview のデータを使った Power BI)を利用する

  5. 自動化: 繰り返し発生やエスカレーションの際にケース担当者へ通知するルールを設定し、週次の PDF ダイジェストを作成する

30 分パイロット(手順)

  • 0~10 分: アプリの登録、SecurityEvents.Read.All と eDiscovery.Read.All を付与し、シークレットまたは証明書を作成する

  • 10~20 分: 1 つのエンドポイント(アラートまたはケース)について、ページング処理と過去 7 日間を対象とした $filter を使ってスクリプトを作成する

  • 20~30 分: /users で情報を補完し、CSV にエクスポートして ADLS のパスに配置し、基本的なグラフで可視化する

価値を示す KPI

  • 担当者と処分結果が入力されているインシデントの割合

  • インシデントからケース(またはレビュー担当者への割り当て)までの平均時間

  • 30 日あたりの繰り返し違反を起こしたアカウントおよび場所の数

  • 標準のダッシュボードの件数との差分(ギャップの解消状況)

  • 監査サイクルの所要時間(証拠準備にかかる時間の削減量)

よくある落とし穴と対処法

  • 結果が空になる → スコープの誤りか、Application が必要な場面で委任(Delegated)を使用している

  • 詳細情報が不足する → $expand を指定し忘れている、またはネストされたコレクションが解析されていない

  • データが一部しか取得できない → ページング処理がなく、最初のページしか取得されていない

  • 名前が一致しない → /users や人事データとの結合による補完が行われていない

  • ダッシュボードが古いまま → 定期実行が設定されていない。ジョブを追加し、失敗時のアラートを設定する

今週すぐに始められるクイックwins

  • 直近 7 日間の /security/alerts のデータを取得し、ポータルの件数と比較する

  • オープン状態の eDiscovery ケースとカストディアンをエクスポートし、法務部門に確認を依頼する

  • DLP インシデントの一斉確認を実施して繰り返し発生分にタグを付け、Purview でフォローアップを開始する

  • 週次の証拠パッケージ(CSV と PDF)をコンプライアンス用のメールボックスへ送信するようスケジュールする

よくある質問

  • 開発者である必要はありますか? いいえ。PowerShell や短い Python スクリプトで十分です。

  • なぜアプリのアクセス許可が必要なのですか? /security および /compliance のエンドポイントの多くは、ユーザー操作を伴わない、信頼性の高いアクセスを必要とするためです。

  • PowerShell のままで対応できますか? はい。Microsoft Graph PowerShell SDK を使用し、$top、$filter、$expand、ページング処理を扱ってください。

  • Purview は必須ですか? 厳密には必須ではありません。ただし、生の JSON を監査可能なワークフローやダッシュボードに変えられます。

まとめ

ダッシュボードは要約を示しますが、Graph は全体像を示します。適切なエンドポイントを取得し、認証を整え、ページング処理と展開を行ったうえで、Purview に集約してください。これにより、チェックボックス型のコンプライアンスから、根拠を示せるリアルタイムの可視化へ移行できます。手作業のエクスポートに追われることもなくなります。これらの死角に直接取り組むための詳しい解説や専門家のヒントについては、専用のポッドキャストエピソード Find Missing Microsoft 365 Compliance Data with Graph もぜひお聴きください。スクリプトの改善を続け、アプリのアクセス許可を安全に管理し、ダッシュボードが見落としてきたデータを表面化させていきましょう。

Entities in this article

eDiscovery Compliance Dashboards Microsoft Graph Microsoft Purview Data loss prevention (DLP) PowerShell Microsoft 365 Exchange Online JSON

Related articles

RSS