访问 Microsoft Graph 活动日志
Microsoft Graph 活动日志 是Microsoft Graph 服务为租户接收和处理的所有 HTTP 请求的审核线索。 租户管理员可以使用 Azure Monitor 中的诊断设置为这些日志启用集合并配置下游目标。 日志存储在 Log Analytics 中以供分析;可以将它们导出到 Azure 存储进行长期存储,或使用Azure 事件中心流式传输到外部 SIEM 工具,以便发出警报、分析或存档。
从业务线应用程序、API 客户端、SDK 以及 Outlook、Microsoft Teams 或 Microsoft Entra 管理中心 等Microsoft应用程序发出的 API 请求的所有日志都可用。
此服务在以下 国家/地区云部署中可用。
全局服务 | 美国政府 L4 | 美国政府 L5 (DOD) | 由世纪互联运营的中国 |
---|---|---|---|
✅ | ✅ | ✅ | ❌ |
先决条件
若要访问 Microsoft Graph 活动日志,需要具有以下权限。
- 租户中的Microsoft Entra ID P1 或 P2 租户许可证。
- 具有受支持的Microsoft Entra管理员角色的管理员。 安全管理员 是支持配置诊断设置的唯一最低特权管理员角色。
- 配置了具有以下日志目标之一的 Azure 订阅,以及访问相应日志目标中的数据的权限。
- 用于将日志发送到 Azure Monitor 的 Azure Log Analytics 工作区
- 具有列出密钥权限的 Azure 存储帐户
- 与第三方解决方案集成的Azure 事件中心命名空间
Microsoft Graph 活动日志中提供了哪些数据?
以下与 API 请求相关的数据可用于 Log 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 | 对令牌的使用者进行身份验证的标识提供者。 |
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 小时才能传递到目标。