Azure KQL查询需求:识别用户管理操作的执行用户
解决Azure活动日志用户管理操作的用户识别问题
要正确识别执行用户管理操作的主体,核心是利用Azure日志中的专属字段关联用户/服务主体信息,同时整合租户、订阅维度。以下分场景给出可直接复用的KQL查询及排查方案:
场景1:Azure AD用户CRUD操作(创建/更新/删除Azure AD用户)
Azure AD用户的管理操作审计日志存储在AuditLogs表,通过InitiatedBy字段可直接获取执行用户的邮箱、ID信息:
AuditLogs | where OperationName has_any ("Create user", "Update user", "Delete user") | extend UserEmail = InitiatedBy.user.userPrincipalName, UserId = InitiatedBy.user.id, TenantId = TenantId | project TimeGenerated, OperationName, UserEmail, UserId, TenantId, TargetResourceDisplayName, // 被操作的用户名称 Result // 操作结果(成功/失败) | sort by TimeGenerated desc
场景2:Azure资源级用户管理操作(如VM本地用户、RBAC权限用户)
这类操作记录在AzureActivity表,Caller字段是识别执行主体的关键:
AzureActivity | where OperationName has_any ("Create", "Update", "Delete") and (ResourceType has "users" or OperationName has_any ("Add user", "Remove user")) | extend UserEmail = Caller, TenantId = TenantId, SubscriptionId = SubscriptionId, ResourceGroupName = ResourceGroupName | project TimeGenerated, OperationName, UserEmail, TenantId, SubscriptionId, ResourceGroupName, ResourceId, ActivityStatus | sort by TimeGenerated desc
常见问题排查
- Caller显示应用ID而非邮箱:说明操作由服务主体执行,可关联
AADServicePrincipals表获取服务主体名称:
AzureActivity | where OperationName has_any ("Create", "Update", "Delete") and ResourceType has "users" | extend CallerId = split(Caller, "@")[0] | join kind=leftouter ( AADServicePrincipals | project ServicePrincipalId = AppId, ServicePrincipalName = DisplayName ) on $left.CallerId == $right.ServicePrincipalId | project TimeGenerated, OperationName, Executor = iif(Caller contains "@", Caller, ServicePrincipalName), TenantId, SubscriptionId, ResourceGroupName | sort by TimeGenerated desc
- 无用户信息返回:确认已启用Azure AD审计日志和Azure活动日志的采集,且日志已同步到目标Log Analytics工作区;同时检查执行查询的账号拥有Log Analytics工作区读取权限及Azure AD审计日志读取权限。
内容的提问来源于stack exchange,提问作者abeylisco
相关产品推荐
相关产品推荐

