Data & Evidence
EngineerCode / policy lab

Evidence Pipelines

Collect, normalize, timestamp and store control evidence automatically.

55 min 240 XPSkills: Pipelines, Evidence

Five stages, and only one of them is glamorous

An evidence pipeline collects from a source, normalizes the payload into a shape you can query, timestamps it from a trusted clock, hashes it, and writes it somewhere it cannot be altered. Collection is the part everyone builds first and the part that matters least; the integrity stages are what turn an export into evidence.

Normalization is where most of the value hides. Once every source produces the same record shape, subject, resource, action, timestamp, source system, one query answers the same control question across ten systems, and a new source is a new collector rather than a new reporting project.

Evidence pipeline stages from source system through collect, normalize, timestamp, hash and store into an immutable object store.
Collection is the easy stage. The last three are the ones an auditor tests.

Chain of custody, concretely

Chain of custody is the unbroken account of where an artifact came from and everything that touched it since. In practice it is four facts recorded at collection: what produced it, when, under whose identity, and the hash of the bytes as collected.

It breaks the moment a human handles the artifact between collection and storage. Someone exports a CSV, opens it to tidy the columns, then uploads it: the recomputed hash no longer matches, and the honest answer to "is this what the system produced" becomes no.

If a person can edit the artifact between the system and the store, you have a report, not evidence.

Intact chain of custody with matching hashes beside a broken chain where the artifact was edited locally, producing a hash mismatch.
One local edit, and the artifact can no longer speak for the system.

Immutability is a storage property

Write-once storage, object lock, versioning, retention in compliance mode, is what stops the useful person with production access from fixing a bad artifact quietly. Retention is set from the audit and legal requirement, not from what storage costs.

Note the difference between deleting and superseding. Evidence is never corrected in place; a corrected collection is a new object with its own timestamp and hash, and the original stays exactly where it was.

The completeness question

The first thing an auditor asks of pipeline output is not "is this accurate" but "is this everything". A collector that silently skips a region, a paginated API that stopped at page one, a source that was offline on the third of the month: each produces a clean-looking artifact describing a subset of reality.

So the pipeline records its own run metadata: what it queried, the window it covered, how many records it expected and how many it got. A run that returned nothing must be distinguishable from a run that never happened.

Zero records and no run look identical in storage unless the pipeline writes down that it ran.

The pipeline is itself a control

It has an owner, a frequency, a failure mode and evidence of its own operation. If the pipeline that produces your access-review evidence fails for six weeks, the control it supports has not operated for six weeks, whatever the last artifact says.

So monitor freshness, not just success: an artifact whose timestamp is older than the collection interval is a failure even when nothing errored.

Tasks

Answers are graded on the server: the answer key never reaches your browser.

Task 1: The helpful cleanup

Scenario sim+80 XP

Name the property the edit destroyed, then the record the pipeline must preserve.

Incident brief

The IAM export lands as a CSV with a trailing blank column and inconsistent date formats. An analyst opens it in a spreadsheet each month, fixes the columns, saves, and uploads the tidy version to the evidence store.

The auditor recomputes the digest of the stored file and compares it to the value the collector logged at export time. They do not match. Asked to re-run the export for March, the team finds the source system only retains 90 days.

The tidy files are accurate. Nobody disputes a single value in them.

Term bank, not all of these are right

chain of custodyintegritycompletenesshashnormalizationretention

1.1Name the property the local edit destroyed. (three words)

1.2Name the pipeline stage where the tidying belongs. (one word)

Task 2: Page one of nine

Scenario sim+80 XP

Name the evidence quality the artifact fails, then the metadata that would have exposed it.

Incident brief

The privileged-access collector has run nightly without error for seven months. Every artifact is hashed, timestamped and stored write-once. The chain of custody is impeccable.

During the audit an engineer notices the artifacts all contain exactly 100 records. The source API paginates at 100 and the collector never followed the `next` link. The real population is 847.

Nothing in the store indicates how many records the collector expected, or that there were more pages.

Term bank, not all of these are right

completenessrun metadataintegrityfreshnesschain of custodysampling

2.1Name the evidence quality the artifacts fail. (one word)

2.2Name what the pipeline must record about its own execution. (two words)

Task 3: Six weeks of nothing

Scenario sim+80 XP

Name the signal that would have caught the outage, then what the control's status truly was.

Incident brief

A credential rotation collector authenticates with a token that expired on 4 March. The job schedules, starts, receives a 401, catches the exception and exits zero because "we did not want noisy alerts".

The evidence dashboard shows the control green throughout, because it reads the most recent stored artifact and one exists: from 3 March.

The gap surfaces on 16 April when someone sorts the store by date.

Term bank, not all of these are right

freshnessnot operatingexception handlingcompletenessalertingdeficiency

3.1Name the signal that would have caught this on 5 March. (one word)

3.2State what the control was doing for those six weeks. (two words)

Labs

80 bonus XP

Hands-on work. You edit the artefact, the server runs the checks: the expectations and the reference solution never reach your browser.

Lab 1 · Query lab

Find the collectors that are lying to you

Briefing 40 XP

Six evidence collectors feed the control platform. The dashboard is green because it colours on the `status` column, and status is written by the collector itself.

A collector is only useful if it ran recently and brought data back. Return the `name` of every collector whose most recent run cannot support evidence today.

Table: collectors

name          source  hours_since_run  rows_returned  status
okta-users    okta    2                412            ok
aws-config    aws     30               0              ok
github-prs    github  49               900            ok
jira-tickets  jira    3                0              error
gcp-iam       gcp     1                88             ok
vault-audit   vault   6                15             ok

Freshness rule: a collector must have run within the last 24 hours.
Return one column: name.

Checks

  • Query runs and returns a name column
  • Silent failures are caught
  • Stale collectors are caught
  • Healthy collectors are left out
  • Exactly the unusable collectors
Lab 2 · Triage lab

Triage the collector failures

Briefing 40 XP

Overnight, eight evidence collectors reported. The morning summary is green because the orchestrator only counts non-zero exit codes.

Raise the collectors whose evidence should not be trusted this morning. Leave the ones that are fine.

List only the lines that qualify, worst first. Severity is one of: critical | high | medium | low. Add or delete rows as needed.

Collector report

P-1  okta-admins: wrote 0 bytes, exit code 0, previous day's file left in place and re-stamped with today's date.
P-2  aws-config: 4,102 records, checksum recorded, manifest written.
P-3  github-approvals: partial page fetch, stopped at page 3 of 9, exit code 0.
P-4  gcp-iam: completed, took 40 minutes instead of the usual 6.
P-5  jira-tickets: completed, 1,204 records, one field renamed upstream so a column is now null throughout.
P-6  hris-leavers: wrote to the evidence bucket with no run id and no checksum.
P-7  scanner-findings: completed, checksum recorded, manifest written.
P-8  crowdstrike: completed, record count 3% below yesterday.

Checks

  • The right findings are raised
  • Benign lines are left out
  • Severity matches the actual exposure
  • Ranked worst first

Next on your path · Data & Evidence

Continuous Control Monitoring

Move from point-in-time testing to always-on monitoring with alerting and drift detection.

Engineer 60 min 260 XP
Start next room

Community

Discussion & writeups

Sign in to post

Share how you approached the room or ask where you got stuck. Never paste task answers or full lab solutions: write the reasoning, not the key.

Loading discussion…