次の方法で共有


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

Microsoft Graph アクティビティ ログ は、Microsoft Graph サービスが受け取るすべての HTTP 要求とテナントのプロセスの監査証跡を提供します。 テナント管理者は、Azure Monitor の診断設定を使用して、ログ収集を有効にし、ダウンストリームの宛先を設定できます。 ログは分析のために Log Analytics に移動します。 長期ストレージ用に Azure Storage にエクスポートすることも、アラート、分析、またはアーカイブ用の外部 SIEM ツールにAzure Event Hubsしてストリーミングすることもできます。

基幹業務アプリ、API クライアント、SDK、Microsoft アプリ (Outlook、Microsoft Teams、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 要求に関するデータを示します。

Column 種類 説明
AadTenantId string Azure AD テナント ID。
ApiVersion string イベントの API バージョン。
AppId string アプリケーションの識別子。
ATContent string 将来使用するために予約されています。
ATContentH string 将来使用するために予約されています。
ATContentP string 将来使用するために予約されています。
_BilledSize real レコード サイズ (バイト単位)
ClientAuthMethod int クライアントの認証方法を示します。 パブリック クライアントの場合、値は 0 です。 クライアント ID とクライアント シークレットが使用されている場合、値は 1 です。 クライアント証明書が認証に使用された場合、値は 2 です。
ClientRequestId string 省略可能。 送信時のクライアント要求識別子。 クライアント要求識別子が送信されない場合、値は操作識別子と等しくなります。
DeviceId 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 の識別子。
SessionId string 認証セッションの一意識別子。
SignInActivityId string サインイン アクティビティを表す識別子。
SourceSystem string イベントが収集されたエージェントの種類。 たとえば、Windows エージェントのOpsManager、直接接続または Operations Manager、すべての Linux エージェントのLinux、Azure DiagnosticsのAzureなどです。
TenantId string Log Analytics ワークスペース ID
TimeGenerated 日付型 要求が受信された日時。
TokenIssuedAt 日付型 トークンが発行されたタイムスタンプ。
string テーブルの名前
UniqueTokenId string 監査された変更を行うために使用される API 呼び出しの一意のトークン識別子。
UserAgent string 要求に関連するユーザー エージェント情報。
UserId string 要求を行うユーザーの識別子。
Wids string このユーザーに割り当てられているテナント全体のロールを示します。

Microsoft Graph アクティビティ ログの一般的なユース ケース

  • テナントで同意したアプリケーションやその他の API クライアントによって行われたすべてのトランザクションを表示します。
  • 侵害されたユーザー アカウントがテナントで実行するアクティビティを見つけます。
  • 検出と行動分析を構築して、Microsoft Graph API の疑わしい使用や異常な使用を特定します。
  • アプリケーションのアクセス許可の予期しない特権または疑わしい特権の割り当てを調査します。
  • 極端な呼び出しボリュームなど、クライアント アプリケーションの問題のある動作や予期しない動作を特定します。
  • ユーザーまたはアプリによって行われた Microsoft Graph 要求をサインイン情報と関連付けます。

Microsoft Graph アクティビティ ログを設定する

Azure portalの診断設定を使用するか、Azure Resource Manager API を使用してログをStreamします。 詳細については、次の記事を参照してください。

ストレージの宛先を設定するには、次の記事を使用します。

原価計画見積

Microsoft Entra ID P1 ライセンスが既にある場合は、Log Analytics ワークスペース、ストレージ アカウント、または Event Hubs を設定するための Azure サブスクリプションが必要です。 Azure サブスクリプションは無償で取得できますが、Azure リソースを使用するために料金が発生します。

ログに記録されるデータの量と発生するコストは、テナントのサイズと、Microsoft Graph API と対話するテナント内のアプリケーションによって大きく異なる場合があります。 次の表は、価格の計算に役立つログ データ サイズの見積もりを示しています。 これらの見積もりは、一般的な考慮事項にのみ使用してください。

テナント内のユーザー ストレージ (1 か月あたりの GiB) Event Hubs メッセージ (1 か月あたり) Azure Monitor ログ (1 か月あたりの GiB)
1,000 14 62,000 15
100,000 1,000 4,800,000 1,200

各サービスの次の価格の詳細を参照してください。

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