Verify the trail¶
Check from the archive alone that each record object is the one written, each record is the one hashed, and, with seals, that nothing was removed or added.
Before you start¶
-
Use read-only credentials scoped to the installation's prefix and your own copy of the
auditbinary. You need the bucket and the--prefix(itsarchive.prefix). -
For seals, get the thumbprints of the notary's root keys out of band, from
audit key public --thumbprinton the operator's side. Nothing in the bucket,keys/roots.jwksincluded, can add one. -
Verify each profile on its own: two profiles are two runs.
-
Without
--rootthe command checks bytes and hashes only. It cannot show a removed or added object: seals do (0061). -
A seal is due after
--settle(default 10m) and--grace(default 1h). A quiet hour has a seal too, so a missing one is a fault. -
On a profile that demands no lock,
unlockedis information. Under one that does, a missing lock isINVALID. Pass--deploymentfor the check to know. -
Do not pass
--sinkby hand: it records the run through the writer, which only the scheduled job should do. -
An archive written before the v1 layout is not read here. Use the v0.6.x CLI.
Steps¶
- Check records.
audit verify --profile security --from 2026-09-01 --to 2026-09-17 \
--bucket <name> --prefix audit/<application> [--json]
The output is one line per object, valid, unlocked or INVALID: <reason>, and a summary. The exit code is non-zero on any invalid entry.
- Check the seals as well.
audit verify --profile security --from 2026-09-01 --to 2026-09-17 \
--bucket <name> --prefix audit/<application> \
--root <thumbprint>[,<thumbprint>...]
The output adds a line per seal.
- For a store that is not AWS, add
--endpointand--path-style. See put the archive on an S3-compatible store.
Verify¶
The summary's counts match the range you asked for and no seal.* finding appears. A finding is an incident: see investigate a failed verification.
Roll back¶
None. The command only reads.
See also¶
The in-cluster job (audit verify --config) checks the previous day and records audit.seal.verified or audit.seal.failed per ingest hour. A run that checked no seal records none. Every flag is in the audit verify reference.