IDENTITY SECURITY · LAB
Read one event end to end and follow its request ID
Open a real method-change record, read every field, confirm what it leaves out, follow its request ID to related records, and see that reading the history is itself recorded.
ReadyUses your lab tenant
The lesson
Builds on: How attackers stay in.
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.
- G37 Security context in Audit (network, device, session, method; subject on failed sign-ins) and user "this wasn't me" reporting
- G41 Audit and Logs export or legal hold beyond 30-day retention
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.
Open the detail of a protocol event
Recorded as
tenant.protocol.audit.detailsucceeded.Read the user directory history
Recorded as
tenant.directory.audit.listsucceeded.Read the protocol log summaries
Recorded as
tenant.protocol.logs.listsucceeded.Ben cannot read Audit
Recorded as
tenant.protocol.audit.listrejected.
Setup
Press Start on this page.
In Administrators, confirm your role grants both Audit and Logs read access (
tenant.audit.readandtenant.logs.read). They are separate permissions.
Walkthrough
Open Audit, choose the source Protocol activity, and find Cora's
account.securityevent with reasonmethod_enrolledfrom the previous lab. Open its details and read each field: message, time, operation, outcome, reason, actor, subject, service, HTTP status and request ID.
Why it matters: these answer the lesson's first questions: who did what to whom, when, and how it ended. When Cora changes her own account, the actor and subject are both Cora's account.
Look for anything secret in the record: the authenticator's shared secret, the code Cora typed, her session cookie. None is there.
Why it matters: records travel and are kept for weeks. A record holding a code or cookie would be a credential store with weaker protection than the real one.
Filter the outcome to
rejectedand open anaccount.sign_inevent with reasoninvalid_credentialsfrom the guessing lab. It has no actor and no subject.
Why it matters: a typed address is a claim anyone can make, so it must never be recorded as the actor. The lesson goes further and names the account the address matched as the subject of the attempt; your tenant does not yet, which is one of the gaps below.
Switch the source to User directory and open the
tenant.users.methods.resetevent for Cora. Here the actor is you and the subject is Cora. Press Find related events to search by its request ID.
Why it matters: when a help desk agent acts on someone else, the actor and subject differ, and a record that kept only one would hide either who acted or who was affected. The request ID joins everything written while handling that one request.
Open Logs, source Protocol summaries. Each row summarizes one day of requests with the same operation, outcome and reason, with a count and the first and latest request IDs. Open Collection and retention at the bottom of the page and read the retention period and whether any records were dropped.
Why it matters: the lesson separates audit history (who did what) from operational logs (how requests were handled). A visible coverage gap tells an investigator that missing records are not the same as nothing happening.
Go back to Audit, source User directory, and find your own reads:
tenant.protocol.audit.detailandtenant.protocol.logs.list, with you as the actor.
Why it matters: every search of the history is itself recorded, so a curious or compromised reviewer leaves a trail too.
Break it
In a private window, sign in as Ben, who holds
lab-supportwithout Audit access. Open$ISSUER/manage/auditand choose the source Protocol activity. The tenant refuses to return the records. Nothing was changed, so there is nothing to restore.
Why it matters: reading needs control as well as writing. Audit and Logs are granted separately, so a help desk role does not see the tenant's history by default.
Check your work
Check my progress confirms the event detail you opened, the directory history read, the Logs read and Ben's refusal.
Your notes list every field of Cora's record, the fields it lacks compared with the lesson's example (session, network, device, method), and the retention period.
In Audit, source User directory, Ben's refused
tenant.protocol.audit.listnames him as the actor with reasonaccess_denied.
Cleanup
None. Nobody, including you, can edit or delete an individual record.
Missing infrastructure
G37: records hold no session ID, source network, device or sign-in method, and a refused sign-in does not name the account the typed address matched. Once it exists, the lab will compare Cora's record field by field with the lesson's example.
G41: there is no export or legal hold, so records leave after the retention period even during an investigation.