Identity Privileged Access

Privileged Identity Management and PAM Architecture: Just-in-Time Access at Scale

Quick take: Standing privileged access is a liability, not a convenience. PIM governs when a role can be activated and who approves it; PAM protects the credential used after activation — vaulting it, brokering the session, recording every keystroke, and rotating it when the session ends. Together they shrink the attack window from “always” to “ninety minutes, approved, recorded,” and make every privileged action attributable to a human, a justification, and a ticket.

FinanceCo discovered that 40 engineers held permanent Global Administrator rights in their identity tenant. Some had not used those rights in months, yet every one of those accounts was a target every single day — phishable, replayable, and capable of owning the entire estate from a single stolen token. A compromised laptop with standing admin access triggered a security review that rewrote their identity model end to end: nobody holds privileged access by default; everyone must request it, justify it, get approved, and lose it automatically when the clock runs out. Within a quarter, standing Global Administrators dropped from 40 to 2 break-glass accounts, mean privileged-session duration fell to 74 minutes, and every privileged action — directory change, subscription owner grant, production database query — carried a name, a reason, and a recording.

This is the architecture behind that change. Privileged Identity Management (PIM) and Privileged Access Management (PAM) are not the same product and not interchangeable buzzwords — they solve adjacent halves of the same problem. PIM answers “who is allowed to become an administrator, for how long, and who signs off?” PAM answers “once they’re an administrator, where does the credential live, how is the session brokered and recorded, and how fast is the secret rotated afterward?” A mature program runs both, plus the supporting controls that make them real: a tiered administration model so a workstation compromise can’t reach a domain controller, Privileged Access Workstations (PAWs) so admins never type a Tier-0 credential on a machine that also reads email, break-glass accounts for the day PIM itself is unavailable, and an audit pipeline that turns every activation and session into an immutable, queryable record.

By the end you will be able to design this from the management-group root down: model eligible versus active assignments, wire approval workflows and access reviews, configure Entra PIM for both directory roles and Azure resource roles with real Graph and az/PowerShell, lay out the three-tier admin model and map identities to it, stand up break-glass accounts that are excluded from Conditional Access yet alarmed on every use, and integrate a CyberArk-style vault for the credentials PIM elevation alone doesn’t cover (local admin, service accounts, network gear, databases). You will also know the failure modes that bite in production — the approver who’s on holiday, the break-glass account nobody tested, the access review everyone rubber-stamps — and how to engineer around each one.

What problem this solves

Privileged accounts are the crown jewels, and standing privilege makes them permanently load-bearing. If a Global Administrator, a subscription Owner, or a domain Enterprise Admin is always active, an attacker needs exactly one thing — one stolen token, one replayed cookie, one phished credential, one compromised laptop with a cached session — to own the environment. The blast radius is the whole tenant, and the dwell time is “until someone notices,” which in the median breach is weeks. Standing privilege also destroys attributability: when ten people permanently share Owner on a subscription, “who deleted the resource group at 3 a.m.?” has no clean answer, and your incident response and your auditors both stall.

What breaks without this discipline is predictable and expensive. Joiners accumulate roles they were granted for one project and never lose — privilege creep — until the average “admin” can touch a third of the estate for no current reason. Leavers keep access because deprovisioning is manual and lossy. Service accounts run with domain-admin-equivalent rights and a password set in 2019, written in a runbook, never rotated, because rotating it “might break something.” Emergency changes get made with personal admin accounts because there’s no faster path, so the audit trail is a personal name doing privileged work with no ticket. And the moment a single endpoint is compromised, lateral movement is trivial: the attacker harvests cached credentials, finds a standing admin token, and pivots from a marketing laptop to a domain controller in hours, because nothing in the identity model said those two tiers must never share a credential.

Who hits this: every organization past a handful of admins, but hardest where privileged access grew organically — a cloud estate that started with three people all holding Owner “to move fast,” an on-prem AD where Domain Admins has 60 members, a SaaS-heavy shop where nobody owns the shared admin@ logins. Regulated industries feel it first because separation of duties, least privilege, and privileged session recording are explicit audit requirements (PCI-DSS, SOX, HIPAA, ISO 27001, SOC 2). The fix is not “trust people less” — it’s making privilege temporary, approved, recorded, and minimal by construction, so a stolen credential is usually worthless and, when it isn’t, the window is small and the trail complete.

To frame the whole field before the deep dive, here is the spectrum of privileged-access maturity, what each stage looks like in production, and the single change that moves you to the next level:

Maturity stage What it looks like Primary risk The one change to advance
0 — Standing & shared Permanent Global Admins/Owners; shared admin@; passwords in runbooks Single stolen credential = full compromise; zero attribution Make every admin account individual; inventory who has what
1 — Individual but standing Per-person admin accounts, still permanent rights Phishing/token theft owns the tenant; privilege creep Convert standing roles to eligible (PIM)
2 — JIT activation Roles eligible; activate with MFA + justification, time-bound Activation without oversight; no session record Add approval + access reviews on Tier-0 roles
3 — Approved & reviewed Approval workflows, quarterly recertification, alerting Credentials still live and reusable post-activation Add PAM vaulting + session brokering for non-role secrets
4 — Vaulted & brokered Vaulted credentials, recorded sessions, auto-rotation Workstation compromise still reaches Tier-0 Add tiered admin model + PAWs
5 — Tiered & isolated Tier-0/1/2 separation, PAWs, break-glass tested, full audit Residual: process drift, untested break-glass Continuous attestation, red-team the model, automate reviews

Learning objectives

By the end of this article you can:

Prerequisites & where this fits

You should already understand the identity fundamentals: that Microsoft Entra ID (formerly Azure AD) issues tokens and holds directory roles (Global Administrator, User Administrator, Privileged Role Administrator, etc.); that Azure RBAC assigns resource roles (Owner, Contributor, User Access Administrator) at management-group, subscription, resource-group, or resource scope; and that on-prem Active Directory has its own privileged groups (Domain Admins, Enterprise Admins, Schema Admins). You should know what MFA and Conditional Access do, be comfortable running az and Microsoft Graph PowerShell in Cloud Shell, and understand that PIM requires Microsoft Entra ID P2 (or Microsoft Entra ID Governance) licensing. Familiarity with the Zero Trust Architecture Blueprint helps, because privileged access is the sharpest edge of zero trust.

This sits at the apex of the Identity & Access Governance track. It assumes the access-lifecycle plumbing below it — Entra ID Governance access packages for standing entitlements, lifecycle workflows for joiner-mover-leaver — and pairs tightly with Conditional Access at scale, because every activation should require a phishing-resistant, compliant-device sign-in. It is the natural companion to the implementation-focused Building Enterprise PAM: Credential Vaulting, Session Brokering, and Automatic Rotation (the deep PAM build) and to Zero Trust on Microsoft Entra: Conditional Access + PIM, Step by Step (the hands-on CA+PIM wiring). The break-glass and access-review pieces each have their own full treatment — Engineering Break-Glass Emergency Access Accounts and Building an Access Reviews Program — which this article ties together into one coherent architecture.

A quick map of who owns what during a privileged-access program, so responsibility is never ambiguous:

Layer What lives here Who usually owns it Failure if neglected
Directory roles (PIM) Global Admin, PRA, User Admin elevation Identity / IAM team Standing Global Admins; no JIT
Azure resource roles (PIM) Owner/Contributor at MG/sub/RG scope Cloud platform team Permanent subscription Owners
On-prem AD privileged groups Domain/Enterprise/Schema Admins AD / infra team DA sprawl; Kerberoasting; no tiering
Credential vault (PAM) Local admin, service accounts, DB, network Security / PAM team Static service-account passwords; no rotation
Session brokering & recording Jump host, proxy, keystroke capture Security / PAM team No forensic record of privileged sessions
Conditional Access MFA, device compliance, locations Identity team Activation from a phished, non-compliant device
Break-glass Emergency accounts + alerting Identity + SecOps jointly Untested account; or a silent backdoor
Audit & detection Sign-in/audit logs, SIEM rules SecOps / SOC Activations nobody reviews; blind to abuse

Core concepts

Six mental models make every later design decision obvious. Internalize these and the rest is detail.

PIM governs the right to act; PAM governs the credential used to act. This is the master distinction. PIM decides who can become a Global Administrator or a subscription Owner, for how long, and with whose approval — it elevates an identity’s role just in time and revokes it on expiry. PAM decides where the credential lives: it vaults the password/key/secret, brokers the session (you connect through a proxy, often never seeing the credential), records it for forensics, and rotates it afterward so a captured password is already dead. You need both because some privileged access is a role (Owner on a subscription — perfect for PIM) and some is a raw credential (the local Administrator password on 5,000 servers, the SQL sa account, the firewall enable password — perfect for PAM, because there’s no Entra role to elevate).

Standing access is the enemy; just-in-time is the answer. Standing access means privilege is always assigned and always usable — the default state of most environments and the root cause of most blast radius. Just-in-time (JIT) access means privilege exists only for a bounded window you explicitly activate (typically 1–8 hours), after MFA, justification, and often approval, vanishing automatically on expiry. The goal is to drive standing privileged access to zero (bar a few tested break-glass accounts) and route everything else through JIT. The win is quantifiable: if privilege is active 1% of the time instead of 100%, you’ve removed 99% of the window a stolen credential is useful.

Eligible is potential; active is realized. An eligible assignment means a user can activate a role but does not currently hold it — dormant until activated. An active assignment means they hold it right now (from activating an eligible one, or a permanent/time-bound active grant). The target state for almost every role is eligible, not active: the person gets the power when they justify needing it, but at rest there’s nothing for an attacker to steal. Reserve permanent-active for break-glass and the rare automation case that genuinely cannot activate.

