| Consent ledger (system of record) |
DynamoDB, keyed on subject_key with captured_at sort key, conditional writes forbidding overwrite, Streams enabled |
Amazon Web Services |
Aurora PostgreSQL append-only table; Kinesis as the log |
A subject key is naturally high-cardinality, so partitioning by it removes hot keys entirely at 2.5 billion current-state records, and Streams gives the projection builder a durable ordered feed without a second system. |
ADR-03 |
| Current-state projection |
DynamoDB single-item-per-(subject, purpose, jurisdiction), version-stamped, rebuilt from the ledger |
Amazon Web Services |
ElastiCache as the primary store; a relational materialised view |
The read is a point lookup at 120,000/second with no range scan, and the store must be rebuildable rather than durable — which rules out anything whose contents cannot be discarded. |
ADR-03 |
| Purpose and lawful-basis registry |
Aurora Global Database, strongly consistent in the primary region, globally readable |
Amazon Web Services |
DynamoDB global tables; a Git repository as the sole source |
The registry is small, highly relational (purpose, version, basis, target), and needs real constraints and transactions; it holds no personal data, which is the only reason it is allowed to be global at all. |
ADR-04 |
| Policy distribution to regions and SDKs |
Signed bundle in S3 fronted by CloudFront, versioned, verified on load |
Amazon Web Services |
Direct reads from the registry; AppConfig |
A decision plane must keep working with the global registry unreachable, so it needs a local artefact with a version it can report — and a signature so a cached bundle cannot be substituted. |
ADR-07 |
| Withdrawal fan-out |
EventBridge, one bus per region, per-subject ordering, one subscription per enforcement point |
Amazon Web Services |
SNS fan-out; Kafka; polling the projection |
Per-enforcement-point subscriptions are what make per-point propagation lag measurable, which is the metric the whole 15-minute ceiling claim depends on. |
ADR-07 |
| Rights-case orchestration |
Step Functions standard workflows, one execution per case, DynamoDB for target outcomes |
Amazon Web Services |
A homegrown saga on SQS; Temporal |
A case runs for up to thirty days across a hundred targets with retries, timers, escalations and human refusal steps; durable resumable execution with per-step history is the requirement, and the history doubles as evidence. |
ADR-10 |
| Identity resolution index |
DynamoDB table with per-item encryption under per-subject KMS data keys, separate authorisation, per-record read audit |
Amazon Web Services |
A graph database; resolution assembled per case from source systems |
A graph engine's traversal power is not needed for alias lookup and would widen what a compromise yields; per-subject keys make the linkage disappear when the subject is crypto-shredded. |
ADR-02 |
| Crypto-shredding |
KMS data key per subject per region, wrapped by a regional CMK with no cross-region grant |
Amazon Web Services |
Application-managed keys in a secrets store; envelope keys per tenant |
Erasure from append-only stores has to be key destruction, and the key boundary has to coincide exactly with the residency boundary, which a regional CMK with no grant enforces structurally. |
ADR-11 |
| Tamper-evident evidence store |
S3 with Object Lock in compliance mode, hash-chained records, independent credentials |
Amazon Web Services |
QLDB; an append-only table in the operational database |
The evidence must survive compromise of the operational plane, so it needs a separate credential domain and a retention mode that the platform's own administrators cannot shorten. |
ADR-15 |
| Batch and campaign-scale evaluation |
Immutable projection snapshot exported to S3, queried with Athena |
Amazon Web Services |
Looping the per-request decision API; a read replica |
A million-subject eligibility question must not share capacity with the read path, and a snapshot gives a single consistent version to report alongside the result. |
ADR-06 |
| Compute for capture, decision and adapters |
ECS on Fargate across three AZs per region, with the decision SDK in-process in consuming services |
Amazon Web Services |
Lambda; EKS |
Steady high-throughput services with warm caches are a poor fit for per-invocation isolation, and EKS adds a control plane this platform does not need for a dozen services per region. |
ADR-01 |
| Subject authentication and step-up |
Cognito for subject identity with step-up for export and erasure; workforce IdP federation for agents |
Amazon Web Services |
The product's own session as sufficient proof |
An unverified erasure request is an attack on the subject, so the verification strength has to be a property of the request type rather than of the session that happens to exist. |
ADR-02 |
| Suppression list distribution |
DynamoDB per region plus a compact snapshot on S3 and CloudFront for local copies |
Amazon Web Services |
A shared database table; a published file per consumer |
Every ingestion and restore path must be able to consult it, including batch paths with no network access to the platform's APIs — so it needs both an online and an offline form. |
ADR-13 |
| Observability |
CloudWatch metrics dimensioned per enforcement point and per purpose, X-Ray on the decision path, findings routed to owning teams |
Amazon Web Services |
Platform-level aggregate dashboards |
Propagation lag and UNKNOWN rate are only meaningful per enforcement point; a platform average hides the single cache that stopped consuming, which is the failure that matters. |
ADR-12 |