What AccessOps is
Link to section “What AccessOps is”In 30 seconds
Link to section “In 30 seconds”AccessOps, as this Atlas uses the word, is the operation of access at the moment it is needed: how a person asks for access beyond their birthright (what a job role receives automatically on joining, run by IdentityOps), who or what approves it, how it is granted for a limited time, how a privileged session is recorded, how it ends, and how someone later checks it. Most rigour goes to privileged access. The target: fast access when needed, no standing access otherwise, every privileged action attributable to a person.
NSA and CISA give the reason: privileged accounts “should be separately managed using a Privileged Access Management (PAM) solution”, and just-in-time provisioning “reduces the number of privileged accounts that an attacker could target”[1]. For engineers who need production access, the IAM teams running the tooling, and auditors.
At a glance
Link to section “At a glance”| Question | Answer |
|---|---|
| Goal | Elevated access that is fast to get, short-lived, attributable and reviewed |
| In scope | Requests beyond birthright, approval, JIT elevation, PAM vaulting and brokering, break-glass, session recording, review campaigns, zero standing privileges, on-call and third-party access |
| Out of scope | Identities and sign-in (IdentityOps); permission design (IAMOps); physical access |
| Prerequisites | An identity provider with multi-factor authentication (MFA), an inventory of privileged roles, central logging |
| Outputs | Entitlement catalogue, access tiers, approval rules, break-glass kit, review campaigns, evidence |
| Term status | ambiguous; this page means requested and privileged access |
The problem it solves
Link to section “The problem it solves”The usual starting point is standing privilege: an admin group, a shared root password, a cloud role everyone holds “just in case”. The documented cases show the cost: a stolen session inherits everyday production rights, too many people can use powerful tools, vendor access is hard to bound, and secure emergency access can slow recovery. Ordinary access has a quieter version: project access never taken back. Symptoms: admin groups that only grow, approval by whoever answers a chat, untested break-glass passwords, hundreds of review lines approved in minutes.
What it is not
Link to section “What it is not”- Not identity lifecycle or sign-in (joiner-mover-leaver, birthright, single sign-on (SSO), MFA, the identity governance and administration (IGA) platform): IdentityOps.
- Not permission design (least-privilege roles, role- or attribute-based access control (RBAC/ABAC), policy as code): IAMOps. AccessOps decides when a role is active and how that is approved and recorded.
- Not audit evidence mapping (ComplianceOps) or detection (DetectionOps, SOC Ops); AccessOps produces their records. Not a product category or physical security.
Where it comes from and where it sits
Link to section “Where it comes from and where it sits”Origins and evolution
Link to section “Origins and evolution”“AccessOps” has no founding document; the practices matured separately. NIST SP 800-53 restricts, reviews and logs privileged accounts and removes temporary and emergency accounts “after a predefined time period rather than at the convenience of the system administrator” (AC-2(2))[9]. Zero trust moved the unit of access to the session: “Access to individual enterprise resources is granted on a per-session basis” (NIST SP 800-207, 2020)[10]. CISA’s Zero Trust Maturity Model 2.0 (2023) added an “Access Management” function whose top stage authorises “just-in-time and just-enough access”[11]. Cloud platforms built elevation in: Entra Privileged Identity Management (PIM)[12], Google Cloud Privileged Access Manager[13], AWS IAM Identity Center with partner tools or an open-source sample[14][15].
Glossary and mental model
Link to section “Glossary and mental model”| Term | Meaning on this page |
|---|---|
| Privileged user | NIST: “A user that is authorized (and therefore, trusted) to perform security-relevant functions that ordinary users are not authorized to perform”[16] |
| Standing privilege | Elevated rights active all the time, used or not |
| Eligible / active | Entra PIM: an eligible user must activate a role (MFA, reason, perhaps approval); an active user holds it now. Same access, different timing[12] |
| Entitlement / grant | Google Cloud PAM: who may request which roles, for how long, with what approval; a grant is one approved, time-limited use[13] |
| Zero standing privileges | Nobody holds elevated rights by default[17] |
| Break-glass | An emergency path that “bypasses your authorization system completely”[18] |
| Multi-party authorisation (MPA) | A second person approves an action or elevation[18] |
The mental model: privileged access is a loan. Every grant needs five fields — who, what scope, why, until when, approved by whom (or which rule) — and the system, not the borrower, ends it. Each loan passes four moments: request, elevate, use, review. Most failures are a missing field or moment.
Diagram source (Mermaid)
stateDiagram-v2 direction TB [*] --> Eligible: entitlement defined Eligible --> Requested: request with reason Requested --> Denied: approver says no Requested --> Active: approved, or rule auto-approves Active --> Expired: time limit reached Active --> Revoked: task done early or incident Expired --> Eligible: use sampled against reason Revoked --> Eligible: use sampled against reason Denied --> [*] Eligible --> Removed: review campaign says no Removed --> [*]
Text equivalent: An entitlement makes a user eligible; the user requests access with a reason. An approver denies it, or an approver or rule makes it active. Active access ends by expiry or early revocation and the user is eligible again; a sample of ended grants is checked against the reason. A periodic review removes eligibility nobody needs.
How AccessOps relates to other Ops
Link to section “How AccessOps relates to other Ops”| If your question is about… | Go to | What AccessOps adds |
|---|---|---|
| Accounts, SSO, MFA, leavers, the IGA platform | IdentityOps | Access beyond birthright; review campaigns on that platform |
| Designing roles and policies | IAMOps | When a role is active, and who approved it |
| Evidence for SOC 2, ISO 27001 or regulators | ComplianceOps | Request, approval, session and review records |
| Incident command and on-call | IncidentOps | Elevation tied to on-call |
| Approving access from chat | ChatOps | The grant itself, made and ended by the access system |
| Privileged access workstations | EndpointOps | Which device an elevated session may use |
| Data access policy; privacy of recordings | DataSecOps, PrivacyOps | JIT access to data; what is recorded |
| Emergency access in regional recovery | DisasterRecoveryOps | A break-glass kit that survives the outage |
Diagram source (Mermaid)
flowchart TB ID["IdentityOps"] IAM["IAMOps"] INC["IncidentOps"] CHAT["ChatOps"] END_["EndpointOps"] ACC["AccessOps: how and when"] ID -->|"who exists"| ACC IAM -->|"what a role may do"| ACC INC -->|"on-call schedule"| ACC CHAT -->|"requests"| ACC END_ -->|"privileged workstation"| ACC ACC -->|"evidence"| CMP["ComplianceOps"] ACC -->|"logs, alarms"| DET["DetectionOps, SOC Ops"] ACC -->|"what is recorded"| PRV["PrivacyOps"] classDef core fill:#e8f3f2,stroke:#16756f,color:#122029 classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029 class ACC core class ID,IAM,CMP,DET,INC,CHAT,END_,PRV neutral
Text equivalent: Five pages feed AccessOps: IdentityOps (who exists), IAMOps (what a role may do), IncidentOps (the on-call schedule), ChatOps (requests in chat) and EndpointOps (the privileged workstation). AccessOps decides how and when access is granted, used and reviewed, and sends evidence to ComplianceOps, logs and alarms to DetectionOps and SOC Ops, and what is recorded to PrivacyOps.
Principles and operating model
Link to section “Principles and operating model”Charter and principles
Link to section “Charter and principles”Mission. Engineers get the access a task needs within minutes, nobody holds privileged access they are not using, and every privileged action traces to a person, a reason and an approval.
- Eligible, not active. Few named exceptions; break-glass accounts are one, since Microsoft assigns their Global Administrator role “as permanent active (not eligible)”[19].
- Five fields per grant, with a structured reason; generic reasons like “Team foo needed access” should “set off alarm signals”[18].
- The system ends access (SP 800-53 AC-2(2)). Standing break-glass accounts are its accounts of last resort, which “remain available and are not subject to automatic disabling or removal dates”[9].
- A grant is not a session. Bound session lifetime; keep a way to end sessions (what expiry really ends).
- Friction in proportion to impact. Classify access by what it can damage[18].
- Approvers can say no: “make sure the technology and social dynamics allow someone to say no”[18].
- The emergency path is independent, loud and rehearsed[20].
- Evidence by default, stored off the host where the action happens. Non-goals: identities, permission design, audit mapping, detection (what it is not).
- Frequent requests are a design signal: Google reads breakglass need as a sign that a safer API is missing[18].
Fundamentals: building blocks
Link to section “Fundamentals: building blocks”| Building block | Job | Typical implementations | Trust boundary and main risk |
|---|---|---|---|
| Access broker | Catalogue of what can be requested, by whom, for how long; captures the reason, routes and records the decision | PIM role settings, PAM entitlements, access packages; IT service management (ITSM) or chat front ends | Can grant anything, so it is Tier 0, as are its approver bots; Teleport limits its PagerDuty plugin with a where predicate[21] |
| Grant issuer | Makes access active and removes it | Time-bound role binding, expiring group, short-lived certificate | Out-of-band edits break expiry; authoritative Terraform IAM overwrites Google Cloud PAM’s bindings[13] |
| Credential vault | Holds shared secrets; checks out, rotates or injects them | PAM vault, secrets manager | Concentrated value; prefer injection: “credentials are not exposed to the end user”[22] |
| Session gateway | Brokers and records connections | PAM session manager, access proxy, bastion | Recordings hold personal data and secrets; proxy recording gives the proxy more power[23] |
| Evidence store | Keeps records out of admins’ reach | Security information and event management (SIEM), write-once storage | External recordings “can be accessed, modified, deleted, and even restored independently of Boundary”[24] |
| Review engine | Runs recertification campaigns | IGA access reviews | Rubber stamps |
| Break-glass kit | Emergency accounts, credentials, procedure, alarms | Separate accounts, hardware keys in a safe | Shares no dependency with the normal path[20] |
Roles, ownership and RACI
Link to section “Roles, ownership and RACI”The resource owner decides eligibility and maximum duration; the access platform team runs broker, issuers, vault, gateway and break-glass kit; security operations answers alarms (SOC Ops); compliance samples evidence, never approves access.
| Activity | Requester | Owner / approver | Access platform | Security ops | Compliance |
|---|---|---|---|---|---|
| Define an entitlement and its tier | I | A | R | C | I |
| Request elevation | R/A | I | I | I | — |
| Approve a Tier 1 request | I | R/A | — | I | — |
| Run the broker and vault | — | I | R/A | C | I |
| Respond to a break-glass alarm | — | I | C | R/A | I |
| Run a review campaign | — | R/A | R | I | C |
| Provide evidence to auditors | — | C | R | C | A |
R = responsible, A = accountable, C = consulted, I = informed. “Owner / approver” is the resource owner or their delegated approvers; the platform runs campaign tooling, the owner answers for outcomes. In a small company one person holds several columns; approver and requester still differ.
Lifecycle
Link to section “Lifecycle”Day 0 designs tiers, entitlements and the break-glass kit; Day 1 converts one team and measures time to access; Day 2 runs reviews, drills and break-glass reviews and automates frequent requests (roadmap).
Operating model and governance
Link to section “Operating model and governance”Access tiers (an Atlas proposal):
| Tier | Examples | Default control | Maximum grant |
|---|---|---|---|
| 0 — control plane | Identity provider, cloud organisation, PAM and certificate authority (CA) admin | Two approvers, phishing-resistant MFA, privileged workstation; reconcile at grant end (why) | 1–2 hours |
| 1 — production write | Database or cluster admin | One approver, or auto-approval for the on-call engineer | 2–4 hours |
| 2 — sensitive read | Production logs with personal data, customer records | Self-activation with a ticket reference | 4–8 hours |
| 3 — non-production | Staging and sandbox admin | Standing access, reviewed annually | — |
Cadences:
- Break-glass use: security operations confirms each use within one business day; the owning team discusses it at its next meeting (Google’s practice[18]).
- Metrics mostly monthly (per-KPI cadence); privileged eligibility quarterly.
- Other access at least annually: the floor in CIS Safeguard 6.8 (Implementation Group 3)[25] and, for New York-regulated financial firms, 23 NYCRR 500.7[26].
- Exceptions: an owner and an end date.
Architecture and workflow
Link to section “Architecture and workflow”Reference architecture
Link to section “Reference architecture”Diagram source (Mermaid)
flowchart TB REQ["Engineer or service: request with reason"] APP["Approvers, on-call schedule, ticket system"] BRK["Access broker: catalogue, policy, approvals"] VLT["Credential vault: checkout, rotation, injection"] ISS["Grant issuers: role binding, group, short-lived certificate"] GW["Session gateway: proxy and recording"] TGT["Targets: cloud, hosts, databases, clusters"] BG["Break-glass kit: separate path"] EVD["Evidence store and SIEM"] REV["Review engine: campaigns"] REQ --> BRK APP --> BRK BRK --> VLT BRK --> ISS VLT --> GW ISS -->|"certificates"| GW GW --> TGT ISS -->|"cloud role bindings"| TGT BG -.-> TGT BRK --> EVD GW --> EVD TGT -->|"audit logs"| EVD BG --> EVD EVD --> REV classDef core fill:#e8f3f2,stroke:#16756f,color:#122029 classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029 classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029 class BRK,ISS,GW core class BG,VLT risk class REQ,APP,TGT,EVD,REV neutral
Text equivalent: A request with a reason goes to the access broker, which applies the catalogue and approval rules using approvers, the on-call schedule and tickets. The broker directs grant issuers and the credential vault. Cloud role bindings take effect directly on the targets; certificate and vault-based connections pass through a recording session gateway. A separate break-glass kit reaches targets without the broker (dashed). Broker, gateway, target audit logs and break-glass feed the evidence store, which feeds the review engine.
End-to-end workflow
Link to section “End-to-end workflow”Diagram source (Mermaid)
sequenceDiagram autonumber participant A as Approver participant B as Access broker participant E as Engineer participant T as Target via gateway E->>B: Request role, 2 h, ticket B->>A: Approve? (context shown) A->>B: Approved Note over B: Logs request and decision B->>E: Grant active until expiry E->>T: Recorded session Note over T: Record streamed to SIEM Note over B: Expiry: grant removed, logged Note over T: Open session ended, if configured B->>A: Weekly review sample
Text equivalent: The engineer requests a role for two hours with a ticket. The broker shows the approver the context, gets approval, logs it and activates the grant. The engineer opens a recorded session through the gateway, which streams the record to the SIEM. At expiry the broker removes and logs the grant; the gateway ends the open session only if configured to. Later the approver’s team samples it.
Happy path: a rule checks the ticket, an approver who did not raise it approves, the grant starts and ends, the session is sampled in review. Exception paths: no approver answers → escalate to a second group after a fixed time (AWS asks for approvals that “operate effectively both inside and outside business hours”[20]); on-call engineer → auto-approve a short Tier 1 grant; broker or identity provider down → break-glass; task done early → end the grant (a Google Cloud PAM preview, October 2026[13]).
What expiry really ends
Link to section “What expiry really ends”Removing a role ends the grant. Sessions and credentials issued during it may continue, removal takes time to spread, and whatever the holder created with it stays.
| Mechanism | What happens at expiry or revocation | What to do |
|---|---|---|
| OpenSSH user certificates | Checked at login only; in Lab 3 a session outlived its certificate | Short certificates, session timeouts, a way to kill sessions |
| AWS role sessions | Leaked temporary credentials give “access for the duration of the session”; “Revoke active sessions” denies every session of the role issued before a chosen time, legitimate ones too[27] | Short sessions; know who can revoke; roles from IAM Identity Center permission sets are revoked there[27] |
| Google Cloud IAM | Eventually consistent: policy changes “Typically 2 minutes, potentially 7 minutes or longer”, group changes possibly “hours or longer”[28] | Direct, time-conditioned bindings (as PAM uses) for urgent revocation |
sudo with NOTAFTER (original sudo; not sudo-rs, Ubuntu’s default since 25.10[29][30]) |
Checked per command; a running command continues unless TIMEOUT ends it[31] |
Allow exact commands that cannot start others (no pager, editor or shell: NOEXEC, sudoedit); set TIMEOUT |
| Teleport | Access lasts until max_duration; certificate lifetime is capped by max_session_ttl[32]; open sessions continue unless disconnect_expired_cert is set[33] |
Short limits for Tier 0–1; set disconnect_expired_cert and client_idle_timeout |
| Roles that can grant roles, sign certificates or create keys | Expiry ends the grant, not what the holder made with it: Google warns that a role-editing grant lets the holder add setIamPolicy to their own custom role and “grant and revoke all IAM roles for the project, even after the grant expires”[34] |
Keep such permissions out of entitlements where possible; alert at once on role, policy and key changes by grant holders; reconcile at grant end |
Practices, frameworks and tools
Link to section “Practices, frameworks and tools”Core practices and playbooks
Link to section “Core practices and playbooks”| Practice | Goal | Trigger | Owner | Verification |
|---|---|---|---|---|
| JIT elevation | No standing privileged roles | A task needs a Tier 0–2 role | Access platform | Grants end on time; standing count falls |
| On-call-linked access | Fast access for responders | Engineer on call for the affected service | Access platform, incident lead | Every auto-approval maps to a shift |
| Break-glass | Recover when normal access fails | Identity provider, broker or approvers down | Security ops | Drill passes; every use reviewed |
| Session brokering and recording | Attributable sessions | Any Tier 0–1 session | Access platform | Recording coverage |
| Vaulting, rotation, injection | Nobody knows shared passwords | Target lacks personal identities | Access platform | Rotation succeeds; no plaintext copies |
| Review campaigns | Remove access nobody needs | Schedule or risk event | Resource owners | Revocations; unused-but-approved count |
| Third-party access | Vendors reach only what they support, only while needed | Support case | Resource owner | Every vendor session maps to a case |
On-call access. Google’s SRE authors describe temporary access granted “during on-call rotations, or via expiring group
memberships”[18]. Teleport’s PagerDuty plugin automates it, approving whoever is on call for a service named in the role’s
pagerduty_services annotation[21]. Preconditions: PagerDuty joins the approval path, since whoever can edit schedules,
escalation policies or user e-mail addresses can make someone “on call” (restrict and log those rights; alert on a schedule change
followed by a request); the Teleport username must be “the email address associated with a PagerDuty account”. The walkthrough
approves “any requests from users on the on-call team” and shows no check that an incident is open[21].
Break-glass. Microsoft’s Entra guidance is a concrete public baseline (October 2026): two or more cloud-only accounts with phishing-resistant authentication unlike normal admins’, excluded from blocking Conditional Access policies, alerted and reviewed on every use, validated “at least every 90 days”[19]. AWS adds that the path must not depend on the normal identity provider and “can be considered a backdoor”[20].
Playbook: ordinary access requests beyond birthright
Link to section “Playbook: ordinary access requests beyond birthright”Most requested access is not privileged (a group, an application role, a data set); the same loan applies with less friction. Microsoft’s entitlement management bundles resources into “access packages” whose policies set “which identities can request, who must approve their access, and when access expires”[35], and can refuse requests incompatible with access already held[36].
- Catalogue: publish what can be requested, each item with an owner and tier (mostly Tier 2–3).
- Default expiry: every requested assignment ends unless renewed (this page suggests 90 to 180 days).
- Separation of duties at request time: block incompatible pairs (raising and approving payments) before approval.
- Approver: the resource owner, not the requester’s manager by default.
- Birthright feedback: when most of a team requests the same item, propose it as birthright to IdentityOps.
Acceptance: no requested assignment without an end date; conflicts blocked, not flagged.
Playbook: vault check-out for shared accounts
Link to section “Playbook: vault check-out for shared accounts”A vault beats JIT roles where the target has no personal identities: network devices, appliances, local administrator, database owner and service accounts. Rotation after use is a product feature: Vault’s LDAP engine “automatically rotates the associated password when the client checks the service account back in”[37]; Windows LAPS can rotate a local administrator password after use, following a grace period[38].
Example status: syntax-checked (bash -n); not executed (needs a Vault server with the LDAP secrets engine). Paths and parameters
follow HashiCorp’s documentation, October 2026[39][40]; the set’s ttl caps any requested lease.
# Two shared admin accounts: 1-hour lease by default, 4 hours with renewal at most;
# only the client that checked an account out may check it in.
vault write ldap/library/netops-admins \
service_account_names="netadm1@example.com,netadm2@example.com" \
ttl=1h max_ttl=4h disable_check_in_enforcement=false
vault write -f ldap/library/netops-admins/check-out ttl=30m # one account + password
vault write -f ldap/library/netops-admins/check-in # early return; rotates
Diagram source (Mermaid)
flowchart TB
R["Request with reason"]
T0{"Tier 0 credential?"}
DC["Second person approves"]
CO["Exclusive check-out to one holder, short lease"]
U["Use, injected by the gateway where possible"]
CI["Check-in, or lease ends"]
ROT["Vault rotates the password"]
OK{"Dependants still work?"}
RDY["Available for the next check-out"]
FIX["Update the missed dependant; add it to discovery"]
R --> T0
T0 -- yes --> DC
T0 -- no --> CO
DC --> CO
CO --> U
U --> CI
CI --> ROT
ROT --> OK
OK -- yes --> RDY
OK -- no --> FIX
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029
classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029
class CO,U,CI,ROT core
class T0,OK decision
class FIX risk
class R,DC,RDY neutral
Text equivalent: A request with a reason goes to the vault; a Tier 0 credential also needs a second person (this page’s recommendation). One holder checks the credential out for a short lease and uses it, injected by the gateway where possible so the holder never sees it[22]. At check-in or lease end the vault rotates the password. If every dependant still works, the credential is available again; if a service, task or file still held the old password, fix it and add it to discovery.
Playbook: retire a standing admin group
Link to section “Playbook: retire a standing admin group”- Prerequisites: MFA enforced; eligible assignments supported; break-glass tested (a sign-in raises an alert).
- Measure members and last use of admin rights; remove those unused for 90 days after showing them the request path.
- Convert the rest to eligible (two- to four-hour maximum, MFA, ticket reference); publish the path, wait and on-call exception.
- Watch two weeks: time to access, denials, break-glass use. Rollback: raise the maximum or add on-call auto-approval; never restore standing membership.
Methods, standards and frameworks
Link to section “Methods, standards and frameworks”| Source | Kind | What it asks for |
|---|---|---|
| NIST SP 800-53 Rev. 5[9] | Normative for US federal systems; widely adopted | AC-2(2) automatic removal of temporary and emergency accounts (not accounts of last resort); AC-2(7) monitor and revoke privileged roles; AC-5 separation of duties; AC-6(5), (7), (9) restrict, review, log privilege; AU-14 session audit |
| CISA Zero Trust Maturity Model 2.0[11] | Maturity guidance | From “permanent access with periodic review” to automated just-in-time access |
| NSA and CISA ESF IAM guidance[1] | Recommended practice | PAM and JIT for privileged accounts; separate admin accounts; owners who “periodically review and reconcile accounts and privileges” |
| CIS Controls v8.1[41][25] | Prioritised baseline | 5.4 dedicated admin accounts; 6.1, 6.2 granting and revoking processes; 6.5 MFA for admin access; 6.8 reviews at least annually (Implementation Group 3) |
| 23 NYCRR 500.7[26] | Regulation, New York financial services | Limit privileged accounts and their use; annual reviews; class A companies monitor privileged activity and run PAM |
| Building Secure and Reliable Systems, ch. 5[18] | Practitioner book (Google) | Temporary access, MPA, structured justification, breakglass, auditing culture |
Other sector rules (payment cards, health, government contracts) were not checked; map obligations with ComplianceOps.
Tooling landscape
Link to section “Tooling landscape”Examples, not a shortlist; checked against documentation in October 2026 (CyberArk: a 2019 certification and its current product page).
| Category | Verified examples | Strengths | Limits |
|---|---|---|---|
| Cloud-native JIT | Entra PIM[12]; Google Cloud PAM[13]; AWS IAM Identity Center with validated partners or the TEAM sample[14][15] | No extra infrastructure; native audit logs | One cloud each; licence or tier requirements |
| Infrastructure access platforms | Teleport[42]; HashiCorp Boundary[22] | One path to hosts, clusters and databases; short-lived credentials; recording | Another Tier 0 system to run |
| PAM suites | CyberArk[43] (vault, rotation, session manager, web console), marketed by Palo Alto Networks as Idira in October 2026[44] | Vaulting and rotation for shared and legacy accounts | Usually a large deployment (our judgement); architecture cited from 2019 |
| SSH certificate authorities | Vault SSH secrets engine[45]; plain OpenSSH CA[46] | No standing keys; validity inside the credential | Ending sessions needs extra work |
| Request and review engines | Entra entitlement management[35] and access reviews[47]; IGA platforms | Catalogues, expiry, campaigns, auto-apply | Rubber stamps if poorly designed |
| Request front ends | Teleport plugins for Slack, Jira, ServiceNow, Teams, PagerDuty and others[48] | Requests where people already work | Plugin credentials are sensitive |
Tool comparison matrix
Link to section “Tool comparison matrix”Documented facts, October 2026; “not checked” means the opened source did not say.
| Criterion | Entra PIM | Google Cloud PAM | Teleport | Boundary |
|---|---|---|---|---|
| Scope | Entra roles, Azure resource roles, PIM for Groups[12] | Projects, folders, organisations via IAM roles[13] | Teleport roles and individual resources[42] | SSH, RDP and TCP targets[22] |
| Approval | Optional; MFA, justification and an unverified ticket field on activation[12][49] | Optional; more than one approval is a preview feature[13] | Approval thresholds with filters; no self-approval[42][32] | Not checked |
| Time limit | Activation maximum 1–24 hours[49] | maxRequestDuration[34] |
max_duration, at most 14 days[32] |
Fixed session time limit[24] |
| Recording | Not among PIM’s listed features[12] | Not listed; grant events go to Cloud Audit Logs[13] | SSH, Kubernetes, desktop, database[23] | SSH and RDP[24] |
| Edition notes | Requires licences[12] | Multiple approvals need Security Command Center Enterprise or Premium[34] | Access Requests Enterprise-only; Community gets a CLI preview[42] | Recording needs HCP Boundary Plus or Boundary Enterprise (v0.21 docs)[50] |
Automation and AI
Link to section “Automation and AI”Automate ticket checks, on-call approvals, expiry and review decisions. Microsoft’s reviews recommend “Deny” after 30 days without sign-in[51]; Google Cloud previews service accounts as approvers that validate tickets “directly from ITSM systems”[13]. No opened source documents an AI system that safely decides privileged access; a language model may summarise a request or recording for a human, not approve Tier 0–1.
Non-human borrowers and approvers. The five fields apply unchanged to a workload identity. Google Cloud PAM lets service
accounts and agent identities “self-elevate and assume roles only when needed for automated tasks” instead of holding roles, and, in
Preview as of October 2026, act as approvers[13][34]; Microsoft’s entitlement management can, in preview, assign
groups, API permissions and roles to agent IDs[35]. An automated approver is Tier 0: whoever controls its credentials
can grant all it may approve, so scope it narrowly (one entitlement, a where predicate), alert on its decisions, and keep a human
approver for Tier 0.
AccessOps in practice
Link to section “AccessOps in practice”Reference implementation
Link to section “Reference implementation”Artefact 1 — Teleport roles for requesting, reviewing and auto-approving database access.
Example status: YAML syntax-checked; fields from Teleport v18 documentation[32][21][33]; role version v7 (v18 docs use v8, which needs v18 agents; v7 is supported[33]); not applied to a cluster. Access Requests need Teleport Enterprise.
# The privileges themselves (designed with IAMOps); nobody holds this role permanently.
kind: role
version: v7
metadata:
name: prod-db-admin
spec:
options:
max_session_ttl: 2h
require_session_mfa: true
disconnect_expired_cert: true # end open sessions when the certificate expires
client_idle_timeout: 15m
allow:
db_labels:
env: prod
db_users: ['dba']
db_names: ['*']
---
# Engineers may request it with a ticket; one reviewer approves; 4 h at most.
kind: role
version: v7
metadata:
name: prod-db-requester
spec:
allow:
request:
roles: ['prod-db-admin']
max_duration: 4h
reason:
mode: 'required'
prompt: 'Ticket or incident ID, and what you will change'
thresholds:
- approve: 1
deny: 1
annotations:
pagerduty_services: ['payments-db']
---
# Database leads may review those requests (users cannot approve their own).
kind: role
version: v7
metadata:
name: prod-db-reviewer
spec:
allow:
review_requests:
roles: ['prod-db-admin']
---
# The PagerDuty plugin may approve only requests tied to the payments-db service.
kind: role
version: v7
metadata:
name: access-plugin-pagerduty
spec:
allow:
rules:
- resources: ['access_request']
verbs: ['list', 'read']
- resources: ['access_plugin_data']
verbs: ['update']
review_requests:
roles: ['prod-db-admin']
where: 'contains(request.system_annotations["pagerduty_services"], "payments-db")'
The plugin approves only when the requester is on call for payments-db[21]; its credentials are Tier 0, and PagerDuty
administration joins the approval path (on-call access).
Artefact 2 — a Google Cloud PAM entitlement for Tier 1 database administration.
Example status: YAML syntax-checked against the documented schema[34]; command not executed (needs a project with PAM);
the documented command is in the gcloud alpha surface as of October 2026.
# entitlement.yaml — Tier 1: one db-leads approver; at most one hour; reason required.
privilegedAccess:
gcpIamAccess:
resourceType: cloudresourcemanager.googleapis.com/Project
resource: //cloudresourcemanager.googleapis.com/projects/PROJECT_ID
roleBindings:
- role: roles/cloudsql.admin
maxRequestDuration: 3600s
eligibleUsers:
- principals:
- group:db-oncall@example.com
approvalWorkflow:
manualApprovals:
requireApproverJustification: true
steps:
- approvalsNeeded: 1
approvers:
- principals:
- group:db-leads@example.com
requesterJustificationConfig:
unstructured: {}
additionalNotificationTargets:
adminEmailRecipients:
- security-alerts@example.com
gcloud alpha pam entitlements create prod-sql-breakfix \
--entitlement-file=entitlement.yaml \
--location=global \
--project=PROJECT_ID
Required approvals must not exceed the approving group’s members, “Otherwise, grants will remain perpetually stuck”[34].
For Tier 0, approvalsNeeded: 2 or a second step are available “only if the Security Command Center Premium or Enterprise tier is
activated”[34]. Manage IAM with non-authoritative Terraform resources so PAM’s bindings survive[13].
Artefact 3 — alert on every break-glass sign-in, adapted from Microsoft’s Azure Monitor sample (threshold above zero, severity 0)[19]:
Example status: query text from Microsoft’s documentation with placeholder GUIDs; not executed.
SigninLogs
| where UserId == "00000000-0000-0000-0000-000000000001"
or UserId == "00000000-0000-0000-0000-000000000002"
| project TimeGenerated, UserPrincipalName, UserId, IPAddress,
ResultType, ResultDescription
Artefact 4 — Entra PIM role settings for one directory role, through Microsoft Graph. PIM keeps a role’s settings as rules in a
policy, changed with PATCH requests that answer 204 No Content[52]. First read the role’s policyId, then patch its rules:
Example status: requests and bodies follow Microsoft’s documented examples (page dated 2025-08-29) with this page’s values[52]; JSON syntax-checked; not sent to a tenant (needs Privileged Role Administrator).
GET /v1.0/policies/roleManagementPolicyAssignments?$filter=scopeId eq '/'
and scopeType eq 'DirectoryRole' and roleDefinitionId eq '<role template id>'
PATCH /v1.0/policies/roleManagementPolicies/<policyId>/rules/<rule id>
Rule Expiration_EndUser_Assignment: an activation lasts at most two hours (the setting allows one to 24[49]):
{
"@odata.type": "#microsoft.graph.unifiedRoleManagementPolicyExpirationRule",
"id": "Expiration_EndUser_Assignment",
"isExpirationRequired": true,
"maximumDuration": "PT2H",
"target": {
"@odata.type": "microsoft.graph.unifiedRoleManagementPolicyRuleTarget",
"caller": "EndUser",
"operations": ["All"],
"level": "Assignment",
"inheritableSettings": [],
"enforcedSettings": []
}
}
Rule Enablement_EndUser_Assignment: MFA, a justification and a ticket number at activation:
{
"@odata.type": "#microsoft.graph.unifiedRoleManagementPolicyEnablementRule",
"id": "Enablement_EndUser_Assignment",
"enabledRules": ["Justification", "MultiFactorAuthentication", "Ticketing"],
"target": {
"@odata.type": "microsoft.graph.unifiedRoleManagementPolicyRuleTarget",
"caller": "EndUser",
"operations": ["All"],
"level": "Assignment",
"inheritableSettings": [],
"enforcedSettings": []
}
}
Preconditions[49]: the ticket field is “information-only” (“Correlation with information in any ticketing system isn’t
enforced”), so the ticket check is yours to build; a third rule, Approval_EndUser_Assignment, names approvers (primaryApprovers, a
user or group)[52]. Microsoft recommends at least two; with none named, approval required and every Global and Privileged
Role Administrator only eligible, the runbook’s lockout follows.
Hands-on labs
Link to section “Hands-on labs”Labs 1 and 3 were executed on 2026-10-16 (Ubuntu 20.04, Python 3.8.10, OpenSSH 8.2p1) and Lab 2’s checks on 2026-10-17 with sudo 1.8.31; installing the rule was not. Output is real; data is synthetic.
Lab 1 (beginner): find rubber stamps in an access review
Link to section “Lab 1 (beginner): find rubber stamps in an access review”Objective: from a review export, compute completion and revocation rates, list privileged access approved though unused, and flag reviewers whose pattern suggests no real review. Prerequisites: Python 3.8+. Cost and risk: none.
- Save the export as
decisions.csv(emptydays_since_usemeans never used):
Example status: executed on 2026-10-16 as input to the script below.
entitlement,privileged,holder,reviewer,decision,seconds,days_since_use
prod-db-admin,yes,ana,raj,approve,4,210
prod-db-admin,yes,ben,raj,approve,3,2
prod-db-admin,yes,chen,raj,approve,5,
k8s-cluster-admin,yes,dev,raj,approve,4,95
k8s-cluster-admin,yes,eli,raj,approve,3,11
billing-export,no,fay,mia,approve,48,5
billing-export,no,gus,mia,revoke,61,180
crm-read,no,hal,mia,approve,35,1
crm-read,no,ivy,mia,revoke,52,400
aws-org-admin,yes,jon,leo,approve,90,30
aws-org-admin,yes,kim,leo,revoke,75,120
vault-root-ops,yes,lou,leo,none,,
siem-admin,yes,max,leo,approve,66,3
- Save the script as
review_report.py:
Example status: executed on 2026-10-16 (Python 3.8.10).
#!/usr/bin/env python3
"""Access-review report: completion, revocations, unused approvals, rubber stamps."""
import csv
import statistics
import sys
from collections import defaultdict
UNUSED_DAYS = 90 # approved but unused for longer than this is suspicious
FAST_SECONDS = 10 # median decision time below this suggests no real review
MIN_DECISIONS = 5 # only judge reviewers with enough decisions
def main(path):
with open(path, newline="") as handle:
rows = list(csv.DictReader(handle))
decided = [r for r in rows if r["decision"] in ("approve", "revoke")]
revoked = [r for r in decided if r["decision"] == "revoke"]
print(f"items: {len(rows)} decided: {len(decided)} "
f"({100 * len(decided) / len(rows):.0f}% complete)")
share = 100 * len(revoked) / len(decided)
print(f"revoked: {len(revoked)} ({share:.0f}% of decided)")
print("approved but unused (or never used) for more than", UNUSED_DAYS, "days:")
for r in decided:
unused = r["days_since_use"] == "" or int(r["days_since_use"]) > UNUSED_DAYS
if r["decision"] == "approve" and unused:
flag = "PRIVILEGED " if r["privileged"] == "yes" else ""
last = r["days_since_use"] or "never"
print(f" {flag}{r['entitlement']} held by {r['holder']} (last use: {last})")
by_reviewer = defaultdict(list)
for r in decided:
by_reviewer[r["reviewer"]].append(r)
print("reviewer signals:")
for name, items in sorted(by_reviewer.items()):
approve_rate = sum(r["decision"] == "approve" for r in items) / len(items)
median_s = statistics.median(int(r["seconds"]) for r in items)
stamp = (len(items) >= MIN_DECISIONS and approve_rate == 1.0
and median_s < FAST_SECONDS)
note = " <- possible rubber stamp" if stamp else ""
print(f" {name}: {len(items)} decisions, {approve_rate:.0%} approved, "
f"median {median_s:g} s{note}")
pending = [r["entitlement"] + "/" + r["holder"]
for r in rows if r["decision"] == "none"]
print("undecided:", ", ".join(pending) or "none")
return 1 if pending else 0
if __name__ == "__main__":
sys.exit(main(sys.argv[1]))
- Run
python3 review_report.py decisions.csv.
Expected output (exit code 1: one item is undecided):
items: 13 decided: 12 (92% complete)
revoked: 3 (25% of decided)
approved but unused (or never used) for more than 90 days:
PRIVILEGED prod-db-admin held by ana (last use: 210)
PRIVILEGED prod-db-admin held by chen (last use: never)
PRIVILEGED k8s-cluster-admin held by dev (last use: 95)
reviewer signals:
leo: 3 decisions, 67% approved, median 75 s
mia: 4 decisions, 50% approved, median 50 s
raj: 5 decisions, 100% approved, median 4 s <- possible rubber stamp
undecided: vault-root-ops/lou
Validation: raj approved five privileged items in a median of 4 seconds, three of them unused. Troubleshooting: KeyError
means a header differs; ValueError a non-numeric seconds on a decided row. Interpretation: a flag is a question, not proof;
the thresholds are this lab’s (Microsoft’s recommendations use 30 days of inactivity[51]; CIS, 45 days for dormant
accounts[41]). Teardown: delete the two files.
Lab 2 (intermediate): a time-bound, recorded sudo grant
Link to section “Lab 2 (intermediate): a time-bound, recorded sudo grant”Objective: a sudoers rule with a start and end time, two exact commands that cannot start a shell, a command timeout and
input/output logging. Prerequisites: the original sudo (sudo.ws) 1.8.20 or later with cvtsudoers (added in 1.8.23)[53]; a
disposable Linux VM for the optional install. Check which sudo you have first. Ubuntu 25.10 and 26.04 LTS install sudo-rs by
default (26.04: 0.2.13), which as of October 2026 has no NOTBEFORE/NOTAFTER, TIMEOUT, I/O logging, sudoreplay or
cvtsudoers[29][54][30]. If sudo --version reports sudo-rs, switch to sudo.ws with
update-alternatives --config sudo[54] or use another distribution. Cost and risk: none for the checks; a broken
file in /etc/sudoers.d/ can lock you out of sudo, so install only on a VM after visudo -c.
- Save the rule as
90-jit-alice(a broker would write it and delete it after expiry):
Example status: syntax-checked with visudo -c -f and parsed with cvtsudoers on 2026-10-17 (sudo 1.8.31).
# JIT grant CHG-4821: alice may restart nginx and read its log on web-01 until 18:00 UTC.
# Written by the access broker; removed by the broker after expiry.
alice web-01 = (root) NOTBEFORE=20261016140000Z NOTAFTER=20261016180000Z \
TIMEOUT=15m LOG_INPUT: LOG_OUTPUT: /usr/bin/systemctl restart nginx, \
NOEXEC: /usr/bin/journalctl --no-pager -u nginx
- Check and parse it without installing:
Example status: executed on 2026-10-17 as a normal user.
visudo -c -f 90-jit-alice
cvtsudoers -f json 90-jit-alice
Expected output: 90-jit-alice: parsed OK, then JSON with one entry per command; both carry "command_timeout": 900,
"notbefore": "20261016140000Z", "notafter": "20261016180000Z", "log_input": true and "log_output": true; the journalctl
entry adds "noexec": true. A malformed NOTAFTER=2026-10-16 fails with invalid notafter value; the format is Generalized Time,
yyyymmddHHMMSSZ[31].
- Not executed here — disposable VM only:
sudo install -m 0440 90-jit-alice /etc/sudoers.d/, then, as root or a user withALL(sudo restricts-Uto them[55]), runsudo -l -U alice /usr/bin/systemctl restart nginxbefore, during and after the window. Validation: the command is allowed only inside the window; outside it sudo exits with status 1[55]. Plainsudo -l -U alicelists the rule at any time, with itsNOTBEFOREandNOTAFTERdates[56]. Sessions are logged under/var/log/sudo-ioby default and listed withsudoreplay -l[57].
Troubleshooting: if visudo -c rejects NOTBEFORE or cvtsudoers is missing, you are on sudo-rs (see Prerequisites); if
sudo -l shows nothing, check the host name in the rule. Lesson: expiry is real only if no granted command can start another program: a root pager, editor or shell outlives NOTAFTER
and can plant lasting access. Plain journalctl opens a pager, “a security boundary” under sudo in systemd’s manual; systemd 245
(Ubuntu 20.04) lacks the later automatic secure mode[58]. Hence --no-pager, NOEXEC: and sudoedit[31]. Forward
logs off the host.
Teardown: delete the file (and /etc/sudoers.d/90-jit-alice on the VM).
Lab 3 (advanced): short-lived SSH certificates and what expiry does not end
Link to section “Lab 3 (advanced): short-lived SSH certificates and what expiry does not end”Objective: issue SSH user certificates from a CA, as Vault’s SSH engine does[45], and observe what a validity period ends.
Prerequisites: OpenSSH 8.x on a Linux machine you control. Cost and risk: low; a temporary, unprivileged sshd listens only
on 127.0.0.1:22422 and is stopped at the end. Do not run it on a shared production host without permission.
- Create a CA, a key and a certificate valid for the next ten minutes (back-dated five minutes for clock skew), then an
sshdthat trusts only the CA:
Example status: executed on 2026-10-16 (OpenSSH 8.2p1); fingerprints and times will differ on your machine.
mkdir -p ~/ssh-ca-lab && cd ~/ssh-ca-lab
ssh-keygen -q -t ed25519 -N '' -C 'lab-user-ca' -f user_ca # the CA
ssh-keygen -q -t ed25519 -N '' -C 'operator' -f id_operator # the engineer's key
# Valid from 5 min ago (clock skew) to 10 min from now; local account; change ID.
ssh-keygen -s user_ca -I "operator@CHG-4821" -n "$(whoami)" -V -5m:+10m \
-O clear -O permit-pty id_operator.pub
ssh-keygen -L -f id_operator-cert.pub
# A throwaway sshd that trusts only this CA (no authorized_keys at all).
ssh-keygen -q -t ed25519 -N '' -f host_key
cat > sshd_config <<CFG
Port 22422
ListenAddress 127.0.0.1
HostKey $PWD/host_key
PidFile $PWD/sshd.pid
UsePAM no
PasswordAuthentication no
AuthorizedKeysFile none
TrustedUserCAKeys $PWD/user_ca.pub
StrictModes no
LogLevel VERBOSE
CFG
# Absolute paths: sshd re-executes itself for each connection.
/usr/sbin/sshd -f "$PWD/sshd_config" -E "$PWD/sshd.log"
ssh -p 22422 -o IdentitiesOnly=yes -o StrictHostKeyChecking=accept-new \
-o UserKnownHostsFile=known_hosts -i id_operator 127.0.0.1 \
'echo "logged in as $(whoami)"'
Expected output (abridged):
Signed user key id_operator-cert.pub: id "operator@CHG-4821" serial 0 for ubuntu
valid from 2026-10-16T23:29:09 to 2026-10-16T23:44:09
Key ID: "operator@CHG-4821"
Valid: from 2026-10-16T23:29:09 to 2026-10-16T23:44:09
Principals:
ubuntu
Extensions:
permit-pty
logged in as ubuntu
-
Validation — three refusals. Try the private key without its certificate (copied elsewhere), a copy signed with
-V -2h:-1h, and one signed for principalroot. All three gotPermission denied (publickey,keyboard-interactive);sshd.logrecordedCertificate invalid: expiredandCertificate invalid: name is not a listed principal.TrustedUserCAKeysalso refuses certificates without principals[59]. -
The lesson — expiry is checked at login. Sign a one-minute certificate and hold a session open past its end:
Example status: executed on 2026-10-16.
cp id_operator id_short && cp id_operator.pub id_short.pub
ssh-keygen -s user_ca -I "operator@CHG-4822" -n "$(whoami)" -V -1m:+1m id_short.pub
ssh -p 22422 -o IdentitiesOnly=yes -o UserKnownHostsFile=known_hosts -i id_short \
127.0.0.1 'date -u +%T; sleep 80; date -u +%T; echo "still open after expiry"'
ssh -p 22422 -o IdentitiesOnly=yes -o UserKnownHostsFile=known_hosts -i id_short \
127.0.0.1 true
Expected output: the certificate expired at 23:35:09; the session printed 23:34:09, then 23:35:29 and still open after expiry, so it outlived the certificate by 20 seconds; the second login was refused. Pair short certificates with session
timeouts and a way to end sessions.
Troubleshooting: kex_exchange_identification: ... Connection reset by peer means sshd was started with a relative -f path;
Permission denied with a valid certificate usually means a principal that does not match the login name. Teardown:
kill "$(cat sshd.pid)"; delete ~/ssh-ca-lab.
Use cases and scenarios
Link to section “Use cases and scenarios”| Scenario | Source | What happened | AccessOps lesson | Success measure |
|---|---|---|---|---|
| Stolen session meets standing privilege | CircleCI, 2023[60] | A stolen “2FA-backed SSO session” carried an engineer’s routine right to create production tokens; CircleCI then shut “down production access to nearly all employees” | No routine production rights; step-up authentication at elevation | Nobody holds token-issuing rights between tasks |
| Too many people can use powerful tools | NYDFS on Twitter, 2020[61] | “over 1,000 Twitter employees still had access” to account tools reached by phishing; Twitter then cut access “even though it caused a slowdown of some job functions” | Shrink eligibility; second-person approval for high-risk actions | Eligible population and p90 (90th-percentile) time to access, together |
| Third-party support access | Okta, 2022[62] | A vendor workstation was controlled for 25 minutes; 366 potentially affected customers narrowed to two tenants; Okta said it would manage vendors’ devices that reach its support tools | Managed vendor devices; scoped tools; logs that answer “who saw what” | Every vendor session maps to a case and a log |
| Emergency access in a total outage | Meta, 2021[63] | Engineers had to enter hardened data centres; “it took extra time to activate the secure access protocols needed to get people onsite”; the author judged the trade-off “worth it” | Choose the trade-off deliberately; rehearse emergency paths independent of the failed system | Drill time to access |
| Provider access to customer data | Microsoft Customer Lockbox[64] | A request names tenant, service request number, start time and duration; Microsoft, then the customer, approve; access lasts at most 4 hours; unanswered requests expire after 12 hours (docs dated 2025-02-03) | A model for vendor access: case-bound, time-bound, customer-approved, audited | Every provider access has a customer approval record |
Meta’s case is physical access, kept for the trade-off; the other responses cost speed, so measure it.
Measure, govern, pay
Link to section “Measure, govern, pay”Metrics and KPIs
Link to section “Metrics and KPIs”Definitions and targets are Atlas proposals; no standard prescribes them.
| KPI | Definition / formula | Pitfall | Cadence |
|---|---|---|---|
| Standing privileged assignments | Tier 0–1 assignments active outside a time-bound grant, break-glass excluded | A group called “eligible” without enforced activation | Monthly |
| JIT coverage | Tier 0–1 roles reachable only by time-bound grants ÷ all Tier 0–1 roles | Counting roles, not holders | Quarterly |
| Time to access (p50, p90) | Grant start − request time, per tier | Averages hide the 03:00 wait | Monthly |
| Grant utilisation | Minutes with an open privileged session ÷ minutes granted | Sign-in is not use | Monthly |
| Break-glass review lag | Confirmation time − use time; share confirmed by security operations within one business day | Zero uses may be a broken alarm | Weekly |
| Recording coverage | Recorded Tier 0–1 sessions ÷ all Tier 0–1 sessions | Paths around the gateway are invisible to it | Monthly |
| Review quality | Revocation rate; approved-but-unused ÷ approved; decisions by flagged reviewers | 100 % completion is the vanity metric | Per campaign |
Quality, security, privacy and compliance
Link to section “Quality, security, privacy and compliance”- The access system is the crown jewel. Whoever administers the broker, CA or vault can grant anything: separation of duties (AC-5[9]); broker policy changes need two people.
- Self-approval and collusion. Check that the tool refuses self-approval (Teleport does[42]); the Twitter report suggests second-employee approval for high-risk functions[61].
- Stolen sessions. MFA at activation (PIM can[12]) and per session where possible (
require_session_mfa[33]). - Recording is not complete evidence. Users “can conceal terminal commands by encoding them (e.g., using base64)” or by running scripts[23]; basic session logging only keeps “the honest people honest”[18]. Prefer narrow tools and structured logs.
- Privacy. Recordings hold personal data and secrets. NIST’s session-audit control (AU-14) says to act “in consultation with legal counsel” and to activate it “under well-defined situations”[9], so recording every admin session is an organisational choice with a documented purpose and retention; rules differ by country. Set retention and viewers with PrivacyOps.
- Log integrity: store evidence where target admins cannot edit it[24]. Regulation varies by sector and country; this page is not legal advice.
Cost, capacity and sustainability
Link to section “Cost, capacity and sustainability”- Licences and tiers (October 2026): see the edition row of the comparison matrix; Entra access reviews and entitlement management also need Entra ID Governance or Entra Suite, some capabilities P2[47].
- Recording storage: Boundary estimates about 20 KB per minute of simple shell activity, and transfers cost about their own size[24]. Illustrative: 2,000 sessions a month × 30 minutes × 20 KB ≈ 1.2 GB; one recorded 5 GB export costs more.
- People’s time: 3,000 review items at a careful 30 seconds is 25 hours; at 4 seconds, a rubber stamp. Sustainability is not material here.
Assurance of the operating model
Link to section “Assurance of the operating model”- Reconcile daily, and at grant end for Tier 0: a privileged assignment, key or role change the broker did not grant is drift (what expiry really ends)[13].
- Canary grant: a daily synthetic grant; alert if it still works after expiry plus the propagation margin[28].
- Drill break-glass at least every 90 days[19] and in incident and recovery exercises[20].
- Sample sessions weekly against their reasons; peers with context spot misuse best[18].
When things go wrong
Link to section “When things go wrong”Common failures and troubleshooting
Link to section “Common failures and troubleshooting”| Symptom | Likely cause | Diagnosis | Remediation and prevention |
|---|---|---|---|
| Requests wait forever | Approvers gone, or more approvals required than approvers; grants “remain perpetually stuck”[34] | Inspect the approver list and count | Fix the set; validate entitlement configs in CI; alert on stale requests |
| Nobody can activate admin roles | All admin roles eligible with approval and no approvers, or the identity provider is down[19] | Provider status; PIM role settings | Runbook below; never let approver lists empty |
| Revoked user still acts | Session issued before revocation; propagation; nested groups; access created during the grant[28][27] | Session issue and revocation times; the grant’s audit log | Revoke sessions (on AWS, every session of the role) or kill them at the gateway; remove what the grant created |
| A service fails after a password rotation | A service, scheduled task or file still uses the old password | Failed logins by that account after rotation | Update it; discover dependencies first (CyberArk scans for accounts “and their dependencies”[43]); rotate one target first |
| JIT access vanishes minutes after the grant | Infrastructure as code rewrites IAM authoritatively[13] | Audit log shows the pipeline replacing the policy | Non-authoritative resources; review rule for IAM code |
| Break-glass use raised no alarm | Log export or alert rule broken | Drill and trace the event | Repair; drill at least every 90 days[19] |
| Engineers use shared keys, not the broker | The official path is slower than the incident | Human logins under non-human accounts | On-call path; remove keys; track p90 |
| A review removed a whole team’s access | No-response default “Remove access” with auto-apply; Microsoft warns access “could potentially be revoked”[65] | Campaign settings | Restore from the record; choose defaults per resource |
Worked runbook: nobody can activate admin roles
Link to section “Worked runbook: nobody can activate admin roles”- Declare an incident (IncidentOps); confirm the failure mode: provider healthy, MFA working, no approvers.
- Retrieve the kit: two authorised people (our recommendation) take a break-glass FIDO2 hardware security key (a phishing-resistant passkey) from the safe to the secure workstation Microsoft calls for[19]. Log the time.
- Sign in and expect the alarm; security operations confirms the use is expected. No alarm is a second failure.
- Make the smallest change: add a current approver group, or give a named administrator a time-bound assignment ending today. Never fix the original outage with the break-glass account.
- Verify that a normal administrator can activate the role through PIM.
- Exit: sign out, return the key, rotate or re-seal credentials (AWS’s advice[20]).
- Review within one business day (security operations), then at the team’s next meeting: match every audit-log action of the account to the timeline (Microsoft asks for a review after any use[19]).
- Prevent: alert when a Tier 0 approver list has under two active members; add the scenario to the drill.
Contingency: if the first account fails, use the second (different method and location); if both fail, only provider account recovery is left.
Anti-patterns and myths
Link to section “Anti-patterns and myths”- “We have a PAM tool, so it is managed.” Week-long checkouts are standing privilege with extra steps; keep leases short and rotate on check-in (vault check-out).
- “Just-in-time means attackers can’t use it.” A session stolen during a grant has the grant’s rights (CircleCI).
- “Every request needs a manager’s approval.” Managers approve what they cannot judge; hard approvals breed generic justifications[18]. Rules for low tiers, context for high ones.
- Break-glass as convenience. AWS’s anti-pattern: users who misuse emergency access “as they find it easier to make changes directly than submit changes through a pipeline”[20]; weekly use means the normal path is broken.
- Reviews as the main control. CISA puts “permanent access with periodic review” at the Traditional stage[11]. Recording everything, watching nothing: unsampled recordings deter nobody.
- Myth: zero standing privileges means zero administrators. Break-glass accounts stay permanent by design[19].
Deciding and adopting
Link to section “Deciding and adopting”When to use and when not to use
Link to section “When to use and when not to use”Use the full model when several people hold production or control-plane rights, vendors need production access, or someone asks for evidence. Scale it down for small teams: three engineers sharing one cloud account gain little by approving each other. Start with separate admin accounts (CIS 5.4[41]), MFA for admin access (CIS 6.5[25]), central logs and two tested break-glass accounts; then time-bound activation, then approvals for Tier 0.
Do not start here when identities are not under control (shared accounts, no SSO, no leaver process): fix that in IdentityOps first, because JIT on shared accounts attributes nothing. Nor to excuse a task that should be automated (zero touch).
Hidden costs: Tier 0 systems to run, approver cover, drills, a retention decision on recordings.
Decision framework
Link to section “Decision framework”Diagram source (Mermaid)
flowchart TB
Q1{"Normal path working?"}
BG["Break-glass, alarmed, reviewed"]
Q2{"Can automation do it?"}
TOOL["Build the tool; no elevation"]
Q3{"Which tier?"}
T0["Two approvers, strong MFA"]
T1["One approver or on-call rule"]
Q4{"Needed daily?"}
T2["Self-activate with ticket"]
T2S["Narrow standing role, reviewed"]
Q1 -- no --> BG
Q1 -- yes --> Q2
Q2 -- yes --> TOOL
Q2 -- no --> Q3
Q3 -- "Tier 0" --> T0
Q3 -- "Tier 1" --> T1
Q3 -- "Tier 2" --> Q4
Q3 -- "Tier 3" --> T2S
Q4 -- no --> T2
Q4 -- yes --> T2S
classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029
class Q1,Q2,Q3,Q4 decision
class TOOL,T0,T1,T2,T2S core
class BG risk
Text equivalent: If the normal access path is down, use break-glass, alarmed and reviewed. If automation can do the action, build it. Otherwise decide by tier: Tier 0 (control plane) needs two approvers and phishing-resistant MFA, for one to two hours; Tier 1 (production write) one approver or the on-call rule, for two to four hours. Tier 3 (non-production), and Tier 2 (sensitive read) access the same people need daily, get a narrow, reviewed standing role; other Tier 2 access self-activates with a ticket for four to eight hours.
Durations follow the tier proposal. A daily Tier 0–1 need is a design signal (principle 9): build the tool or pre-approve a narrow rule, never a standing role.
Maturity model
Link to section “Maturity model”| Level | Observable behaviour | Exit criterion |
|---|---|---|
| 0 — Ad hoc | Shared admin passwords; access by chat; no review | An inventory of privileged roles and holders exists |
| 1 — Inventoried | Named admin accounts, MFA, annual review, break-glass defined | Break-glass drill passes; first roles time-bound |
| 2 — Time-bound | Tier 0–1 roles eligible, activated with MFA and reason, expiring automatically; requested access has end dates | Approval and on-call rules live; Tier 0–1 recorded |
| 3 — Just-in-time by default | Tiered approval, on-call auto-approval, recorded sessions, reviews aimed at unused access | Standing Tier 0–1 only break-glass; daily reconciliation |
| 4 — Task-scoped | Tools do most routine work; rare, narrow elevation with MPA at Tier 0 | Sustain; feed every elevation back into tooling |
Adoption roadmap: 30/60/90 days
Link to section “Adoption roadmap: 30/60/90 days”| Window | Actions | Milestone / metric |
|---|---|---|
| Days 1–30 | Inventory Tier 0–1 roles and holders; set up and drill two break-glass accounts with alerts; publish tiers; choose a pilot team | Baseline standing count; drill passed |
| Days 31–60 | Make the pilot’s roles eligible with reason and MFA; add on-call auto-approval; send logs to the SIEM | Pilot standing count near zero; p90 time to access measured |
| Days 61–90 | Tier 0 with two approvers; record Tier 0–1 sessions; first review aimed at unused privileged access; daily reconciliation | Standing Tier 0–1: break-glass and documented exceptions only |
Quick wins: remove unused admin rights, alert on break-glass sign-ins, fill empty approver lists. Dependencies: IdentityOps (MFA), IAMOps (roles worth activating).
Toolkit
Link to section “Toolkit”Checklists
Link to section “Checklists”Quick start
Link to section “Quick start”- Inventory of Tier 0–1 roles and holders, with last use
- Two break-glass accounts with separate authentication and alerts; drill passed
- Tier table published; pilot team chosen
- Request, approval and grant logs reach the SIEM
Before switching a role to just-in-time
Link to section “Before switching a role to just-in-time”- At least two active approvers and an out-of-hours escalation path
- Maximum duration set; extension path documented
- On-call exception tested with a staged incident
- Infrastructure as code cannot overwrite time-bound bindings
Break-glass readiness (quarterly)
Link to section “Break-glass readiness (quarterly)”- Sign-in tested from the designated workstation; alert acknowledged
- No dependency on the normal identity provider, broker or blocking policies
- Authorised users and credential locations current; every use since the last drill reviewed
Review campaign
Link to section “Review campaign”- Privileged and unused access first; last use shown; no-response default chosen deliberately
- Results applied; rubber-stamp signals followed up
Templates
Link to section “Templates”Access request intake form:
ACCESS REQUEST
Requester: <name> Target role / resource: <role, scope>
Tier: 0 / 1 / 2 Duration requested: <minutes or hours>
Reason (structured): <ticket or incident ID> What will you change: <one line>
On call now?: yes / no Approver(s): <group or rule>
Session recorded?: yes (Tier 0-1) Ends early when done?: yes
Break-glass procedure (kept with the credentials):
BREAK-GLASS PROCEDURE - <system>
Use only when: <normal path unavailable: IdP down / approvers missing / broker down>
Never use for: routine changes, speed, or avoiding review
1. Open an incident; name the incident lead.
2. Two authorised people retrieve credential <n> from <location>.
3. Sign in from <designated workstation>; confirm the alert reached <SOC channel>.
4. Make the smallest change that restores the normal path; log each action.
5. Verify the normal path works; sign out; re-seal or rotate the credential.
6. Review all actions within one business day; record the root cause.
Owner: <team> Last drill: <date> Next drill due: <date, <= 90 days>
Review campaign charter:
REVIEW CAMPAIGN - <resource or role group> Period: <dates>
Scope: <privileged roles first; then unused access>
Reviewers: <resource owners, not the holders' managers by default>
Decision aids: last use, original reason, tier
No response: <no change | remove | take recommendations> and why
Auto-apply: yes / no Escalation after: <days>
Quality checks: approved-but-unused, decisions faster than <n> s, 100 % approvers
Report to: <security lead>; evidence to <ComplianceOps owner>
Architecture decision record:
ADR-<n>: <title, e.g. "On-call engineers auto-approved for Tier 1 database access">
Context: <incident data, p90 time to access, risks>
Decision: <pattern, tier, max duration, approver rule>
Alternatives: <standing role; approval always; break-glass only>
Consequences: <risk accepted, controls added, metric to watch>
Review date: <date>
Deep comparisons
Link to section “Deep comparisons”| Grant mechanism | Strength | Weakness | Choose when |
|---|---|---|---|
| Time-bound role binding or group | Native audit logs; no extra infrastructure | Sessions issued during the grant may outlive it; propagation delay[28] | Cloud control planes, SaaS admin roles |
| Short-lived certificate | Expiry built into the credential | Open sessions persist unless the gateway ends them; plain OpenSSH does not (Lab 3) | Linux fleets, Kubernetes, databases behind a platform |
| Vault check-out with rotation | Works without personal identities | Rotation can break an unknown dependant | Shared, legacy and service accounts |
| Credential injection | User never sees the secret[22] | Supported protocols only | SSH, RDP, databases behind a gateway |
| Time-limited sudo rule | Nothing extra to run on the original sudo | Needs the original sudo, not sudo-rs; hard to manage at scale; commands must not start shells (Lab 2) | A few hosts, or a last-mile limit |
Is AccessOps the same as PAM? No. PAM is a tool category (vault, rotation, session manager); AccessOps, as used here, is the operating model around requested and privileged access, which may use PAM, cloud-native JIT, access platforms or SSH certificates.
Does just-in-time access replace access reviews? No. Reviews still decide who stays eligible and catch roles outside the JIT system; they become smaller.
What about service accounts and AI agents? Inventory belongs to IdentityOps, permissions to IAMOps. The same loan applies with an automated borrower, and an automated approver is Tier 0 (Automation and AI).
Is approval through Slack or Teams safe? Yes, if chat carries only the request and decision, the access system makes and ends the grant (ChatOps), and the bot holds no standing rights.
Are quarterly reviews enough for auditors? They exceed the annual floor of CIS Safeguard 6.8[25], but a review can complete without removing anything; report revocations and approved-but-unused access alongside completion.
How should a vendor get production access? As the same loan with stricter fields: a named person (federated or sponsored, never a shared account), a support case as the reason, a device you manage or a gateway you control (Okta’s change after 2022[62]), a grant that ends with the case, a recorded session. Customer Lockbox shows the provider-side shape: case-bound, time-bound, customer-approved, audited[64]. Measure: every vendor session maps to a case.
Going further
Link to section “Going further”Advanced topics and emerging direction
Link to section “Advanced topics and emerging direction”- Zero touch: Google works to remove “direct human access to production roles”, humans acting through tooling and “resilient multi-party approval systems”[18]: the maturity model’s endpoint.
- Authorising requests, not people: Google’s “three-factor authorization” approves a specific request on a second, hardened device (against compromised workstations); MPA protects against insiders[18].
- Dynamic privilege: SP 800-53 AC-2(6) describes “immediate revocation of privileges from users as opposed to requiring that users terminate and restart their sessions”[9]; today mostly a gateway feature.
- Standard approval protocols: the OpenID Foundation announced on 2026-06-15 that its AuthZEN group had approved an Access Request and Approval Profile (AARP) as a Working Group Draft, with “interoperable patterns for requesting, tracking, satisfying, and re-evaluating” approval prerequisites[66]. A draft, not a standard.
Learning path
Link to section “Learning path”- Prerequisites: SSO and MFA (IdentityOps); roles and least privilege (IAMOps).
- One day: the PIM overview[12] and Microsoft’s emergency-access guidance[19]; Lab 1.
- One week: Labs 2 and 3; draw your tier table; find every standing Tier 0 assignment.
- Thirty days: the first roadmap window and a break-glass drill; chapter 5 of Building Secure and Reliable Systems[18].
- Specialise: PAM suites, access platforms, or review design with ComplianceOps. Portfolio project: an SSH CA that signs one-hour certificates only after a second person approves.
Wrap-up
Link to section “Wrap-up”Executive recap and cheat sheet
Link to section “Executive recap and cheat sheet”| Area | Remember |
|---|---|
| Term | Ambiguous; here, requested and privileged access operations |
| Decide | Tiers, approvers, maximum durations, the on-call rule, the break-glass kit |
| Practise | Eligible by default, five fields per grant, expiry the system enforces, recorded Tier 0–1 sessions, drills |
| Measure | Standing count, p90 time to access, utilisation, review quality |
| Watch out | Sessions and IAM changes outliving grants, empty approver lists, rubber stamps, break-glass as convenience |
| Next | Inventory Tier 0–1 holders; test break-glass; convert one team |
A judgement call: auto-approve the on-call engineer?
Link to section “A judgement call: auto-approve the on-call engineer?”Learning objectives and mastery check
Link to section “Learning objectives and mastery check”You should now be able to explain the meanings of “AccessOps” and the identity-trio split, design tiers, approval rules and a break-glass kit, operate JIT grants, reviews and drills, and evaluate a programme by standing, speed and review-quality metrics.
1. “We bought a PAM tool, so AccessOps is done.” Which two numbers do you ask for?
Standing Tier 0–1 assignments outside break-glass, and grant utilisation (or checkout length). Week-long checkouts or intact admin groups are standing privilege.
2. A grant ended at 14:00, yet the user ran privileged commands at 14:20. Give three explanations.
A session or token issued before 14:00 was still open (Lab 3); revocation had not propagated (minutes, or hours for groups, on Google Cloud); or the user holds the right outside the broker, perhaps self-granted during the grant. Check session issue times and reconcile assignments.
3. A reviewer approved 400 items with a median of 3 seconds. What do you do?
Treat it as a signal: check the privileged and unused items approved, ask about workload, and redesign the campaign (fewer, riskier items; last use shown; a deliberate no-response default).
4. Which pattern fits identity-provider administration, and why?
Tier 0: two approvers, phishing-resistant MFA, a short grant, a privileged workstation and reconciliation at grant end, because the provider’s admins can grant everything else, including access that outlives the grant; plus independent break-glass.
5. In the CircleCI case, what would JIT alone not have prevented?
Use of a stolen session during an active grant; short grants only shrink the window. Step-up authentication at elevation, which CircleCI added, defeats a stolen session only if laptop malware cannot complete it: a phishing-resistant factor on a separate device.
6. Your hosts run Ubuntu 26.04 and visudo -c rejects Lab 2’s rule. Why, and what are the options?
The default sudo is sudo-rs, which as of October 2026 lacks NOTBEFORE/NOTAFTER, TIMEOUT and I/O logging. Switch the host to
sudo.ws with update-alternatives; or move the time limit up a layer (the broker installs a plain exact-command rule file and removes
it on schedule); or grant no sudo and use short-lived certificates or an access platform that can end sessions.
Conclusion
Link to section “Conclusion”“AccessOps” has no standard meaning, but under this page’s meaning lies a well-documented discipline: access that is requested, time-bound, recorded where privileged, and reviewed. In the cases, the damage came from rights that were standing, broad or hard to bound, and every fix cost some speed.
The work is to make access a loan with a due date the system enforces, to know what a grant can leave behind, to keep one emergency path that shares nothing with the normal one, and to check that reviews and approvals can say no. The test: at 03:00, can the right engineer get the right access in minutes, and can you show next morning who did what, why, and that it ended?
Sources and further reading
Link to section “Sources and further reading”Changelog
- 2026-10-16 — r0: first draft;
ambiguous(five unrelated uses); 6 diagrams; Labs 1 and 3 executed, Lab 2 parsed only; evidence inresearch/accessops-ledger.md. - 2026-10-17 — r1 (
reviews/accessops-r1-superseded-20261017T0411.md): Lab 2 rule closed to shell escapes; IAM-capable grants, Teleport session termination, PagerDuty preconditions, ordinary requests and vault check-out added; figures redrawn. - 2026-10-17 — r2 (
reviews/accessops-r1.md,reviews/accessops-r1-response.md): sudo-rs caveats;cvtsudoersfrom 1.8.23;-Uneeds root; dates and cadences made precise; six-column RACI; non-human approvers; Vault commands; Lockbox limits. - 2026-10-17 — r3 (
reviews/accessops-score.md,reviews/accessops-r2-response.md): birthright defined; Tier 0 linked; Entra agent-ID wording; CircleCI time zone; Lab 2 prerequisites split; sudo-rs README pinned; Entra PIM Graph artefact, vendor FAQ and mastery check 6 added; figure 2 extended; restatements trimmed. - 2026-10-17, post-score polish (
reviews/accessops-polish.md,reviews/accessops-polish-check.md): GitHub descriptor, PIM lockout condition, cadence list, non-goals named, figure 3 uncrossed, HashiCorp footnotes version-pinned.
Identity and Access Management: Recommended Best Practices for Administrators — NSA and CISA (Enduring Security Framework), March 2023. Checked 2026-10-16. ↩︎ ↩︎
Glossary search for “AccessOps” — NIST CSRC, no results. Checked 2026-10-16. ↩︎
AccessOps Explained — Opsio, 2025-08-26 (updated 2026-10-12). Checked 2026-10-16. ↩︎
AccessOps — Talavay Consulting Group, undated. Checked 2026-10-16. ↩︎
The Accessibility Gap Hiding in Your Documents — Movate, 2026-07-20. Checked 2026-10-17. ↩︎
arronn35/accessops — GitHub. Checked 2026-10-17. ↩︎
AccessOps — Access Governance, end to end — accessops.app, product page. Checked 2026-10-17. ↩︎
aman-agarwal6/AccessOps — GitHub. Checked 2026-10-16. ↩︎
SP 800-53 Rev. 5, Security and Privacy Controls — NIST, Release 5.2.0 (2025-08-27); control text from NIST’s OSCAL catalogue. Checked 2026-10-17. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
SP 800-207, Zero Trust Architecture — NIST, August 2020. Checked 2026-10-16. ↩︎
Zero Trust Maturity Model, Version 2.0 — CISA, April 2023. Checked 2026-10-16. ↩︎ ↩︎ ↩︎ ↩︎
What is Microsoft Entra Privileged Identity Management? — Microsoft Learn, updated 2026-04-23. Checked 2026-10-16. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Privileged Access Manager overview — Google Cloud, updated 2026-10-13. Checked 2026-10-17. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Temporary elevated access for AWS accounts — AWS IAM Identity Center User Guide. Checked 2026-10-16. ↩︎ ↩︎
Temporary elevated access management (TEAM) — AWS Samples (open source). Checked 2026-10-16. ↩︎ ↩︎
Privileged user — NIST CSRC Glossary. Checked 2026-10-16. ↩︎
Privileged access management — Microsoft Learn (Purview), updated 2025-01-01. Checked 2026-10-16. ↩︎
Building Secure and Reliable Systems, ch. 5: Design for Least Privilege — Google/O’Reilly, 2020. Checked 2026-10-17. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Manage emergency access accounts in Microsoft Entra ID — Microsoft Learn, updated 2026-06-04. Checked 2026-10-17. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
SEC03-BP03 Establish emergency access process — AWS Well-Architected Framework. Checked 2026-10-16. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Access Requests with PagerDuty — Teleport docs v18. Checked 2026-10-17. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Credentials — HashiCorp Boundary docs v1.0.x. Checked 2026-10-17. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Session Recording — Teleport docs v18. Checked 2026-10-16. ↩︎ ↩︎ ↩︎
Session recording — HashiCorp Boundary docs v1.0.x. Checked 2026-10-17. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Control 6: Access Control Management — CIS Controls Assessment Specification v8.1. Checked 2026-10-17. ↩︎ ↩︎ ↩︎ ↩︎
23 NYCRR 500.7, Access privileges and management — via Cornell LII, amended 2023-11-01. Checked 2026-10-16. ↩︎ ↩︎
Revoke IAM role temporary security credentials — AWS IAM User Guide. Checked 2026-10-17. ↩︎ ↩︎ ↩︎
Access change propagation — Google Cloud, updated 2026-10-13. Checked 2026-10-17. ↩︎ ↩︎ ↩︎ ↩︎
System utility replacements: sudo-rs — Ubuntu Server documentation, updated 2026-10-01. Checked 2026-10-17. ↩︎ ↩︎
sudoers-rs(5), sudo-rs 0.2.15 — Arch Linux manual pages. Checked 2026-10-17. ↩︎ ↩︎
sudoers manual, 1.8.31 — sudo project. Checked 2026-10-17. ↩︎ ↩︎ ↩︎
Access Request Configuration — Teleport docs v18. Checked 2026-10-16. ↩︎ ↩︎ ↩︎ ↩︎
Teleport Role Reference — Teleport docs v18. Checked 2026-10-17. ↩︎ ↩︎ ↩︎ ↩︎
Create entitlements — Google Cloud, updated 2026-10-13. Checked 2026-10-17. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
What is entitlement management? — Microsoft Learn, updated 2024-11-25. Checked 2026-10-17. ↩︎ ↩︎ ↩︎
Configure separation of duties checks for an access package in entitlement management — Microsoft Learn, updated 2024-08-23. Checked 2026-10-17. ↩︎
LDAP secrets engine — HashiCorp Vault docs v2.x. Checked 2026-10-17. ↩︎
Key concepts in Windows LAPS — Microsoft Learn, updated 2025-05-12. Checked 2026-10-17. ↩︎
LDAP secrets engine API: library set management — HashiCorp Vault API docs v2.x. Checked 2026-10-17. ↩︎
Check out a service account — HashiCorp Vault docs v2.x. Checked 2026-10-17. ↩︎
Control 5: Account Management — CIS Controls Assessment Specification v8.1. Checked 2026-10-16. ↩︎ ↩︎ ↩︎
Just-in-Time Access Requests — Teleport docs v18. Checked 2026-10-16. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
CyberArk Privileged Access Security – Windows Components Security Target — CyberArk/Corsec, v0.15, 2019-09-27 (product v10.4; dated). Checked 2026-10-17. ↩︎ ↩︎
Idira, the identity security platform — Palo Alto Networks; www.cyberark.com redirects here. Checked 2026-10-17. ↩︎
Signed SSH certificates — HashiCorp Vault docs v2.x. Checked 2026-10-17. ↩︎ ↩︎
ssh-keygen(1) — OpenBSD manual pages (OpenSSH). Checked 2026-10-17. ↩︎
What are access reviews? — Microsoft Learn, updated 2026-03-12. Checked 2026-10-16. ↩︎ ↩︎
Access Request plugins — Teleport docs v18. Checked 2026-10-16. ↩︎
Configure Microsoft Entra role settings in PIM — Microsoft Learn, updated 2026-04-23. Checked 2026-10-17. ↩︎ ↩︎ ↩︎ ↩︎
Session recording, v0.21.x — HashiCorp Boundary docs. Checked 2026-10-17. ↩︎
Review recommendations for access reviews — Microsoft Learn, updated 2026-03-12. Checked 2026-10-16. ↩︎ ↩︎
Update rules in privileged identity management (PIM) — Microsoft Learn (Microsoft Graph), updated 2025-08-29. Checked 2026-10-17. ↩︎ ↩︎ ↩︎
sudo
NEWSat release 1.8.31 — sudo project. Checked 2026-10-17. ↩︎sudo-rs README, release v0.2.15 — Trifecta Tech Foundation, tag
v0.2.15(newest release on 2026-10-17). Checked 2026-10-17. ↩︎ ↩︎sudo manual, 1.8.31 — sudo project. Checked 2026-10-17. ↩︎ ↩︎
sudo 1.8.31 source,
plugins/sudoers/parse.c— sudo project (raw file). Checked 2026-10-17. ↩︎sudoreplay manual, 1.8.31 — sudo project. Checked 2026-10-16. ↩︎
journalctl(1) — systemd manual page, man7.org. Checked 2026-10-17. ↩︎
sshd_config(5) — OpenBSD manual pages (OpenSSH). Checked 2026-10-16. ↩︎
CircleCI incident report for January 4, 2023 security incident — Rob Zuber, CircleCI, 2023-01-12 (published 22:00 PST; 2023-01-13 UTC). Checked 2026-10-17. ↩︎ ↩︎
Twitter Investigation Report — New York State Department of Financial Services, October 2020. Checked 2026-10-16. ↩︎ ↩︎
Okta Concludes its Investigation Into the January 2022 Compromise — David Bradbury, Okta, 2022-04-20. Checked 2026-10-17. ↩︎ ↩︎
More details about the October 4 outage — Santosh Janardhan, Engineering at Meta, 2021-10-05. Checked 2026-10-17. ↩︎
Customer Lockbox requests — Microsoft Learn, updated 2025-02-03. Checked 2026-10-17. ↩︎ ↩︎
Create an access review — Microsoft Learn, updated 2026-03-12. Checked 2026-10-16. ↩︎
OpenID Foundation advances authorization for the agent era with new AuthZEN Working Group Drafts — OpenID Foundation, 2026-06-15. Checked 2026-10-17. ↩︎