Approval and review add the human and the recurring checkpoint. Approval workflows insert a second human, enforcing separation of duties and catching “why are you activating Global Admin at 2 a.m.?” before power is granted. Access reviews are the counterweight to creep: on a schedule, the right person re-attests each eligible assignment, and anything denied or unreviewed is automatically removed. Approval gates a single activation; review keeps the eligibility itself honest over time.

The tier model stops the credential from crossing the chasm. The tiered administration model partitions admin identities and assets into Tier 0 (identity control plane — domain controllers, Entra ID, ADFS, PKI), Tier 1 (servers, apps, databases), and Tier 2 (workstations, devices, helpdesk). The iron rule: a credential of a given tier is only ever used on assets of that tier or higher, and admin accounts and their PAWs never cross tiers. This defeats lateral movement — a compromised Tier-2 laptop can’t harvest a Tier-0 credential, because one was never typed there. PIM and PAM are powerful, but if a Tier-0 password is typed on the same laptop that opens email attachments, the attacker has the keys regardless.

Break-glass is the escape hatch you hope never to pull — and must still alarm. Break-glass (emergency access) accounts exist for the day the normal path fails: a Conditional Access misconfiguration that locks everyone out, an MFA outage, a PIM incident, broken federation. They are deliberately permanent-active Global Administrators, excluded from Conditional Access and MFA (so a broken CA policy can’t lock them out too), with long random passwords stored offline under dual control. The paradox is that the very properties making them resilient (no MFA, always active, CA-excluded) make them the most dangerous accounts in the tenant — so every authentication fires a high-severity alert and is reviewed within hours, and they’re tested on a schedule so “break glass in case of emergency” doesn’t mean discovering the glass was painted on.

The vocabulary in one table

The glossary repeats these for lookup; this is the mental model side by side:

Term One-line definition Belongs to Why it matters
PIM Governs JIT elevation of directory/resource roles Identity governance Removes standing role membership
PAM Vaults credentials, brokers + records sessions, rotates Privileged access security Protects raw credentials PIM can’t elevate
Standing access Privilege always assigned and usable The problem Permanent attack window
JIT activation Time-bound elevation on demand PIM Shrinks the window to minutes
Eligible assignment Can activate; not currently holding the role PIM The target state for most roles
Active assignment Currently holds the role PIM Reserve permanent-active for break-glass
Approval / review A second human approves; recurring recertification PIM / Governance Separation of duties; kills creep
PAW / Tier 0/1/2 Admin-only workstation; control/workload/device partition Tiered model Stops lateral movement
Break-glass Emergency always-on, CA-excluded admin account Resilience Recovery when PIM/CA/MFA fails
Vault / broker / rotate Encrypted store; proxy injects credential; secret changes PAM Credential never reaches the endpoint; captured secret dies
PRA Privileged Role Administrator (manages PIM itself) Entra role The role that controls all elevation

PIM vs PAM: the precise division of labor

The terms get used interchangeably and that confusion costs real money — teams buy a PAM suite expecting it to remove standing Entra roles (it doesn’t, natively), or they roll out Entra PIM and assume their SQL sa password is now safe (it isn’t). Draw the line cleanly. PIM is a feature of your identity provider that makes role membership temporary. PAM is a security platform that makes raw credentials vaulted, brokered, recorded, and rotated. They overlap in intent (least privilege, attribution, shrinking the window) but operate on different objects (roles vs credentials) at different layers (directory/RBAC vs OS/app/network).

Here is the side-by-side that ends the confusion:

Dimension PIM (e.g. Entra PIM) PAM (e.g. CyberArk, Delinea, BeyondTrust)
Operates on Roles (directory + Azure resource roles) Credentials (passwords, SSH keys, API keys, certs)
Core verb Elevate a role just in time Vault, broker, record, rotate a credential
What’s protected The right to act as admin The secret used to act as admin
Standing state at rest Eligible (no role held) Credential checked in, rotated, unknown to humans
How you use it Activate role → your own identity gains power Check out / launch session → connect via proxy
Session record Audit log of activation + Azure activity Full keystroke/video recording of the session
Rotation N/A (your own identity, not a shared secret) Automatic, on check-in or schedule
Typical targets Global Admin, Owner, Contributor, PRA Local Administrator, root, sa, service accounts, network enable
Licensing Entra ID P2 / Governance Separate enterprise license (per-seat / per-target)
Approval Built-in approval workflow Dual-control / request workflow
Native to cloud IdP? Yes (Entra) No — bolted on, agents/proxies

The decisive question for any privileged thing is: is it a role my IdP can grant, or a raw credential on a system? That single fork tells you which tool owns it:

The privileged thing Is it a role or a credential? Owned by Why
Global Administrator in Entra Role PIM Entra can make it eligible/JIT
Owner on a subscription Role (Azure RBAC) PIM PIM for Azure resources covers it
Domain Admins membership (on-prem AD) Role/group PIM (MIM) or PAM-managed group Entra PIM doesn’t cover on-prem groups natively; use MIM PAM or PAM
Local Administrator on a Windows server Credential PAM (or Windows LAPS) No Entra role; a password on the box
root on a Linux host Credential PAM A password/key on the host
SQL Server sa Credential PAM Database credential, not a directory role
Firewall/router enable secret Credential PAM Network device local secret
A service account running a Windows service Credential PAM (or gMSA) Static password; vault + rotate or convert to gMSA
An Azure managed identity Neither (secretless) Neither — prefer this No human credential to steal; ideal end state

The strategic conclusion: prefer architectures that need neither. Every workload you move to a managed identity or workload identity federation is a credential you never have to vault and a role you never have to elevate. PIM and PAM are for the irreducible human and legacy cases — make that set as small as you can, then govern it ruthlessly.

Where they combine in one real workflow

The two are not either/or; a single privileged task often uses both in sequence. A senior SRE investigating a production database (1) uses PIM to activate the eligible “Production DB Operator” role with MFA and manager approval, getting a 2-hour active assignment; (2) opens the PAM vault, which launches a brokered session injecting the database credential without revealing it while recording every SQL statement; then (3) on completion the role auto-expires and the vault rotates the password. Two tools, one task: zero standing access, full recording, and a captured credential that’s dead the moment the session ends.

Eligible vs active assignments — the heart of PIM

This is the single most important configuration decision in the program. Every assignment in PIM is eligible (dormant — the user can activate when they justify a need, but holds no power at rest) or active (live — they hold the role now), and active subdivides into permanent active (no end date) and time-bound active (auto-expires on a date). The split between them is your standing-access posture: make essentially everything eligible, a small set time-bound active for genuine short-term needs (a contractor for a 30-day project), and only break-glass permanent active.

Assignment type User holds the role… Standing access? Use it for Avoid it for
Eligible Only after activating (MFA/justify/approve), time-bound No (the goal) Almost every privileged role
Time-bound active Now, until an expiry date you set Yes, but bounded Short-term project / contractor needs Permanent admins
Permanent active Now, forever, no activation Yes, unbounded Break-glass only; rare automation Any human standing admin
Permanent eligible Only after activating; eligibility never expires No (but eligibility unbounded) Long-term staff who occasionally need a role High-risk roles (prefer time-bound eligible)
Time-bound eligible Only after activating; eligibility itself expires No Project staff who need JIT for a fixed period

The mechanics of activation — what the user does to turn eligible into active — are governed per role by role settings (covered in detail below). The crucial parameters:

Activation parameter What it controls Typical value Trade-off if too loose Trade-off if too strict
Maximum activation duration How long an activated role stays active 1–8 h (Tier-0: 1–2 h) Longer window for a stolen token More frequent re-activation friction
Require MFA on activation Forces MFA at activation time Always on (phishing-resistant) Activation from a replayed session None — keep it on
Require justification Free-text reason captured Always on No audit context Negligible friction
Require ticket number Bind activation to ITSM ticket On for Tier-0/1 Activation with no change record Manual ticket entry
Require approval Second human gates activation On for high-impact roles Unilateral self-elevation Approver bottleneck (mitigate with multiple)
Require Conditional Access (auth context) Demand compliant device / phishing-resistant MFA On for Tier-0 Activation from a dirty device Excludes legitimate edge cases
Maximum eligible duration How long the eligibility lasts before re-grant 6–12 months Stale eligibility lingers Frequent re-granting overhead

A subtle but high-value distinction is role-assignable groups as an activation target. Rather than making a user eligible for a role directly, you can make them eligible for membership in a PIM-for-Groups group that holds the role (or a bundle of roles). This lets you JIT-activate a set of permissions and manage entitlements as group membership — invaluable when an “operator” persona needs five roles at once. The trade-offs:

Approach Granularity Best for Watch-out
Eligible for a role directly One role per assignment Single high-value roles (Global Admin) Many separate activations if a persona needs several
Eligible for a role-assignable group A bundle of roles via group membership Personas needing several roles together Group must be isAssignableToRole=true; nesting limits
Eligible for an Azure RBAC role at scope One role at one scope (MG/sub/RG/resource) Resource-plane access (Owner on one sub) Scope sprawl if not modeled at MG level

Modeling it: from “who has what” to a clean eligible posture

The migration from standing to eligible is a project in itself, and the pattern that works is inventory → categorize → convert high-value first → verify → expand, detailed below. The one rule you never break: never remove someone’s standing access until you’ve confirmed they can activate — the worst PIM rollout is the one that locks your own admins out.

