访问 Microsoft Graph 活动日志

Microsoft Graph 活动日志 是 Microsoft Graph 服务为租户接收和处理的所有 HTTP 请求的审核线索。 租户管理员可以使用 Azure Monitor 中的诊断设置为这些日志启用集合并配置下游目标。 日志存储在 Log Analytics 中以供分析,你可以将其导出到 Azure 存储进行长期存储,或者使用Azure 事件中心流式传输到外部 SIEM 工具,以便发出警报、分析或存档。

从业务线应用程序、API 客户端、SDK 以及 Microsoft 应用程序(如 Outlook、Microsoft Teams 或Microsoft Entra 管理中心)发出的 API 请求的所有日志都可用。

此服务在以下 国家/地区云部署中可用。

全局服务 美国政府 L4 美国政府 L5 (DOD) 由世纪互联运营的中国

先决条件

若要访问 Microsoft Graph 活动日志,需要具有以下权限。

  • 租户中的Microsoft Entra ID P1 或 P2 租户许可证。
  • 具有以下Microsoft Entra管理员角色之一的管理员角色按从最低到最高特权角色的顺序列出。
    • 安全管理员 - 配置诊断设置
    • 全局管理员 - 配置诊断设置
  • 配置了具有以下日志目标之一的 Azure 订阅,以及访问相应日志目标中的数据的权限。
    • 用于将日志发送到 Azure Monitor 的 Azure Log Analytics 工作区
    • 具有列出密钥权限的 Azure 存储帐户
    • 与第三方解决方案集成的Azure 事件中心命名空间

Microsoft Graph 活动日志中提供了哪些数据?

以下与 API 请求相关的数据可用于 Logs Analytics 接口上的 Microsoft Graph 活动日志。

Column 类型 说明
AadTenantId string Azure AD 租户 ID。
ApiVersion string 事件的 API 版本。
AppId string 应用程序的标识符。
ATContent string 保留供以后使用。
_BilledSize 真正 记录大小(以字节为单位)
ClientAuthMethod int 指示如何对客户端进行身份验证。 对于公共客户端,值为 0。 如果使用客户端 ID 和客户端密码,则值为 1。 如果客户端证书用于身份验证,则值为 2。
ClientRequestId string 可选。 发送时的客户端请求标识符。 如果未发送任何客户端请求标识符,则该值将等于操作标识符。
DurationMs int 请求的持续时间(以毫秒为单位)。
IdentityProvider string 对令牌的使用者进行身份验证的标识提供者。
IPAddress string 发生请求的客户端的 IP 地址。
_IsBillable string 指定引入数据是否可计费。 当_IsBillable false 引入时,不会向 Azure 帐户计费
位置 string 为请求提供服务的区域的名称。
OperationId string 批处理的标识符。 对于非批处理请求,这将对每个请求是唯一的。 对于批处理请求,对于批处理中的所有请求,这都是相同的。
请求 ID string 表示请求的标识符。
RequestMethod string 事件的 HTTP 方法。
RequestUri string 请求的 URI。
ResponseSizeBytes int 响应的大小(以字节为单位)。
ResponseStatusCode int 事件的 HTTP 响应状态代码。
角色 string 令牌声明中的角色。
Scopes string 令牌声明中的范围。
ServicePrincipalId string 发出请求的 servicePrincipal 的标识符。
SignInActivityId string 表示登录活动的标识符。
SourceSystem string 事件收集依据的代理类型。 例如,OpsManager对于 Windows 代理,对于所有 Linux Linux 代理Azure,或者对于 Azure 诊断
TenantId string Log Analytics 工作区 ID
TimeGenerated datetime 收到请求的日期和时间。
TokenIssuedAt datetime 颁发令牌的时间戳。
类型 string 表的名称
UserAgent string 与请求相关的用户代理信息。
UserID string 发出请求的用户的标识符。
Wids string 表示分配给此用户的租户范围角色。

Microsoft Graph 活动日志的常见用例

  • 全面了解租户中已同意的应用程序和其他 API 客户端进行的事务。
  • 确定已泄露的用户帐户在租户中执行的活动。
  • 生成检测和行为分析,以识别 Microsoft Graph API 的可疑或异常使用。
  • 调查意外或可疑的应用程序权限分配。
  • 识别客户端应用程序(例如极端调用量)有问题或意外的行为。
  • 将用户或应用发出的 Microsoft Graph 请求与登录信息相关联。

配置 以接收 Microsoft Graph 活动日志

可以配置为通过Azure 门户中的诊断设置或通过 Azure 资源管理器 API 流式传输日志。 有关详细信息,请参阅以下文章中的指南:

以下文章将指导你配置存储目标:

成本计划估算

如果已有 Microsoft Entra ID P1 许可证,则需要 Azure 订阅来设置 Log Analytics 工作区、存储帐户或事件中心。 Azure 订阅免费,但必须付费才能使用 Azure 资源。

记录的数据量以及由此产生的成本可能会有很大差异,具体取决于租户大小以及与 Microsoft Graph API 交互的租户中的应用程序。 下表提供了一些日志数据大小的估计值,以帮助价格计算。 这些估计仅用于一般考虑。

租户中的用户 存储 GiB/月 事件中心消息/月 Azure Monitor 日志 GiB/月
1000 14 62K 15
100000 1000 4.8M 1200

有关各自的服务,请参阅以下定价计算:

Log Analytics 的成本降低

如果要将日志引入 Log Analytics 工作区,但只对按条件筛选的日志感兴趣(例如省略某些列或行),则可以通过在 Microsoft Graph 活动日志表上应用工作区转换来部分降低成本。 若要详细了解工作区转换、它如何影响引入成本以及如何将转换应用到 Microsoft Graph 活动日志,请参阅 Azure Monitor 中的数据收集转换

降低 Log Analytics 成本的另一种方法是切换到基本日志数据计划,该计划通过提供减少的功能来降低费用。 有关详细信息,请参阅 将表的日志数据计划设置为“基本”或“分析”。

Azure Monitor 日志查询示例

如果将 Microsoft Graph 活动日志发送到 Log Analytics 工作区,则可以使用 Kusto 查询语言 (KQL) 查询日志。 有关 Log Analytics 工作区中的查询的详细信息,请参阅使用 Log Analytics 分析Microsoft Entra活动日志。 可以使用这些查询进行数据浏览,以生成警报规则、生成 Azure 仪表板,或使用 Azure Monitor 日志 API 或查询 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 小时才能传递到目标。