Capability library / Application package

Microsoft Entra package v1.0.0

Microsoft Entra directory via Microsoft Graph v1.0: read users, groups, group memberships, activated directory roles and app registrations. Read-only identity pack; every write is excluded pending a dedicated review.

Review state: Reviewed · Distributable: yes, digest matches the release manifest

This page describes AAES Govern’s controls. AAES Operate has private-work permissions, operational reviews and recorded-spend limits; it does not include Govern. About AAES Govern

Before you enable this package

Keep graph.microsoft.com and bind GROUP_ID for group membership reads.

Read each action's effects and exclusions below. Before installation, also read the complete package requirements, including credential issuance, scope, expiry, and provider permissions. These are deployment prerequisites, not capabilities this package supplies.

Capabilities (5)

Each capability below is one registered operation. The complete package JSON includes its exact network destination allowlist. The repository stores it at packs/entra.json and embeds a copy in the release binary.

Risk tiers. R0 is the minimum for reads. R2 is the minimum for write, create, update, execute, and invoke. R3 is the minimum for delete, send, pay, deploy, approve, share, and transfer. Operators can raise these levels. A minimum tier does not measure the operation's business or confidentiality risk.

Field guide. Endpoint is the service address and request method. Connector is the adapter that makes the call. Custody describes how the credential is held; the credential reference identifies the value to resolve. Data class sets handling requirements: pii means personal data, financial means financial records, and internal means internal organizational data.

entra.users.read v1.0.0R0

Kind
tool
Action
read
Endpoint
GET https://graph.microsoft.com/v1.0/users
Connector
http
Custody
customer_vault
Credential ref
secret-ref-entra-graph-read-token
Data class
pii

Read users.

List the tenant's users: display names, userPrincipalNames, mail addresses, phone numbers and job titles are personal data, so the read is classified as pii (personal data).

The registered path covers the collection read only — single-user reads (GET /users/{id}) are not registered by this pack. Microsoft documents replication delay on recently changed users, so the collection can lag the directory.

entra.groups.read v1.0.0R0

Kind
tool
Action
read
Endpoint
GET https://graph.microsoft.com/v1.0/groups
Connector
http
Custody
customer_vault
Credential ref
secret-ref-entra-graph-read-token
Data class
internal

Read groups.

List the tenant's groups (excluding dynamic distribution groups, which Microsoft documents as not returned by this API): names, descriptions and mail nicknames, which reveal org structure.

The registered path covers the collection read only — single-group reads (GET /groups/{id}) are not registered by this pack.

entra.groups.members.read v1.0.0R0

Kind
tool
Action
read
Endpoint
GET https://graph.microsoft.com/v1.0/groups/GROUP_ID/members
Connector
http
Custody
customer_vault
Credential ref
secret-ref-entra-graph-read-token
Data class
pii

Read group members.

List the direct members of one group; member identities (users, contacts, devices and groups) are personal data when the members are people. The operation is not transitive, and Microsoft documents a known issue in v1.0 where service principals are not listed as members, so this read does not establish the absence of service-principal membership.

GROUP_ID is a placeholder the deployment binds to a concrete group before enabling.

entra.directoryroles.read v1.0.0R0

Kind
tool
Action
read
Endpoint
GET https://graph.microsoft.com/v1.0/directoryRoles
Connector
http
Custody
customer_vault
Credential ref
secret-ref-entra-graph-read-token
Data class
internal

Read directory roles.

List the directory roles activated in the tenant (names and descriptions, which reveal the admin model). Microsoft documents that this collection contains only activated roles and recommends the unified RBAC API (roleDefinitions) for fuller coverage; roleTemplates, roleDefinitions and role assignments are not registered by this pack.

The registered path covers the collection read only.

entra.applications.read v1.0.0R0

Kind
tool
Action
read
Endpoint
GET https://graph.microsoft.com/v1.0/applications
Connector
http
Custody
customer_vault
Credential ref
secret-ref-entra-graph-read-token
Data class
internal

Read applications.

List the tenant's app registrations: app ids, display names, identifier URIs, publisher domains and sign-in audiences, which reveal the tenant's integration estate.

The registered path covers the collection read only — single-application reads (GET /applications/{id}) and the servicePrincipals collection are not registered by this pack. Microsoft documents that keyCredential public keys are not returned by default on list operations.

Credential reference

The credential field names a reference rather than containing credential material. Packs are designed not to contain secrets; the format checks cover only known credential formats and cannot prove that arbitrary text contains no secrets. Installing a package registers its capabilities. Configure the provider credentials, endpoints, and network access, then test the integration in your environment before enabling it.

Reference
secret-ref-entra-graph-read-token
Custody
customer_vault
Injection
header (Authorization)

Configure the value and injection format specified in the package. Assign responsibility for credential rotation and revocation, restrict provider permissions, and keep credential material out of logs and responses.

Complete credential requirements

The value stored under this reference is the complete Authorization header value (scheme included): the scheme 'Bearer', one separating space, then an OAuth2 access token for Microsoft Graph — 'Bearer <token>'. For the client-credentials flow the token is minted by an external token process from the client's own app registration against login.microsoftonline.com — POST /{tenant}/oauth2/v2.0/token with scope https://graph.microsoft.com/.default — and placed in the client's own secret manager by that external process; this grant issues no refresh token, so there is no refresh path to review, and renewal ownership sits with the external process, which obtains a replacement access token before the current one expires (access tokens last about an hour) and stores the new complete header value. A delegated user-consent token is equally valid for these reads and acts as the signed-in user; the deployment chooses the flow, and the executor injects the stored value verbatim and performs no token lifecycle itself.