Migration phase Action Done when
1. Inventory Enumerate all active directory + resource role assignments You have a complete CSV of who holds what, where
2. Categorize Tag each: break-glass / standing-justified / convert Every assignment has a disposition
3. Configure role settings Set activation duration, MFA, approval, justification per role High-value roles have approval + short duration
4. Create eligible assignments Make users eligible for the roles they had active Eligible mirrors the justified active set
5. Verify activation Each user successfully activates once Zero “I can’t get in” reports
6. Remove standing Delete the now-redundant active assignments Standing Global Admins == break-glass count
7. Add reviews + alerts Access reviews + activation alerts wired Recurring recertification scheduled

Just-in-time activation: the request-to-expiry lifecycle

JIT activation is the moment the whole architecture earns its keep, so understand the lifecycle precisely. A user with an eligible assignment requests activation; PIM enforces the role’s settings (MFA, justification, ticket, approval, Conditional Access); on success the user gets a time-bound active assignment; they do the work; the assignment auto-expires; PIM writes the whole thing to the audit log. The token mechanics matter: activation updates the user’s role membership, and the next token they receive carries the elevated role claim — which is why an active session may need a token refresh (sign-out/in or a fresh token acquisition) before the new power is visible.

Lifecycle stage What happens Who/what acts Audit artifact
Request User selects an eligible role and requests activation User “Add member to role (PIM activation) request”
Policy enforcement MFA, justification, ticket, CA auth context checked PIM + Entra MFA claim; justification text
Approval (if required) Approver receives request, approves/denies Approver Approval decision + approver identity
Grant Role becomes active for the configured duration PIM “Add member to role completed (PIM)”
Token refresh New token carries the elevated role claim Client Sign-in log with role claim
Use User performs privileged operations User Azure activity log / directory audit
Expiry Role auto-removed at end of duration PIM “Remove member from role (PIM expiration)”
(Optional) Deactivate early User deactivates when done User “Remove member from role (PIM)”

The activation request settings interplay determines how much friction and how much safety each activation carries. The decision matrix for which controls to require on which roles:

Role / tier Max duration MFA Justification Ticket Approval CA auth context
Global Administrator 1 h Phishing-resistant Required Required Required (2 approvers) Compliant PAW + FIDO2
Privileged Role Administrator 1 h Phishing-resistant Required Required Required Compliant PAW + FIDO2
Owner (subscription) 2 h Phishing-resistant Required Required Required Compliant device
User Administrator 4 h MFA Required Optional Optional Compliant device
Contributor (resource group) 8 h MFA Required Optional Optional
Helpdesk / Password Admin (Tier 2) 8 h MFA Required Optional Optional
Break-glass Permanent active (no activation) Excluded n/a n/a n/a Excluded

A frequent real failure is the token-refresh gap: a user activates Owner, immediately runs az, gets “authorization failed,” and concludes PIM is broken. The role is active in the directory, but the cached token predates the grant and lacks the new role claim. The fix is to refresh the token (az logout && az login, a hard browser refresh, or reconnecting Connect-MgGraph) — covered as a troubleshooting row below. (If activation “succeeded” but the role isn’t active, approval is probably still pending.) Knowing this saves an hour of false debugging.

Approval workflows: separation of duties without bottlenecks

Approval is the control that turns “I can elevate myself whenever I want” into “someone else has to agree.” It enforces separation of duties and creates a natural choke point for anomaly detection (“why is the finance app’s deploy account requesting Global Admin?”). The art is making it meaningful without making it a bottleneck. The sound defaults: require approval for Tier-0/1 (optional for Tier-2); use ≥2 distinct approvers with a short timeout and escalation; enforce approver ≠ requester (a self-approval is no approval); notify by push and Teams so requests are seen fast; surface the justification and ticket so the decision is real; and never auto-approve a privileged role. Build those into the policy, then engineer out the common failure modes:

Failure mode What goes wrong Engineering fix
Single approver unavailable Holiday/illness strands activation Assign ≥2–3 approvers; an approver group, not a person
Approval fatigue / rubber-stamping Approvers click approve reflexively Fewer, higher-value approvals; show justification + ticket; review approval logs
Approver is the requester’s report Power asymmetry; can’t really say no Approvers peers/seniors, not direct reports
No approval for true emergencies Incident waits on a human at 3 a.m. Break-glass path (separate, alarmed) for genuine emergencies; never weaken the normal gate
Approval but no context Approver can’t judge legitimacy Require ticket + justification; surface requester’s recent activity
Standing approver permissions Approvers themselves over-privileged Approvers need only the PIM approve permission, not the role

A practical pattern: for the very highest roles (Global Admin, PRA), require approval and a ticket and a short duration and Conditional Access auth context demanding a PAW — defense in depth, where each control covers the others’ gaps. For mid-tier roles, justification plus MFA is often the right balance, with approval reserved for the cases where the blast radius justifies the friction. Calibrate by blast radius, not by org-chart seniority.

Access reviews: the recurring counterweight to privilege creep

Approval gates a single activation; access reviews keep the eligibility itself honest over months. Without reviews, eligible-assignment lists rot exactly like standing ones did — people change teams, projects end, contractors leave — and “eligible for Global Admin” quietly accumulates until your JIT model governs a bloated population. A review is a scheduled campaign where the right reviewer re-attests each assignment (“yes, this person still needs to be eligible for Owner”) and denied or unreviewed access is automatically removed.

Access review parameter Options Recommendation Why
Scope Specific role / all privileged roles / group Per high-value role + a sweep of all privileged Tier-0 reviewed most often
Frequency One-time / weekly / monthly / quarterly / annual Quarterly (Tier-0 monthly) Balance rigor vs reviewer fatigue
Reviewers Self / manager / resource owner / specific users Manager + resource owner (not self for Tier-0) Self-review is weak for top roles
Auto-apply results On / off On Decisions must take effect, not sit in a report
If reviewers don’t respond No change / remove access / approve Remove access (Tier-0) Default-deny on neglect
Require reason on approval On / off On Forces a real judgment, not a click
Decision helpers Show last sign-in / activation recency On “Hasn’t activated in 90 days → probably remove”

The review-design failure modes mirror approval’s, plus a few of their own:

Failure mode What goes wrong Engineering fix
Rubber-stamp “approve all” Reviewer approves everyone in 30 s Require a reason; show inactivity data; spot-audit decisions
Self-review of top roles Everyone keeps their own access Manager/owner reviews Tier-0, never self
Results not auto-applied Review happens; nothing is removed Turn on auto-apply; default-remove on no response
Reviewer doesn’t know the person Can’t judge the need Route to the manager who does; include context
Too frequent → fatigue Reviewers stop engaging Tier the cadence; quarterly is usually right
Eligibility never expires Stale eligibility lingers between reviews Use time-bound eligibility + reviews together

Pair reviews with inactivity signals: PIM and the audit log tell you who hasn’t activated a role in N days. An eligible Global Administrator who hasn’t activated in 90 days is almost certainly a candidate for removal — the review should surface that automatically so reviewers default to removing dormant eligibility. The full program design is its own article — Building an Access Reviews Program in Entra ID — but the architectural point here is simple: eligibility without recurring review degrades into standing access wearing a JIT costume.

Entra PIM mechanics: real configuration end to end

Now the concrete part — wiring Entra PIM for both directory roles and Azure resource roles with real commands. PIM has two surfaces: PIM for Microsoft Entra roles (directory roles like Global Administrator) and PIM for Azure resources (RBAC roles at MG/subscription/RG/resource scope). They share concepts (eligible/active, role settings, activation) but live behind different APIs — Microsoft Graph for directory roles, the ARM/Microsoft.Authorization provider for resource roles. Below, every operation gets both a CLI/PowerShell snippet and, where it applies, the Graph REST shape.

Prerequisites and the role that controls PIM itself

PIM requires Microsoft Entra ID P2 (or Microsoft Entra ID Governance) for every user it touches. The role that administers PIM for directory roles is Privileged Role Administrator (PRA) — it configures role settings, creates eligible assignments, and manages approvals (for Azure resource roles, User Access Administrator / Owner at the scope plays that part). PRA is itself one of the most powerful roles in the tenant — whoever controls PIM controls all elevation — so PRA must be eligible-not-active, approval-gated, and PAW-only, exactly like Global Admin. Activation audit lives in the Entra audit logs (AuditLogs) and PIM history; the maximum activation duration is a per-role setting (commonly capped around 24 h, which you set far lower).

Configuring directory-role settings (the activation policy)

Role settings define the activation policy for a directory role — duration, MFA, justification, approval. With Microsoft Graph PowerShell, you read and update the policy via unifiedRoleManagementPolicy and its rules. First, discover the policy for a role at tenant scope:

# Connect with the rights to manage PIM policy
Connect-MgGraph -Scopes "RoleManagementPolicy.ReadWrite.Directory","RoleManagement.ReadWrite.Directory"

