はじめに
Microsoft Graph アクティビティ ログを使用すると、Graph API の実行ログを収集することができます。Graph アクティビティ ログの利用方法についてまとめてみました。
Microsoft Graph アクティビティ ログ とは?
Graph アクティビティ ログを有効にすると、組織内で実行されたすべての Graph API のログを記録することができます。
以下のような利用方法があります。
- Graph API によって行われた操作の監査証跡として使用する
- Graph API の実行数が極端に増加しているなど、疑わしい使用を検知する
Graph アクティビティ ログには以下のようなアプリケーションによる Graph API の実行ログがすべて含まれます。
- Teams や Outlook といった Microsoft のアプリケーション
- Graph Explorer や Postman、PowerShell などのクライアントアプリケーション
(参考:Microsoft Graph アクティビティ ログにアクセスする)
https://learn.microsoft.com/ja-jp/graph/microsoft-graph-activity-logs-overview
(参考:Microsoft Graph activity logs is now generally available)
https://techcommunity.microsoft.com/blog/microsoft-entra-blog/microsoft-graph-activity-logs-is-now-generally-available/4094535
前提条件
Graph アクティビティ ログを有効化するためには、"Microsoft Entra ID P2" ライセンスが必要です。
Microsoft Entra ID ライセンスは Azure ポータルより、以下の手順で確認することができます。
(参考:Microsoft Entra ライセンス)
https://learn.microsoft.com/ja-jp/entra/fundamentals/licensing#microsoft-entra-licensing-options
Graph アクティビティ ログの利用方法
Graph アクティビティ ログを利用するためには、以下の手順で Azure ポータルから設定を行います。
- ログの保存先となる "Log Analytics ワークスペース" を作成します
- "診断ログ" を有効化して Log Analytics ワークスペースへ Graph アクティビティ ログが出力されるようにします
事前準備
1. Log Analytics ワークスペースの作成
-
[リソースの作成] 画面で検索ボックスに "ログ分析" と入力して検索します
-
[ログ分析] のリソースをクリックます
- 任意のリソースグループと名前を設定して、[確認と作成] ボタンからリソースを作成します
(参考:Log Analytics ワークスペースを作成する)
https://learn.microsoft.com/ja-jp/azure/azure-monitor/logs/quick-create-workspace?tabs=azure-portal
2. 診断ログの設定
- 検索ボックスに "Entra ID" と入力し、[Microsoft Entra ID] をクリックします
-
[監視] - [診断設定] をクリックします
-
[+ 診断設定を追加する] をクリックします
-
[MicrosoftGraphActivityLogs] や 各 SignInLogs に✅を入れ、[Log Analytics ワークスペースへの送信] に✅を入れて事前準備で作成したリソースを選択します
[保存] ボタンをクリックします
診断ログの設定が作成されると、Graph Activity ログが Log Analytics ワークスペースへ保存されるようになります。
SignInLogs や RiskyUsers もログに含めることによって、Graph Activity ログと合わせて分析することができます。
ログの確認方法
Graph Activity ログは以下の手順で Log Analytics ワークスペースからログを検索することで確認します。公開情報 に Graph アクティビティログの検索例が記載されています。
- 診断ログで設定した Log Analytics ワークスペースのリソースの画面で [ログ] をクリックします
初めに表示される画面は "×" で閉じます
- 次の画面も "×" で閉じます
- 右側のプルダウンで [KQL モード] を選択します
- 公開情報のクエリの例を実行してみます
a. スロットリング による制限が発生しているアプリケーションを検索するクエリクエリを入力欄に貼り付けて、[実行] ボタンを押しますMicrosoftGraphActivityLogs | where TimeGenerated > ago(3d) | where ResponseStatusCode == 429 | extend path = replace_string(replace_string(replace_regex(tostring(parse_url(RequestUri).Path), @'(\/)+','//'),'v1.0/',''),'beta/','') | extend UriSegments = extract_all(@'\/([A-z2]+|\$batch)($|\/|\(|\$)',dynamic([1]),tolower(path)) | extend OperationResource = strcat_array(UriSegments,'/')| summarize RateLimitedCount=count() by AppId, OperationResource, RequestMethod | sort by RateLimitedCount desc | limit 100

スロットリングが発生しているアプリについて、ID や対象の Graph API の情報が表示されます

b. Graph API の実行回数の時系列グラフを表示するクエリクエリを入力欄に貼り付けて、[実行] ボタンを押すと、実行回数についての時系列グラフが表示されますMicrosoftGraphActivityLogs | where TimeGenerated between (ago(3d) .. ago(1h)) | summarize EventCount = count() by bin(TimeGenerated, 10m) | render timechart with ( title="Recent traffic patterns", xtitle="Time", ytitle="Requests", legend=hidden )
