IDENTITY GOVERNANCE · LAB
Answer an auditor from your tenant's records, and measure whether governance works
Answer two audit requests from records made at the time, judge how far each record can be trusted, compute governance measures from your own tenant, and see how a measure can improve while the truth gets worse.
Partly readyUses your lab tenant
The lesson
Builds on: Access reviews, Orphaned, dormant, and shared accounts.
New to the labs? Start with the lab toolkit and the shared cast and names every lab uses.
Partly ready. Most of this lab runs today. Steps that wait on platform features are marked, and Missing infrastructure says what they need.
- G23 Access requests and approvals, access reviews, JIT or temporary access
- G41 Audit and Logs export or legal hold beyond 30-day retention
- G52 Governance and usage reporting: ownership metadata, filterable last sign-in, per-client last use and usage inventory, report-only enforcement
Your progress
Press Start before you begin. Only events your tenant records after that count, in the order below. Checking reads your tenant's Audit, so you need Audit read access in it.
Sign in to start this lab and check your progress. Log in or create an account.
Run a lifecycle with a leaver
Recorded as
tenant.hr.runsucceeded.The source ends the leaver's access
Recorded as
scim.user.locksucceeded forlab-hr-feed.A later sign-in shows the control took effect
Recorded as
account.sign_inrejected (account_locked).Reading the evidence is itself recorded
Recorded as
tenant.directory.audit.listsucceeded.Improve a measure by deleting without investigating
Recorded as
tenant.users.deletesucceeded.
Setup
This lab produces its own leaver, so it does not depend on records older than the tenant's 30-day retention. It also reads review.json and reconciliation.json from the review labs if you kept them.
Open a bash shell and set the variables and helpers from the directory lab.
Press Start on the lab page.
In the HR Simulator, start a Full lifecycle run: 8 people, leavers 25 percent, movers 0, 15 minutes, initial passwords on. Before any leaver's lock event runs, use View password for one leaver and keep it in your password manager.
Walkthrough
"Show that the leaver's access ended when HR said so." When the leaver's "Leaver: lock (active false)" event has succeeded, note its planned time and Correlation ID in the run. Follow its Audit link:
scim.user.lockwith a time, actorlab-hr-feed, the subject's ID and the same correlation ID. Then sign in at$ISSUER/loginas the leaver with the password you kept: refused, and Audit (Source Protocol activity) recordsaccount.sign_inrejected withaccount_locked. Write the answer: HR's time, the removal time, the gap, the actor, and the refused attempt.
Why it matters: this is "An auditor asks". The account's state today says nothing about when it changed; only records made at the time do. The refused attempt shows the control took effect, not just that a change was sent.
Read the record field by field. Open the
scim.user.lockevent's detail and fill the lesson's table from it:
| Field | The auditor's question | What your record says |
|---|---|---|
| Time | When did the access end? | |
| Recorded by | Who says so? | |
| Actor | Who carried it out? | |
| Subject | Whose access was it? | |
| Action and outcome | What changed, and did it work? | |
| Reason | Why did it happen? | |
| Correlation ID | What else belongs with it? |
The reason row stays empty: a SCIM change carries no reason field, so "the contract ended" lives only in the HR Simulator's run.
Why it matters: this is "What good evidence contains". The correlation ID is what joins the HR event, the lock and the refused sign-in into one story.
"Show who approved Ava's access to Photo moderation." Search Audit for the group's ID. The
tenant.groups.membersevent that added Ava shows who made the change and when. No approval exists anywhere in the tenant. Write the honest answer: the change and its actor are evidenced; the decision behind it is not.
Why it matters: an approval kept in an email or a note cannot be linked to the change it authorized, which is the gap G23 would close.
Can you trust it? Check the three properties against your tenant.
Recorded with the change: Audit events commit in the same operation as the change, so a refused change leaves a rejected record, as step 1's sign-in did.
Protected from the people it describes: look for an edit or delete control on any Audit record. There is none, for you or for Ben.
Kept for a defined period: open Collection and retention in Audit. Records are kept for 30 days.
Then turn on Include routine access and find your own Audit reads from this lab, recorded as tenant.directory.audit.list (Directory audit viewed).
Why it matters: this is "Evidence you can trust". Reading the evidence is itself recorded, and a 30-day period is shorter than most audits look back, which is why G41 matters.
Attribution. Find an action by a shared or service actor: Front Desk's sign-in from the orphaned accounts lab, if it is still within retention, or any change by
lab-provisioning. Each is attributed to an account with no named owner.
Why it matters: a record whose actor is a shared login or an unowned client attributes the action to nobody in particular.
Compute four measures.
Time to remove a leaver: for each leaver in this run, the
scim.user.locktime minus the event's planned time in the run. Report the median and the longest.Orphaned accounts over time: the count from
filter=active eq true and not (externalId pr)now, against the starting count inreconciliation.json.Review items that changed access: the share of items in
review.jsonwhose decision was remove or change.Leavers still holding groups: locked simulated people whose
groupslist is not empty.
scim -G "$SCIM/Users" --data-urlencode 'filter=active eq false and externalId sw "HRSIM-"' --data-urlencode count=200 \
--data-urlencode 'attributes=userName,groups' | jq '[.Resources[] | select((.groups // []) | length > 0)] | length'
Why it matters: this is "Measuring whether it works". The same records that answer single questions can be counted to show whether the process works in general.
When the numbers mislead. Create
[email protected]in the portal, rerun the orphan count, then delete the account without investigating it and count again. The measure improves. Audit holds an unexplainedtenant.users.deletewith no reason, which shows why that improvement should not count. Next to each of your four measures, write the record that explains it.
Why it matters: completion and counts measure activity, not outcomes. Pairing each number with the evidence behind it shows which explanation is true.
Planned walkthrough
Once G23, G41 and G52 exist, the second audit request has a complete answer and the evidence outlives the default retention.
Ava's access request, both approvals, the grant and the read-back confirmation share one correlation ID, and searching it returns the whole decision trail.
Export the leaver evidence from step 1 as a signed, time-stamped file, or place the records on a legal hold, so they are still available after 30 days.
SCIM and portal changes accept a reason from a fixed list, so step 2's reason row is filled by the record itself.
Clients and shared accounts carry an owner, so step 5's actors lead to a person.
Break it
Try to answer step 1 from today's state alone. If the run has deleted the leaver, reading their ID returns
404and Users no longer lists them; even if not, a locked account cannot say when it was locked or why. Only the records made at the time can answer.
Check your work
Press Check my progress. The checks look for, in order:
tenant.hr.runsucceeded (Setup step 3)scim.user.locksucceeded bylab-hr-feed(step 1)account.sign_inrejected withaccount_locked(step 1)tenant.directory.audit.listsucceeded (step 4)tenant.users.deletesucceeded (step 7)
Your one-page evidence pack has two answers, each line citing an Audit event ID or an HR correlation ID, with gaps marked, and four measures with the queries or files that produced them.
Cleanup
Let the lifecycle run finish.
This is the end of the Identity governance track. Delete any
lab-tmp-users, groups, roles and clients you still have, and decide whether to keep the governance groups and theHelp deskrole. Audit keeps their history for 30 days.
Missing infrastructure
G23: there are no request, approval or review records, so step 3 cannot be answered from the tenant, and decisions cannot share a correlation ID with the changes they authorized.
G41: Audit and Logs cannot be exported or held beyond the 30-day retention, so evidence for an audit that looks back a year must be collected by hand as it happens.
G52: SCIM and portal changes carry no reason, and clients and shared accounts have no owner, so some records attribute actions to nobody in particular.