# Find the policy assignment for a role (e.g. Global Administrator) at tenant scope
$roleId = (Get-MgRoleManagementDirectoryRoleDefinition `
  -Filter "displayName eq 'Global Administrator'").Id

$policyAssignment = Get-MgPolicyRoleManagementPolicyAssignment `
  -Filter "scopeId eq '/' and scopeType eq 'DirectoryRole' and roleDefinitionId eq '$roleId'"

$policyId = $policyAssignment.PolicyId
# Enumerate the rules (each rule is one knob: max duration, MFA, approval, etc.)
Get-MgPolicyRoleManagementPolicyRule -UnifiedRoleManagementPolicyId $policyId |
  Select-Object Id, '@odata.type'

To set the maximum activation duration to one hour and require justification, you update the relevant rules. The expiration rule (Expiration_EndUser_Assignment) controls activation duration; the enablement rule (Enablement_EndUser_Assignment) controls MFA/justification/ticket:

# Set max activation duration to 1 hour (PT1H) for the activation (EndUser) rule
$expRule = @{
  "@odata.type" = "#microsoft.graph.unifiedRoleManagementPolicyExpirationRule"
  id            = "Expiration_EndUser_Assignment"
  isExpirationRequired = $true
  maximumDuration      = "PT1H"
}
Update-MgPolicyRoleManagementPolicyRule -UnifiedRoleManagementPolicyId $policyId `
  -UnifiedRoleManagementPolicyRuleId "Expiration_EndUser_Assignment" -BodyParameter $expRule

# Require MFA + justification + ticket on activation
$enableRule = @{
  "@odata.type" = "#microsoft.graph.unifiedRoleManagementPolicyEnablementRule"
  id            = "Enablement_EndUser_Assignment"
  enabledRules  = @("MultiFactorAuthentication","Justification","Ticketing")
}
Update-MgPolicyRoleManagementPolicyRule -UnifiedRoleManagementPolicyId $policyId `
  -UnifiedRoleManagementPolicyRuleId "Enablement_EndUser_Assignment" -BodyParameter $enableRule

The rule types you will actually configure, and what each governs:

Rule (unifiedRoleManagementPolicyRule) Governs Key setting
Expiration_EndUser_Assignment Max activation duration maximumDuration (e.g. PT1H)
Enablement_EndUser_Assignment MFA / justification / ticket on activation enabledRules array
Approval_EndUser_Assignment Whether approval is required + approvers setting.isApprovalRequired, approver list
AuthenticationContext_EndUser_Assignment Require a CA auth context (PAW/FIDO2) claimValue (auth context id)
Expiration_Admin_Eligibility Max eligible-assignment duration maximumDuration, isExpirationRequired
Notification_* Who gets notified on assign/activate/approve recipient settings

Requiring approval and binding a Conditional Access auth context

For the highest roles, require approval and demand a Conditional Access authentication context (so activation forces a compliant PAW + phishing-resistant MFA). The approval rule names the approvers; the auth-context rule binds the activation to a CA policy:

# Require approval, naming an approver group
$approvalRule = @{
  "@odata.type" = "#microsoft.graph.unifiedRoleManagementPolicyApprovalRule"
  id            = "Approval_EndUser_Assignment"
  setting = @{
    isApprovalRequired = $true
    approvalStages = @(@{
      approvalStageTimeOutInDays = 1
      isApproverJustificationRequired = $true
      primaryApprovers = @(@{
        "@odata.type" = "#microsoft.graph.groupMembers"
        groupId = "<approver-group-object-id>"
      })
    })
  }
}
Update-MgPolicyRoleManagementPolicyRule -UnifiedRoleManagementPolicyId $policyId `
  -UnifiedRoleManagementPolicyRuleId "Approval_EndUser_Assignment" -BodyParameter $approvalRule

You define the auth context (e.g. c1 = “Require PAW + FIDO2”) in Conditional Access, then a CA policy targets that context. PIM’s auth-context rule then forces activation through it. This is the link that makes Conditional Access and PIM one system: the activation is a sign-in event you can gate on device compliance and phishing-resistant credentials.

Creating eligible assignments (directory roles)

Make a user eligible for a role with a scheduled-assignment request. The action is adminAssign, assignmentType is Eligible:

# Make a user ELIGIBLE for User Administrator (not active — they must activate JIT)
$params = @{
  action = "adminAssign"
  justification = "Tier-2 operator — eligible per access package APKG-USR-ADMIN"
  roleDefinitionId = (Get-MgRoleManagementDirectoryRoleDefinition `
    -Filter "displayName eq 'User Administrator'").Id
  directoryScopeId = "/"
  principalId = "<user-object-id>"
  scheduleInfo = @{
    startDateTime = (Get-Date).ToString("o")
    expiration = @{ type = "afterDuration"; duration = "P180D" }  # eligibility for 180 days
  }
}
New-MgRoleManagementDirectoryRoleEligibilityScheduleRequest -BodyParameter $params

The equivalent Graph REST call (useful from any language/automation):

# POST an eligible directory-role assignment via Graph
curl -X POST "https://graph.microsoft.com/v1.0/roleManagement/directory/roleEligibilityScheduleRequests" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{
    "action": "adminAssign",
    "justification": "Tier-2 operator eligible",
    "roleDefinitionId": "<roleDefinitionId>",
    "directoryScopeId": "/",
    "principalId": "<userObjectId>",
    "scheduleInfo": { "startDateTime": "2026-06-23T00:00:00Z",
      "expiration": { "type": "afterDuration", "duration": "P180D" } }
  }'

Activating a role as the end user

The user activates an eligible role with a selfActivate request, supplying justification (and ticket if required). The role becomes active for the configured duration:

# User self-activates an eligible role for 1 hour with justification + ticket
$activation = @{
  action = "selfActivate"
  justification = "Investigating INC-4821 — user cannot reset MFA"
  roleDefinitionId = "<roleDefinitionId>"
  directoryScopeId = "/"
  principalId = (Get-MgContext).Account  # or the user's object id
  scheduleInfo = @{
    startDateTime = (Get-Date).ToString("o")
    expiration = @{ type = "afterDuration"; duration = "PT1H" }
  }
  ticketInfo = @{ ticketNumber = "INC-4821"; ticketSystem = "ServiceNow" }
}
New-MgRoleManagementDirectoryRoleAssignmentScheduleRequest -BodyParameter $activation

PIM for Azure resources (RBAC roles at scope)

For Azure resource roles, the same eligible/active model applies but through ARM. With az, you create an eligible role assignment scheduled request for, say, Contributor on a resource group. (Note: native az support for PIM-for-resources lives under az role assignment schedule commands and the REST Microsoft.Authorization/roleEligibilityScheduleRequests provider; the REST form is the most portable.)

# Make a user ELIGIBLE for Contributor on a resource group via the ARM REST provider
SUB=<subscription-id>; RG=rg-prod-app
SCOPE="/subscriptions/$SUB/resourceGroups/$RG"
ROLE_DEF="/subscriptions/$SUB/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c" # Contributor
GUID=$(uuidgen)

az rest --method put \
  --url "https://management.azure.com$SCOPE/providers/Microsoft.Authorization/roleEligibilityScheduleRequests/$GUID?api-version=2020-10-01" \
  --body "{
    \"properties\": {
      \"principalId\": \"<userObjectId>\",
      \"roleDefinitionId\": \"$ROLE_DEF\",
      \"requestType\": \"AdminAssign\",
      \"scheduleInfo\": { \"startDateTime\": \"2026-06-23T00:00:00Z\",
        \"expiration\": { \"type\": \"AfterDuration\", \"duration\": \"P90D\" } },
      \"justification\": \"App team — eligible Contributor on rg-prod-app\"
    }
  }"

The directory-vs-resource API map, so you call the right surface:

Operation Directory roles (Graph) Azure resource roles (ARM)
Define activation policy unifiedRoleManagementPolicy rules roleManagementPolicies (resource scope)
Create eligible assignment roleEligibilityScheduleRequests roleEligibilityScheduleRequests (ARM)
Activate (self) roleAssignmentScheduleRequests (selfActivate) roleAssignmentScheduleRequests (ARM, SelfActivate)
List current eligibilities roleEligibilitySchedules roleEligibilitySchedules (ARM)
Audit history auditLogs/directoryAudits Activity log + roleAssignmentScheduleInstances

PIM alerts: the security signals it surfaces

PIM ships built-in security alerts that flag risky configurations and behaviors. Tune these — they’re free detections:

PIM alert What it flags Recommended action
Too many Global Administrators More GAs than a threshold Reduce; convert to eligible; cap break-glass
Roles activated too frequently A user activating repeatedly Investigate; maybe they need a different role
Administrators aren’t using their roles Eligible but never activating Remove dormant eligibility in next review
Roles assigned outside PIM Active assignments bypassing PIM Bring under PIM; investigate who/why
Accounts without MFA on activation Activation policy lacks MFA Enforce MFA on activation
Stale accounts with privileged roles Inactive accounts holding privilege Disable/remove

The tiered administration model

PIM and PAM shrink the time a credential is usable and protect the secret, but neither stops a credential from being used on the wrong machine — that is the tiered administration model’s job. Borrowed from Microsoft’s privileged-access strategy (the successor to the old “red forest” / ESAE thinking), it partitions both admin identities and the assets they administer into tiers and forbids credentials from flowing downward in trust.

Tier What it controls Example assets Example admin roles Cardinal rule
Tier 0 — Control plane Identity systems that can grant any access Domain controllers, Entra ID, ADFS, PKI/CAs, Azure AD Connect Domain/Enterprise Admins, Global Admin, PRA Tier-0 creds only ever used on Tier-0 assets, from a Tier-0 PAW
Tier 1 — Workloads Servers, applications, data App/DB servers, line-of-business apps, Azure subscriptions’ workloads Server admins, DBAs, subscription Contributors Tier-1 creds used on Tier-1 assets; never to log into Tier-2
Tier 2 — Devices End-user devices and support Workstations, printers, helpdesk Helpdesk, desktop admins, Password Admin Tier-2 creds used on Tier-2; never grant Tier-0/1

The two rules that make tiering actually work — and that are violated constantly in real environments:

