Implement AUDIT-WP-0007 hash-chain integrity.
Accept now extends a single-schema chain. Verify walks it; a rewritten payload_hash is a break. Tamper evidence is that detector plus an external chain-head attestation, not WORM.
This commit is contained in:
parent
5faede18fc
commit
5fd04e2095
17 changed files with 696 additions and 29 deletions
|
|
@ -29,8 +29,9 @@ warden route show database-dynamic-credentials --json
|
|||
| Check | Meaning |
|
||||
| --- | --- |
|
||||
| `GET /healthz` | Process is up. Liveness uses this. A database outage must **not** restart the pod. |
|
||||
| `GET /readyz` | Custody is reachable and `custody_class=operational`. Also reports `recoverable_days` (cited platform backup window). Readiness uses this; the pod leaves the Service rather than accept events it cannot store. |
|
||||
| `GET /readyz` | Custody is reachable and `custody_class=operational`. Also reports `recoverable_days` and `tamper_evidence`. Readiness uses this; the pod leaves the Service rather than accept events it cannot store. |
|
||||
| `GET /v1/stats` | In-process counters since start (`accepted`, `duplicate`, `conflict`, `rejected`, `unauthorized`, `forbidden`, `unavailable`, `error`). Resets on restart. Requires `may_read`. |
|
||||
| `GET /v1/integrity` | Hash-chain walk: `{intact, events, head, first_break}`. No payloads. Requires `may_read`. A break is a custody defect, not a sender retry. |
|
||||
|
||||
A missing `AUDIT_CORE_DATABASE_URL` / credential directory is a startup
|
||||
failure (`AUDIT_CORE_REQUIRE_CUSTODY_CLASS=operational`), not a silent
|
||||
|
|
@ -40,7 +41,20 @@ accepted as an alias for one mixed rollout.
|
|||
After a node reboot, `/readyz` failing for tens of seconds is expected:
|
||||
CoreDNS and `platform-pg` come up after the receiver. Liveness stays on
|
||||
`/healthz` so that window does not restart the pod. Walked 2026-08-16
|
||||
(~40s unreadiness, then Ready).
|
||||
(~40s unreadiness, then Ready). That window is not a chain break.
|
||||
|
||||
## Integrity
|
||||
|
||||
Each accept extends a single hash chain for the schema (not per tenant).
|
||||
`python -m audit_core verify-chain` exits 0 only if the walk is intact.
|
||||
`python -m audit_core attest-chain --output docs/evidence/chain-head-<ts>.json`
|
||||
writes the live head **outside** `platform-pg`. Do not put that file in
|
||||
the Barman prefix; a second copy may follow the RESOURCE-WP-0002-T06
|
||||
logical-offsite path. `verify-chain --against <file>` fails if the cited
|
||||
head is not in the live chain.
|
||||
|
||||
A break is a custody defect. Do not "fix" it by accepting the same event
|
||||
again. Reboot unreadiness is unrelated.
|
||||
|
||||
## Lookup
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue