Access review and joiner-mover-leaver
Purpose
Access accumulates. People change roles and keep the old entitlements, contractors
finish and their accounts persist, service accounts outlive the system they were
created for, and the review that is supposed to catch this becomes an exercise in
managers approving lists they do not understand. This skill makes the review
produce actual revocations by fixing the authoritative source, routing each item
to someone who can genuinely judge it, and tracking revocations to evidence
rather than to an approval click.
Prerequisites
- Inputs: an authoritative people list from the HR system (identity, status,
manager, department, employment type, start/end dates); an entitlement export
per in-scope system (account identifier, linked person, entitlement or group,
last login, privileged yes/no); the previous review's outcomes.
- Access: read on the identity provider and each in-scope system; ability to
raise revocation tickets; the approver list.
If the HR export and the entitlement exports cannot be joined on a common
identifier, stop and fix the identifier problem first. A review run on
name-matching produces false pairs and misses exactly the accounts that matter —
the ones with no owner.
Procedure
Set scope by system criticality, not by convenience. Systems handling
money, personal data, production infrastructure, or the identity provider
itself are in every cycle. Everything else can be annual. Record what was
excluded and why — an unstated scope gap is the finding an auditor will raise.
Reconcile accounts to people before showing anything to an approver. Every
account lands in exactly one bucket, and the buckets have different handling:
| Bucket |
Definition |
Handling |
| Matched active |
Account maps to a current employee/contractor |
Goes to the manager for recertification |
| Leaver |
Account maps to a person whose end date has passed |
Revoke immediately; do not send for approval |
| Mover |
Person's department or role changed since last review |
Revoke prior-role entitlements by default; manager must re-request |
| Orphan |
No matching person |
Escalate to system owner; disable pending identification |
| Service/non-human |
Declared non-human account |
Route to the named technical owner, not a manager |
| Unowned service account |
Non-human with no named owner |
Treat as the highest-priority finding; disable-after-notice |
Leavers and orphans are actioned, not approved. Sending them to a manager to
confirm is how a review takes six weeks and revokes nothing.
Apply the mover rule strictly: additive access is the default failure. When
someone changes role, the correct action is to remove the old entitlements and
have the new manager request what is needed. Asking "should they keep this?"
reliably yields yes. Role change is the single largest source of accumulated
over-entitlement.
Route each item to an approver who can actually judge it.
| Item |
Approver |
| Standard business entitlement |
The person's current line manager |
| Privileged/admin entitlement |
System owner AND the manager, both required |
| Access to personal or financial data |
System owner plus the data owner |
| Non-human account |
Named technical owner |
| Approver's own access |
That approver's manager — never self-approval |
Self-approval anywhere in the chain invalidates the review for the whole
system, not just that line.
Give approvers decision context, not a list. Each line shows: entitlement,
what it permits in plain words, when it was granted, when it was last used,
and whether it is privileged. An entitlement unused for 90+ days should be
pre-flagged as revoke-by-default so the approver has to argue to keep it. The
plain-words column is what separates a real review from a rubber stamp — most
managers cannot map a group name to a capability.
Track revocations to evidence. An approver marking "revoke" is the start,
not the end. Each revocation carries a ticket, an executor, and a verification:
a re-export from the system showing the entitlement gone. Close the review only
when re-export confirms it. Reviews that count approvals as completion routinely
leave a third of revocations unexecuted.
Handle non-responders with a default, decided before the cycle starts.
Publish the deadline and the consequence — typically: non-privileged access
escalates to the approver's manager, privileged access is revoked. A review
with no non-response default stalls indefinitely on the busiest approvers.
Produce the evidence pack. Scope and exclusions with rationale, population
counts per bucket, approver coverage, revocations requested versus verified,
exceptions granted with owner and expiry, and unresolved items with dates.
Retain the raw exports used — a review whose input data cannot be reproduced
cannot be relied on later.
Joiner-mover-leaver timing
| Event |
Action |
Timing driver |
| Joiner |
Provision from role template only; no cloning of a colleague's account |
Cloning propagates over-entitlement invisibly |
| Mover |
Revoke old, then grant new — in that order |
Doing it in reverse leaves the union in place if step two stalls |
| Leaver (planned) |
Disable at end of last working day; revoke tokens/sessions/keys, not just the password |
Sessions and API tokens survive a password change |
| Leaver (immediate) |
Disable before notification, including remote access and shared credentials they knew |
Shared credentials must be rotated, not just re-permissioned |
| Contractor end date |
Automatic expiry set at provisioning |
Contractors without an expiry date are the most common orphan source |
Failure modes this skill exists to prevent
- Bulk approval. An approver clicks approve-all in one action. Detect it:
identical timestamps across an approver's whole list is a red flag; re-run that
approver's set with the unused-access flags surfaced.
- Name-matched reconciliation. Two people with the same name, or an account
under a maiden name, silently matches wrong. Join on an identifier or don't join.
- Password-only offboarding. Account disabled, but API keys, SSH keys, OAuth
grants, and shared credentials still work.
- Permanent exceptions. An exception with no expiry becomes policy. Every
exception needs an owner and a date, and expired ones return to the next cycle.
Data handling
Classification: Confidential. Access review data links named individuals to
systems and permissions and is itself an attack map. Distribute only to reviewers
and the audit function; never paste full entitlement exports into shared chat or
into a model context alongside unrelated work. If a user supplies real employee
identifiers, account numbers, or credentials in conversation, flag it and do not
proceed until they are removed or the work moves to an approved system.
Boundaries
- A single new access request from one person —
it-service-desk-triage handles
the request path; this skill only governs periodic and lifecycle review.
- Designing what a role should be entitled to (role mining, least-privilege
modelling) is upstream of this skill; do that before the first cycle or the
review just recertifies a bad model.
- A change to the access control system itself needs
it-change-management.
- Investigating suspected misuse of an account is a security investigation, not a
review — escalate rather than handling it here.
Hand-offs
- Receives from:
it-service-desk-triage (access requests granted since the
last cycle, which this review validates).
- Routes to:
it-change-management for bulk revocation windows;
data-analytics-report-qa when review coverage statistics are reported to a
board or auditor and the numbers must be verified before circulation.
1---2name: it-access-review3description: Runs user access reviews and joiner-mover-leaver processing: reconciles entitlements against an authoritative people source, routes each item to the right approver, and closes the loop on revocations with evidence. Use when a periodic access recertification is due, when someone joins, changes role, or leaves, when an auditor asks who has access to a system, or when orphaned and privileged accounts need sweeping. Trigger on 'access review', 'user access recertification', 'joiner mover leaver', 'offboarding checklist', 'who has admin on X', 'orphaned accounts', 'entitlement review'. Not for granting a single new permission on request — that is it-service-desk-triage; not for deciding what a role should be entitled to in the first place, which is the role design that precedes this.4---56# Access review and joiner-mover-leaver78## Purpose910Access accumulates. People change roles and keep the old entitlements, contractors11finish and their accounts persist, service accounts outlive the system they were12created for, and the review that is supposed to catch this becomes an exercise in13managers approving lists they do not understand. This skill makes the review14produce actual revocations by fixing the authoritative source, routing each item15to someone who can genuinely judge it, and tracking revocations to evidence16rather than to an approval click.1718## Prerequisites1920- **Inputs:** an authoritative people list from the HR system (identity, status,21 manager, department, employment type, start/end dates); an entitlement export22 per in-scope system (account identifier, linked person, entitlement or group,23 last login, privileged yes/no); the previous review's outcomes.24- **Access:** read on the identity provider and each in-scope system; ability to25 raise revocation tickets; the approver list.2627If the HR export and the entitlement exports cannot be joined on a common28identifier, stop and fix the identifier problem first. A review run on29name-matching produces false pairs and misses exactly the accounts that matter —30the ones with no owner.3132## Procedure33341. **Set scope by system criticality, not by convenience.** Systems handling35 money, personal data, production infrastructure, or the identity provider36 itself are in every cycle. Everything else can be annual. Record what was37 excluded and why — an unstated scope gap is the finding an auditor will raise.38392. **Reconcile accounts to people before showing anything to an approver.** Every40 account lands in exactly one bucket, and the buckets have different handling:4142 | Bucket | Definition | Handling |43 | --- | --- | --- |44 | Matched active | Account maps to a current employee/contractor | Goes to the manager for recertification |45 | Leaver | Account maps to a person whose end date has passed | Revoke immediately; do not send for approval |46 | Mover | Person's department or role changed since last review | Revoke prior-role entitlements by default; manager must re-request |47 | Orphan | No matching person | Escalate to system owner; disable pending identification |48 | Service/non-human | Declared non-human account | Route to the named technical owner, not a manager |49 | Unowned service account | Non-human with no named owner | Treat as the highest-priority finding; disable-after-notice |5051 Leavers and orphans are actioned, not approved. Sending them to a manager to52 confirm is how a review takes six weeks and revokes nothing.53543. **Apply the mover rule strictly: additive access is the default failure.** When55 someone changes role, the correct action is to remove the old entitlements and56 have the new manager request what is needed. Asking "should they keep this?"57 reliably yields yes. Role change is the single largest source of accumulated58 over-entitlement.59604. **Route each item to an approver who can actually judge it.**6162 | Item | Approver |63 | --- | --- |64 | Standard business entitlement | The person's current line manager |65 | Privileged/admin entitlement | System owner AND the manager, both required |66 | Access to personal or financial data | System owner plus the data owner |67 | Non-human account | Named technical owner |68 | Approver's own access | That approver's manager — never self-approval |6970 Self-approval anywhere in the chain invalidates the review for the whole71 system, not just that line.72735. **Give approvers decision context, not a list.** Each line shows: entitlement,74 what it permits in plain words, when it was granted, when it was last used,75 and whether it is privileged. An entitlement unused for 90+ days should be76 pre-flagged as revoke-by-default so the approver has to argue to keep it. The77 plain-words column is what separates a real review from a rubber stamp — most78 managers cannot map a group name to a capability.79806. **Track revocations to evidence.** An approver marking "revoke" is the start,81 not the end. Each revocation carries a ticket, an executor, and a verification:82 a re-export from the system showing the entitlement gone. Close the review only83 when re-export confirms it. Reviews that count approvals as completion routinely84 leave a third of revocations unexecuted.85867. **Handle non-responders with a default, decided before the cycle starts.**87 Publish the deadline and the consequence — typically: non-privileged access88 escalates to the approver's manager, privileged access is revoked. A review89 with no non-response default stalls indefinitely on the busiest approvers.90918. **Produce the evidence pack.** Scope and exclusions with rationale, population92 counts per bucket, approver coverage, revocations requested versus verified,93 exceptions granted with owner and expiry, and unresolved items with dates.94 Retain the raw exports used — a review whose input data cannot be reproduced95 cannot be relied on later.9697### Joiner-mover-leaver timing9899| Event | Action | Timing driver |100| --- | --- | --- |101| Joiner | Provision from role template only; no cloning of a colleague's account | Cloning propagates over-entitlement invisibly |102| Mover | Revoke old, then grant new — in that order | Doing it in reverse leaves the union in place if step two stalls |103| Leaver (planned) | Disable at end of last working day; revoke tokens/sessions/keys, not just the password | Sessions and API tokens survive a password change |104| Leaver (immediate) | Disable before notification, including remote access and shared credentials they knew | Shared credentials must be rotated, not just re-permissioned |105| Contractor end date | Automatic expiry set at provisioning | Contractors without an expiry date are the most common orphan source |106107## Failure modes this skill exists to prevent108109- **Bulk approval.** An approver clicks approve-all in one action. Detect it:110 identical timestamps across an approver's whole list is a red flag; re-run that111 approver's set with the unused-access flags surfaced.112- **Name-matched reconciliation.** Two people with the same name, or an account113 under a maiden name, silently matches wrong. Join on an identifier or don't join.114- **Password-only offboarding.** Account disabled, but API keys, SSH keys, OAuth115 grants, and shared credentials still work.116- **Permanent exceptions.** An exception with no expiry becomes policy. Every117 exception needs an owner and a date, and expired ones return to the next cycle.118119## Data handling120121Classification: **Confidential**. Access review data links named individuals to122systems and permissions and is itself an attack map. Distribute only to reviewers123and the audit function; never paste full entitlement exports into shared chat or124into a model context alongside unrelated work. If a user supplies real employee125identifiers, account numbers, or credentials in conversation, flag it and do not126proceed until they are removed or the work moves to an approved system.127128## Boundaries129130- A single new access request from one person — `it-service-desk-triage` handles131 the request path; this skill only governs periodic and lifecycle review.132- Designing what a role should be entitled to (role mining, least-privilege133 modelling) is upstream of this skill; do that before the first cycle or the134 review just recertifies a bad model.135- A change to the access control system itself needs `it-change-management`.136- Investigating suspected misuse of an account is a security investigation, not a137 review — escalate rather than handling it here.138139## Hand-offs140141- **Receives from:** `it-service-desk-triage` (access requests granted since the142 last cycle, which this review validates).143- **Routes to:** `it-change-management` for bulk revocation windows;144 `data-analytics-report-qa` when review coverage statistics are reported to a145 board or auditor and the numbers must be verified before circulation.