Rule What it means What violating it enables
Credential isolation (no downward exposure) A higher-tier credential is never exposed to (typed on, cached on, processed by) a lower-tier asset A compromised low-tier box harvests a high-tier credential → instant privilege escalation
Clean source principle A higher-tier system is never managed from a lower-tier system (the management path must be at least as trusted as the target) Managing a DC from an admin’s everyday laptop puts Tier-0 at the mercy of Tier-2 hygiene

The classic violation, and how the model prevents it:

Anti-pattern (common reality) Why it’s catastrophic Tiered-model fix
Domain Admin logs into a member server to troubleshoot DA credential now cached on a Tier-1 box; one compromise = domain DA only logs into DCs from a Tier-0 PAW; use a Tier-1 account on the server
Helpdesk has local admin on servers and laptops Tier-2 identity spans Tier-1; phished helpdesk = server access Separate Tier-1 and Tier-2 admin accounts; helpdesk stays Tier-2
One admin account used everywhere A single credential bridges all tiers Distinct accounts per tier (e.g. adm-t0-vinod, adm-t1-vinod, vinod)
Managing Entra/DCs from the corporate laptop Tier-0 at the mercy of email/web exposure PAW-only access to Tier-0 control planes
Service account is Domain Admin Static high-tier credential, often unrotated Least-privilege delegation; gMSA; vault + rotate

Mapping identities to tiers is the practical work: every admin gets a distinct account per tier they operate in, never one account spanning tiers. A platform engineer who manages both Entra (Tier 0) and app subscriptions (Tier 1) holds two separate admin identities, each PIM-eligible for the roles of its tier, each used only from the appropriate workstation. This is more accounts to manage, and it is exactly the friction that stops a single phish from owning everything.

Privileged Access Workstations (PAWs)

A PAW is a hardened, dedicated workstation used only for privileged administration — never for email, never for web browsing, never for the thousand exposures of a general-purpose machine. It is the physical embodiment of the clean-source principle: if Tier-0 credentials are only ever typed on a Tier-0 PAW, and that PAW can’t reach the internet or open attachments, the most common credential-theft vectors (phishing, drive-by, malicious document) simply cannot reach the credential.

PAW characteristic Requirement Why
Dedicated hardware Separate physical device (or strongly isolated VM) Admin work isolated from user work
No productivity apps No email client, no general browsing, no Office macros Removes the top phishing/malware vectors
Restricted egress Only to management endpoints (Azure/Entra/management URLs) Can’t be used for browsing; can’t exfiltrate easily
Hardened OS Credential Guard, attack-surface reduction, app allow-listing Defends the credential in memory and on disk
Compliant + managed Intune-managed, compliance-enforced Conditional Access can require it for activation
Phishing-resistant auth FIDO2 / Windows Hello for Business, smart card No phishable password to steal
Local admin locked down No standing local admin; LAPS-managed Limits on-box escalation

There is a spectrum of admin-workstation models by how strongly the admin and user worlds are separated — from a dedicated hardware PAW (highest separation and cost, the only acceptable Tier-0 option), through PAW-plus-user-VDI and an isolated admin VM on a user host (medium — the host is the weak link, acceptable for Tier 1 but not Tier 0), to a brokered PAM jump host (low friction, complements a PAW for Tier 1), down to the everyday laptop (no separation — the anti-pattern, never for privileged work). The non-negotiable: Tier-0 administration happens only from a dedicated PAW. Be pragmatic about Tier 1 (an isolated admin VM or a brokered jump host may be fine), but the identity control plane is administered from clean hardware, behind phishing-resistant auth, with Conditional Access requiring exactly that posture before PIM will even let you activate.

Break-glass emergency access accounts

Break-glass accounts are the deliberate exception that keeps the whole edifice from becoming a single point of failure. The architecture you’ve built — PIM gates activation, Conditional Access requires a compliant PAW, MFA is mandatory — is also a list of things that can break and lock everyone out (a CA policy that targets all users, an MFA outage, a PIM incident, a federation failure). Break-glass accounts exist so a human can still get in and fix it. Their design is a study in deliberate paradox: the very properties that make them resilient (always active, no MFA dependency, CA-excluded) make them dangerous — so you compensate with extreme monitoring and process, never by weakening the resilience.

Break-glass property Setting Reason Compensating control
Permanent-active Global Administrator Not PIM-eligible; standing GA PIM itself might be down Alert on every sign-in; quarterly review
Excluded from all Conditional Access CA exclusion group A bad CA policy must not lock them out Alert; the only accounts excluded
No MFA dependency on a single provider FIDO2 keys stored offline (or app-specific resilient method) MFA outage must not block recovery Keys in a safe; dual control
Cloud-only (not synced from AD) @onmicrosoft.com, not federated On-prem/federation failure must not block them Separate from the synced identity plane
Long random password, offline 30+ char random, in a sealed envelope / vault Resist guessing; available in a true emergency Split-knowledge / dual custody
Excluded from automated lockout/disable Not subject to scripts that disable stale accounts They’re stale by design Documented exception

The monitoring is the whole point — a break-glass account that’s used and not noticed is just a backdoor. Every authentication must be loud:

Detection Mechanism Severity
Break-glass sign-in Sign-in log → SIEM rule on the account UPN/object id High — page on-call
Break-glass added to any group/role Audit log alert High
Break-glass password change Audit log alert High
Break-glass excluded-from-CA removed CA change alert (someone tampering) Critical
Periodic “is it still valid?” test Scheduled access validation (process)

A Sentinel/Log Analytics rule to alarm on any break-glass sign-in:

// Alert on ANY sign-in by a break-glass account — should be near-zero, every hit is investigated
let breakGlass = dynamic(["bg-admin1@contoso.onmicrosoft.com","bg-admin2@contoso.onmicrosoft.com"]);
SigninLogs
| where UserPrincipalName in~ (breakGlass)
| project TimeGenerated, UserPrincipalName, IPAddress, ResultType, AppDisplayName, Location
| order by TimeGenerated desc

Two final rules that separate a real break-glass program from a checkbox: have at least two (so losing one — lost key, forgotten password — doesn’t strand you), and test them on a schedule (sign in, confirm access, confirm the alert fired, reseal) so “in case of emergency” isn’t the first time anyone tries the glass. The full hardening treatment is in Engineering Break-Glass Emergency Access Accounts; the architectural role here is that they are the only permanent-active Global Administrators you should ever have.

PAM vaulting and session brokering (CyberArk-style)

Everything above governs roles. But a huge swath of privileged access is raw credentials that no directory can elevate: the local Administrator on every server, root on every Linux host, the SQL sa account, the firewall enable secret, the service account running a critical job. This is PAM’s domain, and the reference implementation — whether CyberArk, Delinea (Thycotic), BeyondTrust, or HashiCorp Vault for secrets — rests on four pillars: vault, broker, record, rotate.

PAM pillar What it does The risk it removes
Vaulting Stores credentials encrypted; humans don’t know them Passwords in runbooks/scripts/sticky notes
Session brokering You connect through a proxy that injects the credential; you never see it Credential reaching the human/clipboard/endpoint
Session recording Keystroke + video capture of the privileged session “Who did what” — full forensic record
Rotation Changes the secret on check-in / schedule A captured/known password is already dead

Vaulting. The vault is an encrypted, access-controlled store whose defining property is that the human never needs to know the credential. Credentials are onboarded (discovered or imported), encrypted at rest with an HSM-backed master key, and released only to authorized requests under policy — least privilege per safe, dual control for the most sensitive. The vault becomes the single source of truth for “what is the local-admin password on srv-db-07 right now” — an answer that changes on every rotation and that no person carries in their head. Automated account discovery finds the unmanaged privileged accounts you didn’t know you had.

Session brokering. Instead of giving you the password, the PAM platform uses it on your behalf. You request a session to srv-db-07; the broker (a connection proxy / jump server) authenticates to the target with the vaulted credential without ever displaying it to you, and proxies your RDP/SSH/SQL session through a single controlled chokepoint that can also filter dangerous commands inline. The credential never touches your workstation, your clipboard, or your memory — so even a fully compromised admin endpoint can’t harvest it, and the broker is exactly where PIM’s JIT role and the vaulted credential meet in one flow.

Session recording. Every brokered session is recorded — keystrokes, commands, and often full screen video and file transfers. This is the forensic backbone: when an incident asks “what exactly did this session do,” the answer is a replayable recording, not a reconstruction from fragments. Recordings are stored immutably (WORM / retention-locked, encrypted) so they survive the very compromise they might be needed to investigate; scope and disclose capture per policy and jurisdiction.

Rotation. Rotation closes the loop: after a session ends (check-in), on a schedule, on demand after a suspected compromise, or when an account’s policy tightens, the vault changes the credential — so a password that was known (briefly, by the broker; or captured by an attacker) is immediately invalid. This is what makes vaulting more than a fancy password manager: the secret is a moving target, and a captured credential is dead within the session.

The PAM-platform landscape, so you can place the reference architecture against real products:

Platform Strength Note
CyberArk Mature enterprise vault + session mgmt The reference “PAM suite”; broad target coverage
Delinea (Thycotic Secret Server) Approachable, fast to deploy Strong mid-market footprint
BeyondTrust Session management + endpoint privilege mgmt Pairs PAM with EPM (removing local admin)
HashiCorp Vault Secrets engine, dynamic secrets, PKI Excellent for app/secret use; less a human-session PAM
Azure Key Vault + managed identity Cloud-native secret storage, secretless apps Not a human-session PAM; ideal for workloads

The full build — onboarding, safes, CPM rotation, PSM brokering — is its own deep dive: Building Enterprise PAM: Credential Vaulting, Session Brokering, and Automatic Rotation. The architectural placement here: PAM is the credential half of the program, sitting alongside PIM’s role half, and the two meet in workflows where a JIT-elevated identity checks out a vaulted, brokered, recorded, soon-rotated credential.

