如何用Azure Logic Apps从Entra ID提取日志并同步至Sentinel事件评论?
解决方案:Azure Logic Apps 提取Entra ID日志并同步到Sentinel事件评论
一、核心流程框架
整体逻辑链:
- 触发:Sentinel事件响应触发Logic App
- 提取:从事件中获取目标用户实体的标识(UPN/Object ID)
- 查询:拉取该用户过去24小时的Entra ID登录+审计日志
- 输出:将日志内容或链接写入Sentinel事件评论
二、方案1:提取日志内容到评论(完整版)
1. 触发与实体提取
- 使用Sentinel连接器的
When a response to an Azure Sentinel alert is triggered作为触发动作 - 添加
Initialize variable动作,存储用户UPN/Object ID:- 遍历事件实体,筛选类型为
Account的条目,用表达式提取标识:
(注:Filter_array动作用于从first(body('Filter_array'))?['Name'] // 提取首个用户UPNtriggerBody()?['Entities']中筛选Type等于Account的实体)
- 遍历事件实体,筛选类型为
2. 查询Entra ID日志
- 添加Azure AD连接器的
List sign-ins动作:- 筛选条件:
createdDateTime ge '@{addHours(utcNow(), -24)}' and userPrincipalName eq '@{variables('UserUPN')}'
- 筛选条件:
- 添加Azure AD连接器的
List directory audit logs动作:- 筛选条件:
activityDateTime ge '@{addHours(utcNow(), -24)}' and targetResources/any(t: t/id eq '@{variables('UserObjectID')}')
- 筛选条件:
3. 格式化日志内容
- 添加
Compose动作,将两类日志整理为可读格式,示例表达式:concat('### 过去24小时登录日志(', length(body('List_sign-ins')), '条)\n', join(body('List_sign-ins'), '\n---\n'), '\n\n### 过去24小时审计日志(', length(body('List_directory_audit_logs')), '条)\n', join(body('List_directory_audit_logs'), '\n---\n'))
4. 写入Sentinel评论
- 使用Sentinel连接器的
Add comment to incident动作,将Compose的输出作为评论正文
三、方案2:生成日志直接链接(简化版)
如果日志量过大或格式复杂,可直接生成Entra ID控制台的日志链接:
1. 提取用户Object ID
- 从Account实体中提取
ObjectID字段,存储为变量
2. 构造日志链接
- 添加
Compose动作,拼接Markdown格式的链接:concat('[用户登录日志(过去24小时)](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/AuthenticationEventsMenuBlade/~/SignIns/userId/', variables('UserObjectID'), '&timeRange=24h)\n\n[用户审计日志(过去24小时)](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/AuditLogsMenuBlade/~/AllAudits/userId/', variables('UserObjectID'), '&timeRange=24h)')
3. 写入评论
- 同样用
Add comment to incident动作,将Compose的链接内容发布到评论
四、关键注意事项
- 权限配置:确保Logic Apps托管标识拥有:
- Sentinel的
Microsoft.SecurityInsights/incidents/comments/write权限 - Entra ID的
AuditLog.Read.All和Directory.Read.All权限
- Sentinel的
- 实体处理:若事件包含多个用户实体,需添加分支逻辑(如
For each循环)处理所有用户 - 分页处理:若日志条目超过连接器默认返回上限,需添加
Until循环遍历分页结果 - 时间准确性:始终用
addHours(utcNow(), -24)动态计算时间范围,避免硬编码
内容的提问来源于stack exchange,提问作者Derrick C
相关产品推荐
相关产品推荐