The stored value is never the client secret or certificate assertion material — those stay with the external token process, and a certificate credential is preferable to a client secret for the app registration. Distinguish the three revocation effects: rolling or removing the app registration's credentials shuts down future token issuance; removing the app's granted permissions or revoking the user's grant removes authorization for new tokens; neither invalidates an already-issued access token — Microsoft documents access tokens as valid until their own expiry (a default lifetime varying between 60 and 90 minutes, 75 on average), so plan any emergency revocation around that remaining-validity window.

An expired value fails closed.

Least privilege: with application permissions, consent only the read set named in the pack notes (User.Read.All, GroupMember.Read.All for groups, GroupMember.ReadBasic.All for group members, RoleManagement.Read.Directory, Application.Read.All) and no write or Directory.ReadWrite.* scope. customer_vault is the only generally-supported production custody model here — identity_federation and customer_broker are refused at startup and inline is lab-only.

Executor hygiene: the value must live only in executor memory for the lifetime of a call, must never be written to logs, traces or diagnostics, and must not appear in crash dumps; a deployment that cannot meet that bar must not enable the pack.

Resources

  • entra-directory-users (api, pii): https://graph.microsoft.com/v1.0/users
  • entra-directory-groups (api, internal): https://graph.microsoft.com/v1.0/groups
  • entra-directory-roles (api, internal): https://graph.microsoft.com/v1.0/directoryRoles
  • entra-app-registrations (api, internal): https://graph.microsoft.com/v1.0/applications

Technical package and review record

Complete provider requirements and exclusions

GROUP_ID in the group-members endpoint path is a placeholder: the deployment must substitute the concrete group each capability is bound to before enabling the pack, and the pack must not be enabled with the literal in place — the review does not rely on Microsoft Graph rejecting a literal placeholder identifier as the control, and allowlisting graph.microsoft.com does not make an unsubstituted pack safe. The egress allowlist stays graph.microsoft.com, a real shared API host, not a placeholder.

This pack is deliberately distinct from the Microsoft 365 package, which owns mail, calendar and Teams: this pack registers only Entra directory reads, and no capability id or resource id overlaps. This pack registers only endpoints the official Microsoft Graph v1.0 documentation publishes: list users, list groups, list a group's direct members, list activated directory roles, and list applications (app registrations).

Two documented behaviours a reviewer must know: directoryRoles returns only roles activated in the tenant — a role that has never been activated is absent from the collection, so absence from the read is not evidence of absence of the role template (directoryRoleTemplates is not registered); and the v1.0 list-members API has a Microsoft-documented known issue in which service principals are not listed as group members, so the membership read is not a complete statement of service-principal membership.

All five capabilities are reads at the minimum R0 tier; users and group memberships register at the pii class because display names, mail addresses, phone numbers and member identities are personal data.

Documented exclusions, pending a dedicated identity-write review because membership- and privilege-changing writes are broad-impact: this pack does not register user creation (POST /users), user update or deletion (PATCH/DELETE /users/{id}), account enable/disable or password operations, group creation, update or deletion, group membership changes (POST/DELETE /groups/{id}/members/$ref and owners), directory role activation or role assignment, administrative-unit membership changes, and application or servicePrincipal creation, update, deletion, credential or permission-grant operations, and no write capability ships in this pack at all.

Use an app registration whose Microsoft Graph permissions cover only what these reads need; the pack does not create one. Least-privileged application permissions per the dated permission tables in the referenced operation documentation: User.Read.All for list users, GroupMember.Read.All for list groups, GroupMember.ReadBasic.All (basic member information only) for list group members — the least-privileged permission the dated members permission table names — RoleManagement.Read.Directory for directory roles, and Application.Read.All for app registrations.

The broader Group.Read.All is not least-privileged for either group operation and is not recommended here. One documentation anomaly flagged for re-review: the dated list-groups page's permission table currently shows the newer, write-scoped Group-NestingSupport.ReadWrite.All entry in its least-privileged cell, with GroupMember.Read.All among the read permissions the table names for the operation; this pack consents the read-scoped permission. Application permissions are tenant-wide daemon-grade power consented by an admin, while delegated permissions act as one signed-in user within that user's own access — the choice is the deployment's.

Documentation review is complete, with dated operation, permission, and token-lifecycle sources listed in the review record on this page. Library review does not establish tenant connectivity or executor operation; those remain deployment checks.

Download the complete package JSON for exact network allowlists, credential requirements, exclusions, and setup notes. Read these requirements before installation.

The full documentation review record is supplied in the evaluation package. The evaluation package runs in your environment and comes only with the paid design partnership. This page reproduces the source links and review block; the full record is available for evaluation. Discuss a design partnership to inspect it before installation.

Review block

This section reproduces the review block recorded in the pack file. The evidence and approval record is separate: for a reviewed pack, it is in the evaluation materials and in the release binary's embedded assets.

Review completed: 2026-09-22

8 sources, retrieved 2026-09-21

Current documentation links are navigation aids. They do not change the package, its historical sources or its review date. Review dates describe a documentation review, not a live integration test. No package is provider-endorsed or yet tested against a live provider tenant.

Release identity

SHA-256 of the pack file bytes: c33ff5cce0b0565d9bae8919ecfa0b23de9e3f2915fbc89fb25f2537f7115813

Distributable: yes, digest matches the release manifest. Editing a package changes its release identity. A deployment plan checks its own file digests; it does not restore reviewed status or authenticate approval.