Audit, detection, and proving it works

A privileged-access program you can’t prove is working is a compliance liability and an operational blind spot. The audit layer answers, on demand and historically: who is eligible for what, who activated what, when, why, who approved, and what they did afterward. In Entra, the source of truth is the audit logs (directory audits) and sign-in logs, ideally streamed to Log Analytics / Microsoft Sentinel for retention and querying; for PAM, it’s the vault’s audit trail and the session recordings.

Question Where the answer lives How to get it
Who is eligible for Global Admin? PIM / Graph roleEligibilitySchedules Graph query / PIM blade
Who activated a role, when, why? Entra audit logs (PIM operations) KQL on AuditLogs
Who approved an activation? Entra audit logs KQL on AuditLogs (approval events)
What did they do once elevated? Azure activity log / directory audit Correlate by actor + time window
Did anyone get a role outside PIM? PIM alert + audit logs “Roles assigned outside of PIM” alert
Did a break-glass account sign in? Sign-in logs KQL alert on the break-glass UPNs
What happened in a privileged session? PAM session recording Replay the recording

Stream PIM operations to a workspace and you can answer “who activated what this month” in one query:

// All PIM role activations in the last 30 days, with actor, role, and justification
AuditLogs
| where TimeGenerated > ago(30d)
| where Category == "RoleManagement"
| where OperationName has "Add member to role" and OperationName has "PIM"
| extend Actor = tostring(InitiatedBy.user.userPrincipalName)
| extend Role  = tostring(TargetResources[0].displayName)
| extend Reason = tostring(parse_json(tostring(AdditionalDetails))[0].value)
| project TimeGenerated, Actor, Role, Reason, Result
| order by TimeGenerated desc

Detections worth building beyond the built-in PIM alerts:

Detection Signal Why it matters
Activation from a non-compliant device Sign-in deviceDetail + activation event Catches a bypass of the PAW requirement
Activation outside business hours / unusual location Activation event + sign-in geo/time Anomalous elevation — possible compromise
Role activated then immediately used for a destructive op Correlate activation → activity log delete/role-grant Detects “elevate and pillage”
Approval by an unexpected approver Approval event + approver identity Catches approval-policy drift or collusion
Eligible assignment created outside change windows Audit log on eligibility creation Detects unauthorized grant of future power
Standing (non-PIM) active assignment appears “Outside of PIM” alert The whole model relies on no bypass

Architecture at a glance

Read the system left to right and top to bottom. On the left, an admin sits at a PAW — a hardened, Intune-managed workstation with no email or browsing — and authenticates with a FIDO2 security key (phishing-resistant). That sign-in flows into Microsoft Entra ID, where Conditional Access evaluates the request against an authentication context that demands exactly this posture (compliant PAW + phishing-resistant MFA) before anything privileged can proceed. With that gate passed, the admin reaches Entra PIM, where their assignments are eligible, not active — they hold no standing power until they request activation. The request triggers the role settings (MFA already satisfied, justification entered, ticket bound) and, for high-value roles, an approval workflow routes to a separate approver. On approval, PIM writes a time-bound active assignment (1–2 hours for Tier-0), and the next token carries the elevated role claim. The first diagram captures this whole control plane and the parallel PAM path:

PIM governs just-in-time role activation from a PAW through Conditional Access and approval, while a CyberArk-style PAM vault brokers and records the privileged session and rotates the credential afterward; break-glass accounts sit outside as the alarmed emergency path

Trace the activation itself as a sequence and the timing becomes concrete: select an eligible role → PIM enforces MFA and captures justification → an approver gates it (if required) → the role goes active for its bounded duration → the token refreshes → the work happens → the assignment expires automatically, with every step written to the audit log. The second diagram walks this request-to-expiry lifecycle hop by hop:

Just-in-time activation sequence: eligible user requests activation, PIM enforces MFA and justification, approver approves, role becomes time-bound active, token refreshes, work is performed, and the assignment auto-expires — each step emitting an audit event

Finally, the decision the whole program turns on: for any privileged assignment you find, should it be standing at all? The third diagram is the decision tree — if it’s a role your IdP can grant, convert it to eligible (JIT) with the right gates; if it’s a raw credential on a system, route it to the PAM vault for brokering and rotation; reserve permanent-active for the tiny set of tested break-glass accounts; and prefer secretless (managed identity / workload federation) wherever a workload, not a human, needs access:

Privileged access decision tree: standing rights should be removed or converted to just-in-time eligibility; raw credentials go to the PAM vault; permanent-active is reserved for tested break-glass accounts; workloads prefer secretless managed identities

Real-world scenario

Northwind Logistics ran a 9,000-employee hybrid estate: on-prem Active Directory synced to Entra ID, ~120 Azure subscriptions under a CAF management-group hierarchy, and a fleet of 4,000 Windows/Linux servers. The privileged-access posture was the textbook stage-0/1 mess. 38 accounts held permanent Global Administrator. Domain Admins had 54 members, many of them service accounts. Every server shared the same local Administrator password — set during the 2021 gold-image build, written in a Confluence runbook, never rotated. Four engineers shared the SQL sa login for the data warehouse. There was no session recording anywhere, and the only “break-glass” was a sticky note in the infra lead’s desk drawer with a personal admin password on it.

The trigger was a near-miss: an engineer’s laptop was compromised via a malicious npm package in a side project. The attacker harvested cached credentials and found a standing Owner token for the production subscription. They got as far as enumerating resources before EDR flagged the anomalous az calls and the SOC pulled the laptop. The post-incident review was blunt: one developer laptop had been ninety seconds of inattention away from owning production, because privilege was standing, shared, and untiered.

The remediation ran as a 90-day program. Phase 1 (weeks 1–3): inventory and break-glass. They enumerated every active assignment (directory + resource + AD groups), stood up two cloud-only break-glass Global Administrators excluded from all Conditional Access, with FIDO2 keys split between two safes under dual custody, and wired a Sentinel rule paging on any break-glass sign-in. Phase 2 (weeks 4–7): PIM for the crown jewels. They configured Entra PIM role settings for Global Admin and PRA (1-hour activation, phishing-resistant MFA, justification, ticket, two-approver approval, CA auth context requiring a PAW), made the 38 GAs eligible instead of active, verified each could activate, then deleted the standing assignments — dropping permanent Global Admins from 38 to 2 (the break-glass pair). Subscription Owners went the same way: eligible at management-group scope, 2-hour activation, approval required. Phase 3 (weeks 8–11): tiering, PAWs, and PAM. They split admin identities into Tier-0/1/2 accounts, issued dedicated PAWs to the dozen Tier-0 admins, deployed Windows LAPS so every server’s local Administrator password became unique and auto-rotated, and stood up a CyberArk vault for the service accounts and the sa credential — brokered, recorded, rotated-on-check-in. Phase 4 (week 12): reviews and proof. Quarterly access reviews on all privileged roles (monthly for Tier-0), auto-applying results and removing anyone who hadn’t activated in 90 days, plus the audit dashboards their SOC and auditors needed.

The numbers after 90 days told the story. Permanent Global Administrators: 38 → 2. Domain Admins: 54 → 6 (service accounts moved to gMSA or vault-managed). Shared static passwords: thousands → 0 (LAPS + vault). Mean privileged-session duration: “forever” → 74 minutes, auto-expiring. Privileged sessions recorded: 0% → 100% for vaulted access. The cost was real — Entra ID P2 for ~200 privileged users (~₹6,000/user/year), a CyberArk license, a dozen PAWs (~₹80,000 each), and roughly 0.5 FTE of ongoing program management — but the avoided cost (a single production-subscription compromise) dwarfed it, and the auditors signed off on least-privilege and separation-of-duties for the first time in the company’s history.

Advantages and disadvantages

Advantage Disadvantage
Eliminates standing access — a stolen credential is usually inert Operational friction — approvals/MFA add steps to every privileged task
Full attribution — every activation and session is logged to a person + reason Approval bottlenecks if workflows are poorly tuned (single approver on holiday)
Shrinks the attack window from “always” to “minutes, approved” Cost — Entra ID P2 + a PAM suite + PAWs is a real budget line
Separation of duties — approval enforces a second human Complexity — tiering, PAWs, vault integration is a program, not a project
Fast revocation — pull a role or rotate a credential instantly Break-glass risk — emergency accounts are backdoors if not alarmed/tested
Compliance evidence — recordings + audit satisfy SOX/PCI/HIPAA/ISO Adoption resistance — admins used to standing access push back
Defeats lateral movement — tiering + PAWs stop credential harvesting Token-refresh gotcha — activated power not visible until token refresh confuses users
Credential is a moving target — rotation kills captured secrets Legacy gaps — some old systems resist brokering/rotation

Where each matters: the friction is the price of the attack-surface reduction, and the trade is overwhelmingly worth it for high-impact roles — but it’s not worth it for routine read-only access, where wrapping everything in PIM just creates approval fatigue. The break-glass risk is the one disadvantage you cannot afford to mismanage: an unalarmed, untested break-glass account is strictly worse than no PIM at all, because it’s a permanent Global Administrator that nobody is watching. And the complexity is real — this is a multi-quarter program touching identity, cloud, AD, and security teams; treating it as a checkbox produces a half-built model with all the friction and a fraction of the protection.

Hands-on lab

