次の方法で共有


Microsoft Graph アクティビティ ログにアクセスする

Microsoft Graph アクティビティ ログ は、Microsoft Graph サービスがテナントに対して受信して処理したすべての HTTP 要求の監査証跡です。 テナント管理者は、Azure Monitor の診断設定を使用して、収集を有効にし、これらのログのダウンストリームの宛先を構成できます。 ログは分析のために Log Analytics に格納され、長期ストレージ用に Azure Storage にエクスポートしたり、アラート、分析、アーカイブのために Azure Event Hubs を使用して外部 SIEM ツールにストリーミングしたりできます。

基幹業務アプリケーション、API クライアント、SDK、Microsoft アプリケーション (Outlook、Microsoft Teams、Microsoft Entra 管理センターなど) から行われた 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 アクティビティ ログで使用できるデータは何ですか?

Api 要求に関連する次のデータは、Logs Analytics インターフェイスの Microsoft Graph アクティビティ ログで使用できます。

Column 種類 説明
AadTenantId string Azure AD テナント ID。
ApiVersion string イベントの API バージョン。
Appid string アプリケーションの識別子。
ATContent string 将来使用するために予約されています。
ATContentH string 将来使用するために予約されています。
ATContentP string 将来使用するために予約されています。
_BilledSize 本当の レコード サイズ (バイト単位)
ClientAuthMethod int クライアントの認証方法を示します。 パブリック クライアントの場合、値は 0 です。 クライアント ID とクライアント シークレットが使用されている場合、値は 1 です。 クライアント証明書が認証に使用された場合、値は 2 です。
ClientRequestId string 省略可能。 送信時のクライアント要求識別子。 クライアント要求識別子が送信されない場合、値は操作識別子と等しくなります。
DurationMs int 要求の期間 (ミリ秒単位)。
IdentityProvider string トークンのサブジェクトを認証した ID プロバイダー。
IPAddress string 要求が発生したクライアントの IP アドレス。
_IsBillable string データの取り込みを課金可能にするかどうかを指定します。 _IsBillableインジェストが false Azure アカウントに課金されない場合
Location string 要求を処理したリージョンの名前。
OperationId string バッチの識別子。 バッチ処理されていない要求の場合、これは要求ごとに一意になります。 バッチ処理された要求の場合、これはバッチ内のすべての要求で同じになります。
RequestId string 要求を表す識別子。
RequestMethod string イベントの HTTP メソッド。
RequestUri string 要求の URI。
ResponseSizeBytes int 応答のサイズ (バイト単位)。
ResponseStatusCode int イベントの HTTP 応答状態コード。
役割 string トークン要求のロール。
Scopes string トークン要求のスコープ。
ServicePrincipalId string 要求を行う servicePrincipal の識別子。
SignInActivityId string サインイン アクティビティを表す識別子。
SourceSystem string イベントが収集されたエージェントの種類。 たとえば、 OpsManager Windows エージェントの場合、直接接続または Operations Manager、すべての Linux エージェント、 Linux または Azure Azure Diagnostics の場合
TenantId string Log Analytics ワークスペース ID
TimeGenerated 日付型 要求が受信された日時。
TokenIssuedAt 日付型 トークンが発行されたタイムスタンプ。
種類 string テーブルの名前
UserAgent string 要求に関連するユーザー エージェント情報。
UserId string 要求を行うユーザーの識別子。
Wids string このユーザーに割り当てられているテナント全体のロールを示します。

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 時間かかる場合があります。