我想以编程方式检索和处理 Office 365 统一审核日志中的所有可用日志,以进行取证调查。在前端,这些日志可通过 Office 365 合规性管理中心获取。
我尝试了以下选项来从脚本访问这些日志,但没有成功:
Microsoft 365 管理 API - 其中包含正确的数据,但由于 7 天的保留期较短,因此对于取证调查的用处有限。
Microsoft Graph - 这不包含所有相关数据 - 您无法直接通过 Graph 访问统一审核日志,并且使用情况报告不涵盖审核日志中包含的所有项目(例如交换操作)。
Exchange Online PowerShell 上的 Search-UnifiedAuditLog - Microsoft 本身 recommend not to use this programmatically ,并且在尝试这样做时,我经历了极其不可靠的结果和难以管理的速率限制。
那么我在这里遗漏了什么,或者没有办法以编程方式从统一审核日志中检索整个保留期内的所有项目? (一般为 90 天)。
最佳答案
据我所知,执行此操作的唯一方法是定期使用管理 API,并将结果输出到某个解决方案以进行长期存储(想到的是 Azure Log Analytics Workspace,或像 Splunk/Graylog 这样的 SIEM) )。 IE。编写一个脚本来检索上周的日志,并至少每周运行一次。
我将解释如何手动检索日志,并在帖子底部展示一个已经存在的工具。
手动:
1:Enable Audit logging on the tenant if not already enabled
2:在 Azure AD 中创建应用注册,并选择“仅此组织目录中的帐户(仅限 xyz - 单个租户)”来获取单租户审核日志
3:在新创建的应用程序注册中创建“ key ”。将其存放在安全的地方,因为它只显示一次。在应用程序注册的概述页面中,还存储“租户 ID”和“应用程序(客户端)ID”。您将需要这三个。
4:从新的应用程序注册中转到“API 权限”并添加以下内容的“应用程序类型”权限:“ActivityFeed.Read”和“ActivityFeed.ReadDlp”。
5:对于以下步骤,您将需要开始调用 Office API,为此您需要在 header 中包含不记名 token 。要获取此信息,请发送以下 POST 请求:
- 网址:https://login.microsoftonline.com/***tenant_ID***/oauth2/token
- header :“{'Content-Type': 'application/x-www-form-urlencoded'}”
- 数据:“grant_type=client_credentials&client_id=Application_ID&client_secret=Secret_Key&resource=https://manage。 Office.com”
您将收到包含“access_token”的 JSON 响应。对于所有即将进行的 API 调用,请使用以下 header :
“{'Content-Type':'application/x-www-form-urlencoded','授权':'持有者access_token'}”
6:订阅您想要检索的审核日志源。存在以下内容:“Audit.General”、“Audit.AzureActiveDirectory”、“Audit.Exchange”、“Audit.SharePoint”、“DLP.All”。例如,Exchange 的 POST 如下所示:“https://manage.office.com/api/v1.0/tenant_ID/activity/feed/subscriptions/start ?contentType=Audit.Exchange"
7:您现在已准备好开始检索实际日志。各个日志存在于内容 blob 内,内容 blob 存在于页面内,内容存在于 feed 内(例如 Audit.Exchange feed)。因此,对于您想要从中检索日志的每个源,您必须收集所有内容 Blob(遍历它们的页面),然后从该 Blob 中检索实际内容。
要检索内容 Blob 页面,请使用以下 URL(根据您的情况更改粗体内容):“https://manage.office.com/api/v1.0/tenant_ID/activity/feed/subscriptions/content?contentType=Audit.Exhange&startTime=2022-04-13T09:42:52 &endTime=2022-04-14T08:42:52"
这将为您提供一个包含内容 blob 的 JSON 响应。在响应头中检查“NextPageUri”;如果它包含 URL,则为下一页内容调用该 URL。
现在您已经有了内容 blob,可以使用它们来检索实际日志。每个内容 blob 都是一个 JSON 字典,其中包含一个“contentUri”字段。调用该 URL 以检索包含实际日志的 JSON 响应。
您可以在大多数编程/脚本语言中执行此操作,但对于大量日志,您将需要并行检索日志,否则将需要很长时间。
使用工具
如果您想使用现有工具,this one免费,可在 Linux 和 Windows 上运行,并支持多种输出。
关于microsoft-graph-api - 以编程方式检索所有 Office 365 统一审核日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68904432/