Skip to main content
DoneThat

AI Adoption GuideITProvision

Agentic access provisioning

AI agent fulfills access requests end to end, validating entitlement policy, calling identity APIs, and confirming delivery without human routing.

IT processPlanSelectDeployProvisionSupportUpgradeReplaceRetire

By Don, DoneThat’s AI coach · updated

When the agent can grant access without a human router

An agentic access workflow is worth deploying when a ticket already states who needs what, your entitlement policy maps that need to a standard grant, and your identity stack exposes APIs to assign the entitlement and read back confirmation. The agent's job is not to reinterpret the request or negotiate exceptions. It loads the request, finds the matching policy row, executes the grant through Okta, Microsoft Entra, SailPoint, or the provisioning connector your IAM team trusts, and closes the loop with evidence that the entitlement landed.

Speed is the outcome, but only for the boring middle: validate, provision, confirm. Anything that requires judgment, elevated privilege, or a sign-off that policy does not define stays with IAM. That boundary is what keeps the agent useful instead of dangerous.

A practical pattern looks like this. A hiring manager submits a ServiceNow request: "Grant CRM read access to Jordan Lee, starting Monday, per sales associate role." Policy row SA-014 says sales associates receive CRM-Read in the production tenant. The agent pulls the ticket, resolves Jordan's worker record, matches role and application to SA-014, calls the identity API to assign CRM-Read, polls or reads back group membership, and updates the ticket with the policy cite, API response identifiers, and a timestamp. No one re-types the same grant into three consoles.

Load the request and the entitlement policy first

Every run starts with two inputs frozen before any API call: the provisioning request and the entitlement policy snapshot your IAM team publishes. Treat the request as the scope of work. Treat policy as the only authorized source of what may be granted automatically.

Parse the request for subject (person or account), application or entitlement target, requested access level, effective date, and business justification fields your intake form captures. If the subject cannot be resolved to a single identity record, stop and route to IAM. Ambiguous "give Alex access" tickets are not agent work.

Load policy next. Policy rows should be addressable: a stable ID, human-readable name, role or attribute conditions, entitlement expression (group, role, app assignment, birthright bundle membership), environment scope, and any explicit exclusions. The agent matches request fields to policy keys in order: role or job code, department, location, worker type, application, access tier. First exact match wins only if your governance model says so; otherwise document the precedence rule in runbooks so engineers do not guess.

Connectors matter, but the decision logic stays vendor-agnostic. Okta and Microsoft Entra expose app and group assignment APIs. SailPoint often sits in the middle as the system of record for entitlement definitions and fulfillment tasks. ServiceNow remains the ticket system of record. The agent reads and writes across those layers without replacing any of them.

If intent is unclear before policy lookup, a provisioning request intent classifier upstream can normalize vague tickets into structured fields the agent expects. That step reduces false starts where the agent would otherwise guess application or access level from free text.

Grant with policy and ticket citations

When policy yields a definite entitlement, the agent performs the grant and attaches citations to every artifact it touches. A citation is not prose; it is a pointer: policy row ID, ticket number, identity record ID, entitlement ID, and the API transaction or task ID returned by the provisioning platform.

Write ticket notes in audit-friendly language: "Granted CRM-Read per policy SA-014 per REQ0012345. Entra group assign confirmed at 2026-03-04T09:12:00Z. Task ID: sp-88291." Future reviewers should reconstruct the decision without opening chat logs.

Never grant without a policy cite. A grant that only says "user asked for CRM" fails audit and teaches the wrong habit. If the agent cannot quote the row that authorized the action, it must not call the identity API. That failure mode looks like success to the requester and like an incident to IAM later.

Confirm delivery, do not assume it. After assignment, read back membership or task completion state from the same system that performed the change. Partial fulfillment (group added in test but not production, task accepted but not completed) should reopen the ticket or escalate, not mark resolved.

Standard grants are not privileged grants. Policy may authorize CRM-Read for a sales role; it does not authorize domain admin, break-glass accounts, or production database write unless a separate row says so with controls your org defines. The agent must not treat "grant succeeded" as permission to expand scope. Privileged access stays out of autonomous paths by design.

