Audit Log Service  ·  View 11 of 40  ·  3 · Structure

Custody Plane

Assemble, chain, lock, expire — the four things that happen to a record after nobody can change it any more.

Editable source SVG draw.io All views
Assemble — a segment is closed at most 60 seconds after it opens Read Partition Reader ordered, committed Segment Grouping tenant · date · class Write Parquet Writer zstd · per-column Seal Trigger 60 s or 256 MB Chain — hashing forward so that removing anything invalidates everything after Hash Leaf Hashing SHA-256, canonical Segment Merkle Root RFC 6962 style Predecessor Link prev_root in header Sign Checkpoint Builder 15 min, all tenants HSM Signature non-exportable TSA Countersign RFC 3161 Lock — immutability is a storage property, not an application rule Object Immutable Container locked time-based Encryption Scope per-tenant CMK Version-Level Lock no overwrite Record of it Segment Registry PostgreSQL, derived Lifecycle Tiering hot → cool → archive Expire — acting only on records this plane did not create Retention Class 13 mo · 7 yr · 10 yr Hold Check tenant, actor, resource Crypto-Shred destroy segment DEK Disposal Certificate signed, re-ingested Tombstone Node chain stays verifiable Confidential Ledger chain heads only signed head Custody Plane — Seal, Chain, Lock, Expire Application we own Decision point Security / platform External / third party Data store synchronous The lock is set by a locked time-based retention policy on the container. Once locked, the policy can be extended and cannot be shortened, deleted or bypassed — not by the subscription owner, not by a support ticket, and not by the plane that wrote the object. v 1.0 · owner Data & AI Global Practice · date 2026-09

Decisions

  • Immutability is a locked time-based retention policy on the container. Once locked, the policy may be extended and cannot be shortened, deleted or bypassed — not by the subscription owner, not through a support request, and not by the plane that wrote the object.
  • Segments are grouped by tenant, then date, then event class. That partitioning is a retention and residency boundary first and a query optimisation second.
  • Compaction of small segments is permitted only in a form that preserves the original record bytes and carries the original segment roots forward as leaves. A compaction that cannot be verified is a deletion with extra steps.

Numbers

  • A segment closes at 60 s or 256 MB, whichever comes first. At 25 k/s the size bound wins for the largest tenant and the time bound wins for the long tail.
  • Checkpoints are signed every 15 minutes over every tenant head; the RFC 3161 countersignature adds an external clock the service cannot move.
  • Records are capped at 256 KB and rejected above it rather than truncated.

Assumptions

  • Azure Blob version-level immutability plus a locked container policy is treated as equivalent in force to S3 Object Lock in compliance mode. This is the single most load-bearing platform assumption in the set and should be confirmed with Microsoft in writing before build.