This lab converts a directory role from standing to JIT-eligible in Entra PIM, configures its activation policy, activates it as an end user, and verifies the audit trail — using only an Entra ID P2 trial tenant (free P2 trial covers PIM). Run it with a test admin and a test “operator” user; do not practice on a production tenant’s Global Administrator. Estimated time: 30–40 minutes.

1. Connect with the rights to manage PIM. In Cloud Shell or a local shell with Graph PowerShell installed:

Connect-MgGraph -Scopes "RoleManagementPolicy.ReadWrite.Directory",`
  "RoleManagement.ReadWrite.Directory","RoleEligibilitySchedule.ReadWrite.Directory"
Get-MgContext | Select-Object Account, Scopes   # confirm you connected with the right scopes

Expected: your admin account and the requested scopes listed.

2. Pick a low-risk role to govern. Use User Administrator (powerful enough to be meaningful, far below Global Admin):

$roleId = (Get-MgRoleManagementDirectoryRoleDefinition `
  -Filter "displayName eq 'User Administrator'").Id
$roleId   # note this GUID

Expected: a GUID printed (the role definition id).

3. Find the role’s PIM policy and set a 1-hour activation with MFA + justification.

$pa = Get-MgPolicyRoleManagementPolicyAssignment `
  -Filter "scopeId eq '/' and scopeType eq 'DirectoryRole' and roleDefinitionId eq '$roleId'"
$policyId = $pa.PolicyId

# Max activation duration = 1 hour
Update-MgPolicyRoleManagementPolicyRule -UnifiedRoleManagementPolicyId $policyId `
  -UnifiedRoleManagementPolicyRuleId "Expiration_EndUser_Assignment" -BodyParameter @{
    "@odata.type"="#microsoft.graph.unifiedRoleManagementPolicyExpirationRule"
    id="Expiration_EndUser_Assignment"; isExpirationRequired=$true; maximumDuration="PT1H" }

# Require MFA + justification on activation
Update-MgPolicyRoleManagementPolicyRule -UnifiedRoleManagementPolicyId $policyId `
  -UnifiedRoleManagementPolicyRuleId "Enablement_EndUser_Assignment" -BodyParameter @{
    "@odata.type"="#microsoft.graph.unifiedRoleManagementPolicyEnablementRule"
    id="Enablement_EndUser_Assignment"; enabledRules=@("MultiFactorAuthentication","Justification") }

Expected: both calls return without error (HTTP 204 under the hood).

4. Make the test operator ELIGIBLE (not active) for the role.

$operatorId = (Get-MgUser -Filter "userPrincipalName eq 'operator@<tenant>.onmicrosoft.com'").Id
New-MgRoleManagementDirectoryRoleEligibilityScheduleRequest -BodyParameter @{
  action="adminAssign"; justification="Lab: eligible User Admin"
  roleDefinitionId=$roleId; directoryScopeId="/"; principalId=$operatorId
  scheduleInfo=@{ startDateTime=(Get-Date).ToString("o")
    expiration=@{ type="afterDuration"; duration="P30D" } } }

Expected: a request object with status Provisioned (or PendingProvisioning briefly).

5. Confirm the eligibility exists.

Get-MgRoleManagementDirectoryRoleEligibilitySchedule `
  -Filter "principalId eq '$operatorId'" |
  Select-Object RoleDefinitionId, @{n='Type';e={'Eligible'}}, StartDateTime

Expected: one row showing the operator eligible for the role. They hold no active role yet.

6. Activate as the end user. Sign in as the operator (separate session) and run a self-activation:

# As the OPERATOR (new Connect-MgGraph session as operator@...)
New-MgRoleManagementDirectoryRoleAssignmentScheduleRequest -BodyParameter @{
  action="selfActivate"; justification="Lab: resetting a test user's password"
  roleDefinitionId="<roleId>"; directoryScopeId="/"
  principalId="<operatorId>"
  scheduleInfo=@{ startDateTime=(Get-Date).ToString("o")
    expiration=@{ type="afterDuration"; duration="PT1H" } } }

Expected: a request with status Provisioned; the role is now active for 1 hour. (If you’d required approval, it would sit PendingApproval until approved.)

7. Verify the active assignment and the audit trail.

# Active assignment now present:
Get-MgRoleManagementDirectoryRoleAssignmentSchedule -Filter "principalId eq '<operatorId>'" |
  Select-Object RoleDefinitionId, AssignmentType, EndDateTime
# Audit: the activation event (may take a minute to surface)
Get-MgAuditLogDirectoryAudit -Filter "category eq 'RoleManagement'" -Top 5 |
  Select-Object ActivityDisplayName, ActivityDateTime, Result

Expected: an active assignment with an EndDateTime ~1 hour out, and an audit entry like “Add member to role completed (PIM activation).”

8. Teardown. Remove the eligibility (and let the active assignment expire, or deactivate):

# Remove the eligible assignment
New-MgRoleManagementDirectoryRoleEligibilityScheduleRequest -BodyParameter @{
  action="adminRemove"; roleDefinitionId="<roleId>"; directoryScopeId="/"
  principalId="<operatorId>" }
Disconnect-MgGraph

Expected: the eligibility is removed; the active assignment auto-expires at its EndDateTime. You’ve taken a role from standing to JIT and back, with a full audit trail — the core PIM loop.

Common mistakes & troubleshooting

# Symptom Root cause Confirm (exact command / portal path) Fix
1 Activated Owner but az says “authorization failed” Cached token predates the role grant (token-refresh gap) az account get-access-token --query expiresOn; role shows active in PIM blade az logout && az login; re-acquire the token
2 Removed standing access; an admin is now locked out They were never verified able to activate before removal PIM → My roles (as them) shows no eligible assignment Re-create the eligible assignment; verify activation before removing standing
3 Activation stuck “pending approval” forever Sole approver unavailable; no escalation PIM → Approve requests; approver group has one member on leave Assign an approver group with ≥2–3 members; set approval timeout + escalation
4 Break-glass account got locked out by a CA policy Break-glass not excluded from the new Conditional Access policy CA policy → Assignments → Exclusions missing the BG group Add the break-glass group to every CA policy’s exclusions; alert on tampering
5 PIM activation fails “MFA required” though MFA was done Activation requires fresh MFA / phishing-resistant the session lacks Sign-in log shows the auth method; activation policy requires a stronger method Satisfy the required auth context (FIDO2/PAW); re-activate
6 Service account “can’t activate” its role Non-human principals often can’t perform interactive activation Activation requires MFA/justification a daemon can’t supply Use a managed identity (secretless) or a permanent-eligible-without-MFA exception, governed tightly — prefer secretless
7 Access review ran but nobody lost access Auto-apply results was off; or default “no change” on no-response Review settings → “Upon completion” not set to apply/remove Turn on auto-apply; set no-response default to remove for Tier-0
8 Roles keep appearing as active outside PIM Someone assigning roles directly via az role assignment/Graph, bypassing PIM PIM alert “Roles are being assigned outside of PIM”; audit log Investigate; remove; restrict who can assign roles directly; alert on it
9 An admin still has Owner months after a project ended Eligibility never expires + no review caught it Inactivity in PIM (“administrators aren’t using their roles” alert) Use time-bound eligibility; quarterly reviews; remove dormant eligibility
10 Activation policy change “didn’t take” Edited the wrong rule (Admin vs EndUser; eligibility vs assignment) Re-read the rule: Get-MgPolicyRoleManagementPolicyRule Edit *_EndUser_Assignment for activation; *_Admin_Eligibility for eligibility
11 PAM-brokered session fails to inject the credential Target’s local credential rotated out-of-band; vault out of sync Vault shows last rotation; target login fails Reconcile/re-rotate via the vault; ensure only the vault rotates it
12 “Activation succeeded” but the user still can’t do the action Role grants a different scope/permission than they expected Check the role’s actual permissions and scope vs the operation Grant the right role at the right scope; least privilege per task
13 Break-glass sign-in didn’t fire an alert The detection rule references the wrong UPN/object id, or isn’t deployed Run the KQL manually against SigninLogs for the BG UPNs Fix the rule’s account list; test the alert end-to-end on a schedule
14 Domain Admin still cached on member servers despite “PIM everywhere” Entra PIM doesn’t cover on-prem AD group membership Get-ADGroupMember "Domain Admins" still standing Use MIM PAM / a PAM-managed group for on-prem; enforce tiering + PAWs