What to leave blank when policy is silent

Empty fields stay empty. If policy has no row for the requested combination, the agent returns a structured outcome: no automatic grant, reason code POLICY_SILENT, and the request fields that failed to match. Do not invent a default group, do not copy a neighbor role's entitlements, and do not infer access from job title synonyms the policy table does not recognize.

Silence is different from denial. Denial may be explicit in policy ("contractors excluded from FIN-Reporting"). Silence means IAM must decide, possibly after gathering approvers or updating policy. The ticket should land in an IAM queue with the agent's match attempt attached, not sit in a false "completed" state.

Also leave approval fields blank when policy does not define an approver chain for that entitlement. Do not invent an approval. Fabricating "Manager approved" because a manager name appears elsewhere on the ticket is a common failure mode that creates compliance exposure. If workflow requires approval and policy does not encode it for automatic fulfillment, the agent stops and hands off.

Birthright bundles from onboarding package auto-builder workflows complicate silence: if onboarding generated a package ID that policy references, the agent may fulfill from that package cite. If onboarding suggested a bundle but policy never ratified it, treat the suggestion as non-authoritative and leave those entitlements unassigned.

Failure modes that break trust and audit

Three mistakes recur in early deployments and are worth blocking in code review.

Grant without policy cite. Already noted, but teams still slip when engineers add a "helpful" fallback: if no row matches, assign a baseline group. Remove fallbacks. Baseline access belongs in explicit policy rows, not agent heuristics.

Treating a standard grant as privileged. Example: assigning a widely used SaaS reader role is standard when policy says so; assigning vault administrator is not, even if the ticket uses urgent language. Tag privileged entitlements in policy with a flag the agent checks before any API call. Autonomous paths should hard-stop on that flag.

Inventing an approval. Workflow engines in ServiceNow and IAM tools can require signatures. The agent must not stamp approvals it did not observe from an integrated approval record. If your platform exposes approval status via API, read it. If not, route.

Secondary failures include stale policy (agent cites a retired row), wrong environment (test group in prod ticket), and race conditions (user terminated while grant in flight). Mitigate with policy version IDs in cites, environment tags on every API target, and a pre-flight identity status check. After provisioning, entitlement anomaly detection can compare new assignments against peer cohorts and flag outliers for IAM review without slowing standard grants.

When grants fail at the API layer, prefer explicit error states over silent retries that double-assign. Idempotency keys tied to ticket ID plus policy row prevent duplicate groups on ticket reopen.

Where IAM still owns the decision

IAM owns exceptions, policy gaps, privileged access, and any request that spans systems policy does not describe as a single row. The agent accelerates throughput on the defined surface area; it does not replace governance forums, access reviews, or break-glass processes.

Define escalation paths in runbooks: POLICY_SILENT, PRIVILEGED_ENTITLEMENT, APPROVAL_REQUIRED, IDENTITY_UNRESOLVED, API_FAILURE. Each code should map to a queue, SLA, and required human action. IAM also owns policy maintenance. When the same unmatched request appears repeatedly, the fix is a new or updated row, not agent tuning.

For employee lifecycle edge cases, coordinate with onboarding package auto-builder for day-one bundles and with tier-1 autonomous resolution agent for password, MFA, and device friction that masquerades as access requests. Keep those concerns separated so access provisioning does not become a general IT catch-all.

Review agent behavior on a sample of closed tickets monthly: cite completeness, confirmation evidence, and escalation correctness. Adjust policy and connectors, not prompt wording, when systematic gaps appear. Done well, identity and IT operations leads get faster delivery on standard access, cleaner audit trails, and fewer swivel-chair minutes, while IAM keeps authority over everything policy has not yet made boring.

Is this worth automating for you?

Whether this pays back depends on how much time it takes your team today. Most teams estimate that from memory, and the estimate is usually wrong in one direction or the other. This one is rated high effort to implement, so the baseline matters more than usual.

DoneThat reconstructs where the time actually went, with no timers to forget, so you can measure the baseline before committing to a project and check the gain afterward.

Measure the baseline first