Microsoft Graph アクティビティ ログにアクセスする
Microsoft Graph アクティビティ ログ は、Microsoft Graph サービスがテナントに対して受信して処理したすべての HTTP 要求の監査証跡です。 テナント管理者は、Azure Monitor の診断設定を使用して、収集を有効にし、これらのログのダウンストリームの宛先を構成できます。 ログは分析のために Log Analytics に格納されます。アラート、分析、またはアーカイブ用の外部 SIEM ツールにAzure Event Hubsを使用して、長期ストレージまたはストリーム用に Azure Storage にエクスポートできます。
基幹業務アプリケーション、API クライアント、SDK、および Outlook、Microsoft Teams、Microsoft Entra 管理センターなどの Microsoft アプリケーションによって行われた API 要求のすべてのログを使用できます。
このサービスは、次の 国内クラウド デプロイで利用できます。
グローバル サービス | 米国政府機関 L4 | 米国政府機関 L5 (DOD) | 21Vianet が運営する中国 |
---|---|---|---|
✅ | ✅ | ✅ | ❌ |
前提条件
Microsoft Graph アクティビティ ログにアクセスするには、次の権限が必要です。
- テナント内の Microsoft Entra ID P1 または P2 テナント ライセンス。
- サポートされているMicrosoft Entra管理者ロールを持つ管理者。 セキュリティ管理者 は、診断設定を構成するためにサポートされる唯一の最小特権管理者ロールです。
- 次のいずれかのログ宛先を持つ Azure サブスクリプションが構成され、対応するログ宛先内のデータにアクセスするためのアクセス許可が構成されます。
- Azure Monitor にログを送信するための Azure Log Analytics ワークスペース
- リスト キーのアクセス許可を持つ Azure Storage アカウント
- サード パーティのソリューションと統合するためのAzure Event Hubs名前空間
Microsoft Graph アクティビティ ログで使用できるデータは何ですか?
Logs Analytics インターフェイスでの Microsoft Graph アクティビティ ログの API 要求に関連する使用可能なデータについては、「 Azure Monitor ログ リファレンス」を参照してください。
Microsoft Graph アクティビティ ログの一般的なユース ケース
- テナントで同意したアプリケーションやその他の API クライアントによって行われたトランザクションを完全に可視化します。
- 侵害されたユーザー アカウントがテナントで実行したアクティビティを特定します。
- 検出と行動分析を構築して、Microsoft Graph API の疑わしい使用または異常な使用を特定します。
- アプリケーションのアクセス許可の予期しない特権または疑わしい特権の割り当てを調査します。
- 極端な呼び出しボリュームなどのクライアント アプリケーションの問題のある動作または予期しない動作を特定します。
- ユーザーまたはアプリによって行われた Microsoft Graph 要求をサインイン情報と関連付けます。
Microsoft Graph アクティビティ ログを受信するように構成する
Azure portalの診断設定または Azure Resource Manager API を使用してログをストリーミングするように構成できます。 詳細については、次の記事のガイダンスを参照してください。
次の記事では、ストレージの宛先を構成する方法について説明します。
原価計画見積
Microsoft Entra ID P1 ライセンスが既にある場合は、Log Analytics ワークスペース、ストレージ アカウント、または Event Hubs を設定するための Azure サブスクリプションが必要です。 Azure サブスクリプションは無償ですが、Azure リソースを利用するには料金を支払う必要があります。
ログに記録されるデータの量、つまり発生するコストは、テナントのサイズと、Microsoft Graph API と対話するテナント内のアプリケーションによって大きく異なる場合があります。 次の表に、価格計算を支援するログ データ サイズの見積もりをいくつか示します。 これらの見積もりは、一般的な考慮事項にのみ使用してください。
テナント内のユーザー | ストレージ GiB/月 | Event Hubs メッセージ/月 | Azure Monitor ログ GiB/月 |
---|---|---|---|
1000 | 14 | 62K | 15 |
100000 | 1000 | 4.8M | 1200 |
各サービスの次の価格計算を参照してください。
Log Analytics のコスト削減
ログを Log Analytics ワークスペースに取り込んでいるが、特定の列や行の省略などの条件でフィルター処理されたログにのみ関心がある場合は、Microsoft Graph アクティビティ ログ テーブルにワークスペース変換を適用することで、コストを部分的に削減できます。 ワークスペース変換の詳細、インジェスト コストへの影響、および Microsoft Graph アクティビティ ログへの変換の適用方法については、「 Azure Monitor でのデータ収集変換」を参照してください。
Log Analytics のコストを削減する別の方法として、機能を減らすことで請求額を削減する Basic ログ データ プランに切り替えます。 詳細については、「 テーブルのログ データ プランを Basic または Analytics に設定する」を参照してください。
Azure Monitor ログクエリの例
Microsoft Graph アクティビティ ログを Log Analytics ワークスペースに送信する場合は、Kusto 照会言語 (KQL) を使用してログを照会できます。 Log Analytics ワークスペースのクエリの詳細については、「Log Analytics を使用してアクティビティ ログMicrosoft Entra分析する」を参照してください。 これらのクエリを使用して、データ探索、アラート ルールの構築、Azure ダッシュボードの構築、または Azure Monitor Logs API または Query SDK を使用してカスタム アプリケーションに統合できます。
次の Kusto クエリは、承認のために失敗しているリソースをグループに要求する上位 20 のエンティティを識別します。
MicrosoftGraphActivityLogs
| where TimeGenerated >= ago(3d)
| where ResponseStatusCode == 401 or ResponseStatusCode == 403
| where RequestUri contains "/groups"
| summarize UniqueRequests=count_distinct(RequestId) by AppId, ServicePrincipalId, UserId
| sort by UniqueRequests desc
| limit 20
次の Kusto クエリは、潜在的に危険なユーザーによってクエリまたは変更されたリソースを識別します。
MicrosoftGraphActivityLogs
| where TimeGenerated > ago(30d)
| join AADRiskyUsers on $left.UserId == $right.Id
| extend resourcePath = replace_string(replace_string(replace_regex(tostring(parse_url(RequestUri).Path), @'(\/)+','/'),'v1.0/',''),'beta/','')
| summarize RequestCount=dcount(RequestId) by UserId, RiskState, resourcePath, RequestMethod, ResponseStatusCode
次の Kusto クエリを使用すると、Microsoft Graph アクティビティ ログとサインイン ログを関連付けることができます。 Microsoft アプリケーションのアクティビティ ログに、一致するサインイン ログ エントリが含まれていない場合があります。 詳細については、「 サインイン ログの既知の制限事項」を参照してください。
MicrosoftGraphActivityLogs
| where TimeGenerated > ago(7d)
| join kind=leftouter (union SigninLogs, AADNonInteractiveUserSignInLogs, AADServicePrincipalSignInLogs, AADManagedIdentitySignInLogs, ADFSSignInLogs
| where TimeGenerated > ago(7d))
on $left.SignInActivityId == $right.UniqueTokenIdentifier
次の Kusto クエリは、調整されているアプリを識別します。
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
次のクエリを使用すると、時系列グラフをレンダリングできます。
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
)
制限事項
- Microsoft Graph アクティビティ ログ機能を使用すると、テナント管理者はリソース テナントのログを収集できます。 この機能では、別のテナント内のマルチテナント アプリケーションのアクティビティを表示することはできません。
- Azure Monitor の診断設定を使用して Microsoft Graph アクティビティ ログをフィルター処理することはできません。 ただし、Azure Log Analytics ワークスペースのコストを削減するために、オプションを使用できます。 詳細については、「 ワークスペース変換」を参照してください。
- ほとんどのリージョンでは、イベントが使用可能で、30 分以内に構成先に配信されます。 あまり一般的ではないケースでは、一部のイベントが宛先に配信されるまでに最大 2 時間かかる場合があります。