Non-human identities (NHI)

Monitor non-human identities in Microsoft Entra for risky credentials, permissions, and ownership gaps

NHI monitoring shows which of your non-human identities carry risk, so you can fix a leaked-secret or over-permission path before someone uses it.

A non-human identity (NHI) is any identity that software signs in with instead of a person: application registrations, service principals, agent identities and their blueprints, and agent users. NHIs often hold long-lived secrets and broad permissions, and nobody reviews them the way they review human accounts.

How NHI monitoring works

  1. You connect a directory, such as a Microsoft Entra tenant, as an NHI source.
  2. SecureAuth reads the directory's non-human identities, their credentials, owners, and permission grants. It only reads the directory and never changes it.
  3. After each read, SecureAuth runs a set of rules against what it found. Each match is a finding: one identity that breaks one rule.
  4. SecureAuth reads the directory again every hour by default, so findings follow the directory as it changes.

NHI monitoring spans two screens. Connect and manage directories under Setup > Discovery Sources, on the NHI Sources tab. Review what SecureAuth found under Activity > Anomalies and Findings, on the Findings tab.

The Findings tab on Anomalies and Findings, showing a table of findings sorted by severity
The Findings tab lists each finding, most severe first

The NHI feature is turned on per organization. Without it, neither NHI tab appears and SecureAuth doesn't read connected directories. Contact SecureAuth to turn it on.

To see either NHI tab, you need the view_nhi permission. To connect or edit a source, you need the manage_nhi permission.

Connect a directory

On the NHI Sources tab, select Add NHI source and pick a provider.

Microsoft Entra is the only provider today.

For Microsoft Entra, first register an application in your tenant. Then supply:

  • Directory (tenant) ID and Application (client) ID, both copied from the app registration.
  • Client secret, created under Certificates & secrets. Entra shows this value only once.

Grant the application these Microsoft Graph application permissions, with admin consent:

PermissionSecureAuth reads
Application.Read.AllApplications, service principals, owners and app roles
AgentIdentityBlueprint.Read.AllAgent identity blueprints
AgentIdentity.Read.AllAgent identities
User.Read.AllUsers and agent users
Directory.Read.AllDelegated permission grants

SecureAuth doesn't check these permissions when you connect. If it can't read one type of object, such as permission grants, the sync stops there. The source then shows Error and the Findings tab stays empty.

SecureAuth added Directory.Read.All to the required permissions after the first release. If you connected a directory before then, add the permission to the app registration and grant admin consent again. Until you do, each sync of that directory stops and the source shows Error.

After you connect, a source shows as Authenticated or Error. To re-validate a source's credentials, select Check now from its menu.

What the rules detect

Each rule has a fixed severity. Within each group below, rules run from most to least severe.

Credentials

A secret that never expires, or that outlives the identity using it, gives an attacker who finds it lasting access.

RuleSeverityWhat it flags
Secret never expiresCriticalA secret or certificate with no expiration, or one set to expire more than five years out
Live secret on disabled principalCriticalAn application or blueprint whose principal is disabled, but that still holds a credential that hasn't expired
Secret past its maximum ageHighA credential Entra still accepts that started more than two years ago
Credential sprawlHighOne identity carrying 10 or more secrets and certificates between them
Legacy principal holding credentialsHighA legacy service principal that can still authenticate, with no registration governing it
Expired credentials still presentMediumA credential that has already expired and was never removed

Permissions

These identities can read or change sensitive data with no person signed in to approve each action.

RuleSeverityWhat it flags
App-only directory authorityCriticalA principal holding a Graph app role that rewrites the directory
Tenant-wide admin consentHighAn application an admin consented to on behalf of everyone in the tenant
Broad sensitive scopesHighA delegated grant that reads mail, files or calendars and holds a refresh token

Exposure outside your tenant

These identities trust someone outside your organization: their users, their tokens, or their code.

RuleSeverityWhat it flags
Open beyond tenantHighAn application or blueprint that accepts sign-ins from outside your own tenant
External IdP trustHighAn application that accepts tokens from an external issuer, such as a CI provider
Unverified publisherMediumAn application from another tenant whose publisher Microsoft never verified

Ownership and lifecycle

An identity nobody owns or uses still works. Nobody rotates its credentials or notices when it misbehaves.

RuleSeverityWhat it flags
Disabled by MicrosoftCriticalAn application Microsoft disabled, usually for abuse
Owner's account is disabledCriticalAn identity whose only owners can no longer sign in, so nobody can rotate its credentials
Disabled principal still presentMediumA service principal that is disabled but still in the directory
No ownerMediumAn identity nobody owns, so nobody is accountable for it
Agent identity sprawlMediumAn application that created 10 or more agent identities within 180 days
Blueprint without agent identitiesMediumA blueprint older than 7 days that no agent identity references
Duplicate registrationLowTwo identities of the same kind sharing a display name
Application with no service principalLowAn application registration nothing in the tenant can sign in as

Triage findings

The Findings tab lists what the last complete sync found, one row per identity per rule. Each row shows the severity, the rule, the identity's name and kind, and when SecureAuth last saw the finding.

A finding has one of four statuses:

StatusMeaning
OpenThe default status. Nobody has triaged this finding yet.
AcknowledgedSomeone has seen the finding and is tracking it.
DismissedSomeone reviewed the finding and decided it needs no action.
ResolvedSecureAuth set this. A sync no longer sees the problem in the directory.

Select a row to open its details, where Acknowledge, Dismiss, and Reopen change the status. Reopen moves an acknowledged or dismissed finding back to open. Triage requires the manage_nhi permission; without it, the actions don't appear. Every status change is recorded in the audit log as nhi_finding.status_changed.

You can't set a finding to resolved yourself. A finding resolves when a later sync no longer asserts it, for example after you rotate a flagged secret or remove an unused blueprint. A resolved finding stays visible and filterable for 120 days, then SecureAuth removes it. If the same problem reappears in a later sync, SecureAuth opens a new finding rather than reusing the old one.

Filter the table by status, severity, rule, or source (when you have more than one connected directory), and sort by severity or by how recently a finding was last seen.

Select a finding to see:

  • Why flagged: what the rule checks and why this identity matched it.
  • Evidence: the specific credentials, permissions, or directory attributes the rule found, such as a credential's expiration or an owner's account status.
  • Identity: the identity's kind, its external ID in the directory, and which source it came from.
  • History: when SecureAuth first and most recently saw the finding, and when its status last changed.

Next steps

  • Anomalies: detect unusual agent activity, scored against each user's own history.

On this page