The Security Group Was Empty — But the User Still Had Access
The administrator checked the security group.
The user was not there.
No membership.
No obvious entitlement.
No reason they should still be able to open the resource.
Except they could.
The group membership was correct. The assumption about the permission path was not.
Agent Foskett stopped asking whether the user belonged to one group and started asking a different question:
What path was actually granting the access?

Membership Is Not Effective Access
A security-group membership check answers one question. It does not enumerate every possible path through which a user may have received permission.
The obvious check said the user had no access
The expected security group was checked. The user was not a member.
Someone concluded the access must already be gone.
A validation test proved otherwise.
The user could still reach the resource.
That changed the investigation. Agent Foskett was no longer checking a group. He was investigating effective access.
One empty group proves surprisingly little
The first task was therefore to separate two questions:
Is the user in this group?
and
Why can the user access this resource?
They are not the same question.
Start with the resource, not the assumption
Instead of beginning with the group administrators expected to be authoritative, he worked backwards from the resource and enumerated the identities and groups that could actually reach it.
Effective access is determined at the destination.
Check direct and group-based access
A user who is absent from one group may still receive equivalent access through another principal.
Nested membership can hide the path
That creates a common investigative trap: checking only direct membership and concluding the user is not entitled.
Agent Foskett mapped the relationship instead:
User → Group B → Group A → Resource
The user did not need to appear as a direct member of the group shown on the resource for a nested relationship to matter in a supported scenario.
Audit the identity changes
In Microsoft Sentinel environments where Entra audit logs are available in
AuditLogs, KQL can help reconstruct group-membership changes.- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
AuditLogs
| where TimeGenerated > ago(30d)
| where Category =~ "GroupManagement"
| where OperationName has_any (
"Add member to group",
"Remove member from group")
| project TimeGenerated,
OperationName,
Result,
InitiatedBy,
TargetResources,
CorrelationId
| order by TimeGenerated descFind changes involving the user
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
let User = "alex@contoso.com";
AuditLogs
| where TimeGenerated > ago(90d)
| where Category =~ "GroupManagement"
| where tostring(TargetResources) has User
| project TimeGenerated,
OperationName,
Result,
InitiatedBy,
TargetResources,
CorrelationId
| order by TimeGenerated ascThe audit event answered who — not automatically why
Agent Foskett compared the actor, timestamp and target with approved requests, administrative activity and the user's role.
A legitimate help-desk change can create unexpected access just as easily as malicious activity can.
Unexpected does not mean hostile. It means unexplained.
What if the permission came from SharePoint?
Where Microsoft 365 audit data is ingested into Sentinel, relevant workload audit events can be investigated in
OfficeActivity. The exact operations available depend on the workload, auditing configuration and event being investigated.- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
OfficeActivity
| where TimeGenerated > ago(30d)
| where OfficeWorkload =~ "SharePoint"
| where Operation has_any (
"Permission",
"Sharing",
"Member")
| project TimeGenerated,
UserId,
Operation,
Site_Url,
OfficeObjectId,
Parameters
| order by TimeGenerated descBuild the permission timeline
Agent Foskett combined both into one timeline.
What Agent Foskett checked
What the evidence can and cannot prove
Likewise, a group-membership audit event does not by itself prove that the membership granted access to the resource under investigation.
Permission models vary across Microsoft Entra ID, SharePoint, Teams, applications and Azure resources. Nested-group behaviour and support also depend on the service and scenario.
The resource's effective permissions and the relevant audit evidence have to be correlated.
The lesson
That was never the real question.
The real question was why the user could still reach the resource.
Agent Foskett worked backwards from effective access, identified the alternate permission path and used audit evidence to reconstruct how it got there.
Access is not defined by the group you expected to control it. Access is defined by every permission path that actually reaches the resource.
Related investigations
Final thought
Start with what the user can actually reach. Enumerate every plausible entitlement path. Then use the audit history to explain how that access came to exist.
Follow the evidence. Build the timeline.
The Logs Already Knew! 🔎

