What this page is
Nothing on this page is granted, requested or consented by reading it. It is what an owner reads before deciding whether a read may be pointed at a tenant. A permission appearing in a table is not a reason to ask for it, and holding one is not authorization to audit a service.
The two tables below are built from the Engine's own catalogue, one row for each collector, and the collector catalogue shows the same rows in full. The prose around them is taken from the Engine's permissions document for its Microsoft Entra reads.
Each read asks for its own scope, and no other
A Microsoft Graph read asks only for the scopes its collector declares. No wider set is asked for once and kept for convenience, so reading guests does not ask for what reading applications needs.
The scopes the catalogue records for the reads of Microsoft Graph:
m365g entra app listasks forApplication.Read.All.m365g entra ca listasks forPolicy.Read.All.m365g entra group listasks forGroupMember.Read.All.m365g entra guest listasks forUser.Read.All.m365g entra serviceprincipal listasks forApplication.Read.All.m365g entra tenant governance getasks forPolicy.Read.All,RoleManagement.Read.Directory,Policy.Read.AuthenticationMethod.
m365g teams team list is the groups read under a second command and asks for nothing further.
What the Engine's permissions document adds, for the reads it covers:
- Guests.
User.Read.All. A narrower scope is listed first for the same call, and whether it returns the property that tells a guest from a member is not established, so it is not used. - Applications.
Application.Read.All. - Groups, their owners and members.
GroupMember.Read.All, the least for owners. A narrower scope reads members alone and does not read owners. The vendor's reference lists a write scope as the least for listing groups, and the Engine does not ask for it. - Conditional Access policies.
Policy.Read.All. - Service principals.
Application.Read.All.
Consent is the person's, and can be for oneself alone
A scope nobody has consented to is asked for at the sign-in, and the directory shows its own consent prompt there. The Engine grants nothing and consents to nothing: no read has a step that accepts a prompt. Whether a given person may accept a given scope is the directory's rule, not the Engine's.
The directory's prompt lets an administrator consent for their own account without consenting on behalf of the organisation, and the Engine asks for nothing more than that: no read on these pages needs a grant made for everybody.
The Engine's document states how a decision is asked for: one collector, one scope, one tenant, named in the request, immediately before the consent.
What the SharePoint reads use
The SharePoint reads sign in through the application registered for the command line by m365g engine setup. Authentication and sessions describes that sign-in. For some of them the catalogue records a permission, and for others it records not-established: the read works with what that application holds, and the least it would work with has not been proved. The two tables below say which is which. not-established is not a way of saying none is needed.
What is not decided
Planned, not implemented
- Delegated grants, which say what an application was consented to on behalf of people. The only read scope the vendor's reference offers for them is
Directory.Read.All, which is broad, and no narrower one is documented. The Engine's document calls it the widest read in its table and the one to decide on deliberately. Nothing reads delegated grants today, which is why the application governance page says what an application asks for and never what it was granted. - Role assignments. The Engine's document records the least scope for listing them as not yet established.
Neither is a command. Nothing here can be run, and no permission in this section has been requested or granted.
Reads with a permission on record
16 of the 24 collectors record the permission their read asks for. From the Engine's own catalogue at commit 0c269e9d29d0.| Read | Permission recorded for it |
|---|---|
m365g spo agent listPublished, tenant-verifiedCollector agents, through PowerShell | Sites.Read.All |
m365g entra app listPublished, tenant-verifiedCollector applications, through Microsoft Graph | Application.Read.All |
m365g entra ca listPublished, tenant-verifiedCollector conditional-access, through Microsoft Graph | Policy.Read.All |
m365g entra group listPublished, tenant-verifiedCollector groups, through Microsoft Graph | GroupMember.Read.All |
m365g entra guest listPublished, tenant-verifiedCollector guests, through Microsoft Graph | User.Read.All |
m365g entra serviceprincipal listPublished, tenant-verifiedCollector service-principals, through Microsoft Graph | Application.Read.All |
m365g entra tenant governance getPublished, tenant-verifiedCollector tenant-governance, through Microsoft Graph | Policy.Read.All RoleManagement.Read.Directory Policy.Read.AuthenticationMethod |
m365g exo forwarding getPublished, tenant-verifiedCollector forwarding, through PowerShell | Exchange.ManageAsApp |
m365g entra license listPublished, tenant-verifiedCollector licensing, through PowerShell | Organization.Read.All User.Read.All Reports.Read.All ReportSettings.Read.All |
m365g spo brandcenter getPublished, tenant-verifiedCollector brand-center, through PowerShell | Sites.FullControl.All |
m365g spo classification getPublished, tenant-verifiedCollector classification, through PowerShell | Sites.Read.All |
m365g spo customization getPublished, tenant-verifiedCollector customization, through PowerShell | Sites.Read.All |
m365g spo modernity getPublished, tenant-verifiedCollector modernity, through PowerShell | Sites.Read.All |
m365g spo owner listPublished, tenant-verifiedCollector owners, through PowerShell | Sites.Read.All |
m365g spo permission listPublished, tenant-verifiedCollector permissions, through PowerShell | Sites.Read.All |
m365g spo spfx listPublished, tenant-verifiedCollector spfx, through PowerShell | Sites.Read.All |
Reads with no permission established
8 of the 24 collectors record not-established: no least-privilege set has been proved for the read. It does not mean the read needs none. From the Engine's own catalogue at commit 0c269e9d29d0.| Read | Permission recorded for it |
|---|---|
m365g spo activity getPublished, tenant-verifiedCollector activity, through PowerShell | not-established |
m365g spo hub listPublished, tenant-verifiedCollector hubs, through PowerShell | not-established |
m365g spo sharing getPublished, tenant-verifiedCollector sharing, through PowerShell | not-established |
m365g spo site listPublished, tenant-verifiedCollector sites, through PowerShell | not-established |
m365g spo site guestsPublished, tenant-verifiedCollector sites-guests, through PowerShell | not-established |
m365g spo site adminsPublished, tenant-verifiedCollector sites-owners, through PowerShell | not-established |
m365g spo sharing listPublished, tenant-verifiedCollector sites-sharing, through PowerShell | not-established |
m365g spo tenant sharing getPublished, tenant-verifiedCollector tenant-sharing, through PowerShell | not-established |