Three of these bite hardest and deserve a closer word. Locking your own admins out (#2) is the most damaging rollout error — the discipline is non-negotiable: create the eligible assignment, have the user activate once, and only then delete the standing one (verify, then remove). The silent bypass (#8) voids the whole model: if anyone can still assign roles directly (az role assignment create, Graph roleAssignments), they mint standing access behind PIM’s back — so turn on the “roles assigned outside of PIM” alert, restrict the role-assignment permission, and treat any out-of-PIM active assignment as an incident. And on-prem AD is not covered (#14): Entra PIM governs Entra directory roles and Azure resource roles, not on-prem AD group membership — Domain/Enterprise Admins need Microsoft Identity Manager’s PAM feature (bastion forest), a PAM-managed group, or at minimum rigorous tiering and PAWs.

Best practices

Security notes

Cost & sizing

The bill has three main drivers — Entra ID P2/Governance (per user PIM touches, ~₹6,000–7,500/user/year, licensed for the privileged population of typically 2–10% of users, not the whole company — for Northwind’s 200 privileged users ~₹1.2–1.5M/year), a PAM platform (CyberArk-class, the biggest line at ₹15–40 lakh+/year, justified by the static credentials it eliminates and the recording it provides; HashiCorp Vault and Azure Key Vault are far cheaper but are not human-session PAM), and PAWs (a dedicated device per Tier-0 admin, ~₹70k–100k each, for the dozen people who touch the control plane, not everyone). The math favors the program once you price in a single avoided breach. The sizing rule: license PIM for the privileged population, deploy PAWs to Tier-0 only (Tier-1 can use an isolated admin VM or a brokered jump host), and start the vault on the highest-blast-radius shared credentials (the universal local-admin password, the sa accounts, domain-joined service accounts) before expanding. The cost picture:

Cost driver What you pay for Rough INR / year What it buys Watch-out
Entra ID P2 (per privileged user) PIM, access reviews, ID Protection ~₹6,000–7,500 / user JIT, eligible/active, approval, review License only the privileged set, not everyone
Entra ID Governance (per user) + entitlement mgmt, lifecycle workflows higher than P2 Full access-lifecycle governance Needed only if you use the governance suite
PAM suite (CyberArk-class) Vault, broker, record, rotate ~₹15–40 lakh+ Eliminates static credentials; recordings Per-target/session pricing scales with scope
PAWs (Tier-0) Dedicated hardened devices ~₹70k–100k each Clean-source admin; defeats credential theft One per Tier-0 admin; not org-wide
Windows LAPS (Included with Windows/Entra) ~₹0 Unique, rotated local-admin passwords Free — deploy it before buying a vault for local admin
SIEM ingestion (Sentinel) Audit/sign-in log retention + rules per-GB Detection + immutable audit Sample/route high-volume logs

The honest floor for cloud-only PIM is Entra ID P2 for your privileged users + free Windows LAPS + Sentinel; the full enterprise picture adds the PAM suite and PAWs. Against the cost of one production compromise — Northwind’s near-miss was ninety seconds from owning the production subscription — the program is cheap insurance, and most of the highest-value moves (eligible assignments, break-glass, LAPS, tiering discipline) cost more in rigor than in rupees.

Interview & exam questions

1. What is the precise difference between PIM and PAM? PIM governs the right to act — it makes role membership (Entra directory + Azure resource roles) just-in-time: eligible instead of active, activated with MFA/justification/approval, time-bound and auto-expiring. PAM governs the credential used to act — it vaults raw secrets (local admin, service accounts, sa, network gear), brokers sessions so the human never sees the credential, records them, and rotates the secret afterward. PIM is role-centric and native to your IdP; PAM is credential/session-centric and bolted onto systems. A mature program runs both.

2. Explain eligible vs active assignments and why eligible is the target state. An eligible assignment means a user can activate a role on demand but holds no power at rest; an active assignment means they hold the role now. Eligible is the target for almost every privileged role because at rest there’s nothing for an attacker to steal — the power exists only during a justified, time-bound, audited activation. Permanent-active should be reserved for break-glass accounts.

3. Why do break-glass accounts have no MFA and are excluded from Conditional Access, and how do you make that safe? Those properties make them resilient: if MFA or a CA policy is the very thing that broke (a policy locking everyone out, an MFA outage), the account must still get in to fix it. You make it safe not by weakening that resilience but by extreme monitoring — cloud-only, long offline passwords under dual control, a high-severity alert on every sign-in, an alarm on any change to their CA exclusion, and scheduled testing. They are the only permanent-active Global Administrators you should have.

4. What does the tiered administration model protect against that PIM and PAM alone don’t? Lateral movement via credential harvesting. PIM shrinks the time a credential is usable and PAM protects the secret, but neither stops a high-tier credential from being typed on a low-tier machine. The tier model forbids that: Tier-0 credentials are only ever used on Tier-0 assets from a Tier-0 PAW (credential isolation + clean source), so a compromised Tier-2 laptop can’t harvest a Tier-0 credential, because one was never present there.

5. A user activates Owner in PIM, immediately runs az, and gets “authorization failed.” What happened? The token-refresh gap: the role is active in the directory, but the user’s cached token predates the grant and lacks the new role claim. The fix is to refresh the token — az logout && az login (or re-acquire), then the elevated claim is present. This is a configuration non-issue mistaken for a PIM failure.

6. How do you stop privilege creep in eligible assignments over time? Access reviews with teeth: a recurring campaign (quarterly for privileged, monthly for Tier-0) where the right reviewer (manager/owner, never self for top roles) re-attests each eligibility, with auto-apply on and the no-response default set to remove. Surface inactivity (who hasn’t activated in 90 days) and pair with time-bound eligibility so eligibility itself expires.

7. When would you use PAM (a vault) instead of PIM for a privileged thing? When it’s a raw credential on a system, not a role your IdP can grant. The local Administrator on a server, root, SQL sa, a firewall enable secret, a service-account password — there is no Entra role to make eligible, so you vault the credential, broker and record the session, and rotate it. PIM has no object to elevate there; PAM is the right tool.

8. What’s the right activation policy for Global Administrator? The strictest: short activation duration (1 hour), phishing-resistant MFA, required justification and ticket, approval by two separate approvers, and a Conditional Access authentication context that demands a compliant Privileged Access Workstation. Defense in depth, because the blast radius is the entire tenant. Plus: only break-glass accounts hold Global Admin as permanent-active.

9. A health-check-style trap: can Entra PIM make your on-prem Domain Admins just-in-time? No — Entra PIM governs Entra directory roles and Azure resource roles, not on-prem AD group membership. For Domain/Enterprise Admins you need Microsoft Identity Manager’s PAM feature (bastion-forest model), a third-party PAM-managed group, or — at minimum — rigorous tiering and PAWs. Assuming an Entra PIM rollout secured on-prem AD is a common and dangerous mistake.

10. How does approval enforce separation of duties without becoming a bottleneck? It requires a second human to approve an activation (no unilateral self-elevation). To avoid bottlenecks: use an approver group of 2–3 (not one person who might be on holiday), set a timeout with escalation, surface the justification and ticket so the decision is real, and reserve approval for high-blast-radius roles. Genuine emergencies use the separate, alarmed break-glass path — never weaken the normal gate to handle them.

11. What do you log to prove the program works, and where? Stream Entra audit logs (activations, approvals, eligible-assignment changes) and sign-in logs to Log Analytics/Sentinel; correlate with the Azure activity log to see what the elevated identity did; keep PAM recordings as immutable WORM. The auditable chain is: who is eligible → who activated, when, why, who approved → what they did → was the credential rotated. Build detections for break-glass sign-ins, out-of-PIM assignments, and off-hours activations.

12. Why prefer “secretless” over both PIM and PAM where possible? Because a workload with a managed identity or workload-identity federation has no human-usable credential to steal and no standing role to elevate — the platform issues short-lived tokens automatically. Every workload you move to secretless is one fewer credential to vault and one fewer role to govern. PIM and PAM are for the irreducible human and legacy cases; minimizing that set is the highest-leverage move.

These map to SC-300 (Identity and Access Administrator) — implement and manage privileged access, PIM, access reviews — and AZ-500 (Security Engineer) — manage privileged identities, PIM for Azure resources, Conditional Access. The governance/PAM strategy concepts map to CISSP (Identity and Access Management, Security Operations) and SC-100 (Cybersecurity Architect). A compact cert-mapping for revision:

Question theme Primary cert Objective area
PIM eligible/active, activation, reviews SC-300 Plan & implement privileged access
PIM for Azure resources, CA + activation AZ-500 Manage privileged identities; secure access
Break-glass, tiered model, PAW strategy SC-100 Design identity security / privileged access strategy
PAM vaulting/brokering/rotation concepts CISSP IAM domain; Security Operations
Separation of duties, least privilege, audit CISSP / SC-100 Governance, risk, and compliance

Quick check

  1. In one sentence each, what does PIM govern and what does PAM govern?
  2. You find an account that is a permanent-active Global Administrator. Under what single circumstance is that acceptable?
  3. A user activated Owner and immediately gets “authorization failed” running az. What’s the cause and the fix?
  4. Name two things a tiered admin model does that PIM and PAM alone cannot.
  5. Your access review ran last quarter but nobody actually lost access. Name the two settings that were almost certainly wrong.

Answers

  1. PIM governs the right to act — making roles (Entra directory + Azure resource roles) just-in-time eligible instead of standing-active. PAM governs the credential used to act — vaulting it, brokering and recording the session, and rotating it.
  2. Only if it is a break-glass emergency access account (cloud-only, CA-excluded, offline credentials under dual control, alarmed on every sign-in, and tested on a schedule). No human’s day-to-day account should be a permanent-active Global Administrator.
  3. The token-refresh gap: the role is active in the directory but the cached token predates the grant and lacks the role claim. Fix by refreshing the token — az logout && az login (or re-acquire) — then the elevated claim is present.
  4. (a) Enforce credential isolation — a higher-tier credential is never typed/cached on a lower-tier asset; and (b) enforce the clean-source principle — higher-tier systems are managed only from equal-or-higher-trust machines (Tier-0 from a PAW). Together they defeat credential-harvesting lateral movement that PIM/PAM don’t address.
  5. Auto-apply results was off (so decisions sat in a report instead of removing access), and the no-response default wasn’t set to remove (so neglected entries silently kept their access). Turn on auto-apply and default-remove for privileged reviews.

Glossary

Next steps

You can now design privileged access from the management-group root down — eligible-not-active roles, approval and review gates, tiering, PAWs, break-glass, and a PAM vault for the credentials PIM can’t elevate. Build outward:

IdentityPIMPAMJust-in-TimeLeast PrivilegeEntra IDTiered AdminBreak-Glass
Need this built for real?

Vinod is a Senior Cloud Architect (22+ yrs) — available for Azure / AWS / GCP architecture, landing zones, and migrations.

Work with me

Comments

Keep Reading