What you'll be able to do
- Explain why health data is special-category or protected data in most regimes, and what that changes in a design
- Draw a data-flow diagram with trust boundaries, run STRIDE over it naming the property each threat violates, and use LINDDUN for privacy threats
- Classify data, and give each class handling rules that a pipeline or policy engine can enforce
- Design identity and access for staff, patients, partner organisations, services and a partner API, including tenant isolation with RBAC and ABAC, and break-glass access
- Design encryption and key management: envelope encryption, a per-region key hierarchy, rotation, key custody, crypto-shredding and pseudonymisation
- Design an audit trail that meets QA13 without leaking patient data into logs, and feed it to detection
- Apply privacy by design, residency rules and zero-trust principles; build security into delivery; and prepare the breach response and assurance evidence a customer will ask for
Coverage note. This module turns Module 3's security and privacy ASRs — QA05 (residency), QA09 (TLS 1.3), QA12 (partner isolation), QA13 (PHI access audit) and QA14 (region-loss recovery) — into a design. Module 3 part 2's Security in depth gives the threat-modelling steps, STRIDE and the SEI tactic groups; this module applies them. Regulations appear as examples — the EU and UK GDPR, the US HIPAA rules — because Lumen's jurisdictions are unnamed. Real obligations depend on the actual jurisdictions and on legal advice. The architect's job is to ask the right questions, design for the answers and produce the evidence, not to interpret the law. Primary sources: Shostack, Threat Modeling: Designing for Security (Wiley, 2014); NIST SP 800-207, Zero Trust Architecture (2020); the OWASP Top 10:2025 and ASVS 5.0; and the LINDDUN privacy threat-modelling framework (KU Leuven).
Why health data raises the bar
What makes it special
Most privacy regimes put health data in a protected class of its own.
- Under the GDPR and UK GDPR, data concerning health is a special category (Art. 9). Processing it is prohibited unless one of a short list of conditions applies, such as the provision of health care (Art. 9(2)(h)). Recital 35 counts information collected while registering for or receiving health services — so a booking for "MRI, Tuesday 09:40, centre 12" is health data even without a diagnosis.
- Under the US HIPAA rules, individually identifiable health information held by a covered entity (a provider such as Lumen) or its business associate (a supplier such as the platform's host) is protected health information (PHI). Appointment dates and the fact that care was given can be part of it.
This module uses PHI as shorthand for health information that identifies a patient, whatever a given regime calls it.
The reasons for the higher bar are practical. A leaked diagnosis cannot be rotated like a password. Imaging can reveal pregnancy, cancer or a psychiatric referral, with real risk of stigma and discrimination. And health records are valuable to criminals because they combine identity, contact and insurance details in one place.
What changes for the architect
| Concern | What health data adds (with an example regime) | Where Lumen meets it |
|---|---|---|
| Roles | A controller decides the purposes; a processor acts on its instructions under contract. GDPR Art. 28 requires the contract; HIPAA requires a business associate agreement | Lumen is the controller and the Supplier a processor — the Module 8 assumption, to confirm per region |
| Impact assessment | A DPIA is mandatory for large-scale processing of special-category data (GDPR Art. 35(3)(b)); 4.2 million studies a year is large-scale on any reading | Module 2's objective O4.1: one per region before go-live |
| Accountability for access | Being able to show who read what. HIPAA's Security Rule requires audit controls; the GDPR's accountability principle (Art. 5(2)) requires evidence | QA13 |
| Security of processing | Measures proportionate to the risk; GDPR Art. 32 names encryption and pseudonymisation | QA09, and the encryption section below |
| Transfers | Restrictions on moving data across borders (GDPR Chapter V) | QA05, QA14, QA16 |
| Breach | Notification clocks measured in hours or days | Incident response, below |
| Evidence | Customers ask for certifications and audit reports before they sign | Assurance, below |
Four consequences follow for Lumen. The platform is in scope although it is "only scheduling": a referral, an offer and an appointment are all PHI. Design for the strictest jurisdiction you expect to enter, and make the differences configuration (QA16), not code branches. Accountability shifts the burden of proof: having a control is not enough, you must be able to show it working. And C01, a Supplier-hosted service, puts the Supplier inside the regulated chain together with its own sub-processors, the SMS and email providers among them.
Threat modelling Lumen
Shostack reduces threat modelling to four questions: what are we working on, what can go wrong, what are we going to do about it, and did we do a good job? The first needs a data-flow diagram (DFD): external entities, processes, data stores, the flows between them, and trust boundaries — the lines where data passes between parties or zones that trust each other differently. Every flow that crosses a boundary gives an attacker a foothold, so that is where analysis starts.
The data-flow diagram and its trust boundaries
One region is drawn; the platform zone repeats per region, as in Module 6's physical view. Flows are numbered so that threats and controls can cite them.
Key: rectangles are external entities, rounded boxes are processes, cylinders are data stores, and each labelled box is a trust boundary. Arrows show the direction data flows; the dotted arrow is a key operation.
| Boundary | Separates | Why it matters |
|---|---|---|
| TB1 | The internet from the platform | About 2,790 staff and partner users, and some 2 million patient accounts a year, arrive from devices the Supplier does not control |
| TB2 | Lumen's corporate systems from the platform | Lumen owns the identity services and the referral system; what they send is still input to validate |
| TB3 | The platform in one region, inside its jurisdiction | Everything identifying stays inside its jurisdiction (QA05) |
| TB4 | The automated partner group | A third party with its own security, API and change schedule |
| TB5 | Sub-processors | Message content and contact details leave the Supplier's control |
| TB6 | The central, cross-region zone | Only aggregates and security telemetry without patient identifiers cross into it |
| TB7 | Supplier operations | Privileged people, possibly in another country |
Two choices in the diagram are deliberate. Partner users get their own identity tenant: F06 left them as an open question, and the identity section explains the answer. And the edge inside TB3 is not a trusted perimeter: flows behind it still use mTLS, as zero trust (below) requires.
STRIDE, mapped to the property each threat violates
STRIDE (Kohnfelder & Garg, Microsoft, 1999) names each threat after the security property it breaks. Reading it as threat → violated property → control family is what turns a list of letters into design work.
| Threat | Property violated | Question to ask of each element | Typical control family |
|---|---|---|---|
| Spoofing | Authentication | Can someone pretend to be this user, service or system? | MFA, federation, mTLS, signed tokens |
| Tampering | Integrity | Can data be changed in transit or at rest without detection? | TLS, signatures and checksums, input validation, WORM storage |
| Repudiation | Non-repudiation (accountability) | Can someone deny an action, and could we prove otherwise? | Audit trail, chained or signed logs, synchronised clocks |
| Information disclosure | Confidentiality | Can data reach someone not entitled to it? | Authorisation, encryption, minimisation |
| Denial of service | Availability | Can someone stop legitimate use? | Rate limits, quotas, autoscaling, bulkheads |
| Elevation of privilege | Authorisation | Can someone do what their role does not allow? | Least privilege, policy enforced at every layer, safe input handling |
Not every threat applies to every element. Microsoft's STRIDE-per-element convention narrows the pass: external entities face spoofing and repudiation; processes face all six; data flows face tampering, disclosure and denial of service; data stores face tampering, disclosure and denial of service, plus repudiation when the store is a log. On Lumen's diagram that turns a blank page into a finite list of element–threat pairs, most of which close quickly.
A STRIDE pass over one flow
DF8, the referral extract, shows why a flow from the customer's own system still crosses a boundary. The platform is a polling consumer of the extract (Module 9, part 2); assume — the case does not say — that it fetches each one from a file endpoint Lumen IT exposes.
| Threat on DF8 | Property | Control | ASR | |
|---|---|---|---|---|
| S | A spoofed endpoint, reached through DNS or routing compromise, serves a forged extract that cancels real referrals | Authentication | Fetch over mTLS with Lumen's server identity pinned, or over private connectivity | QA09, QA11 |
| T | An extract is altered at rest in the landing zone | Integrity | Lumen IT signs a manifest per extract (hash and sequence number); unsigned or mismatched files are quarantined | QA11 |
| R | Lumen IT and the Supplier disagree whether a cancellation was in a given extract | Non-repudiation | Record each extract's hash, sequence number and arrival time in the audit trail | QA13 |
| I | The extract carries more than scheduling needs — full clinical history, say | Confidentiality | Agree a minimised extract schema; encrypt the landing zone; delete processed files after 7 days (assumption) | — (none yet; candidate new ASR) |
| D | An oversized or malformed extract stalls ingestion, or a missing one goes unnoticed | Availability | Size and schema limits, quarantine, an alert on a sequence gap (finding 4 of Module 8's worked answer) | QA11 |
| E | A referral note carries script that later runs in a desk user's browser (stored cross-site scripting) and acts with that user's rights | Authorisation | Treat extract fields as untrusted input: validate on ingest, encode on output, enforce a content security policy | — (none yet; candidate new ASR) |
The elevation-of-privilege row is the one teams miss. The attacker never touches the platform directly, yet ends up acting with a desk user's rights.
LINDDUN for privacy threats
STRIDE protects the system from attackers. LINDDUN (Deng, Wuyts, Scandariato, Preneel & Joosen, KU Leuven, 2011; maintained at linddun.org) protects people from the system — including from its legitimate operators — and runs over the same DFD. Its seven categories, under their current names, with a Lumen example of each:
| Category | Privacy property at risk | Lumen example | Design response |
|---|---|---|---|
| Linking | Unlinkability | One pseudonym used across every analytics dataset lets an analyst join a patient's studies across centres and years | A different keyed pseudonym per purpose |
| Identifying | Anonymity, pseudonymity | "One paediatric MRI at partner X in week 12" in a central report singles out a child | Minimum cell sizes; fixed report definitions |
| Non-repudiation | Plausible deniability | Feedback shown to the partner with the patient's name discourages honest complaints | Partners see feedback without patient identity |
| Detecting | Undetectability | An SMS from "Lumen Imaging" on a shared family phone reveals that someone is having a scan | Minimised notification content; the sender name decided with the DPO |
| Data disclosure | Confidentiality, minimisation | A partner sees the referral reason when it needs only modality, body part and preparation | Field-level minimisation per role |
| Unawareness and unintervenability | Transparency, control | Patients do not know which partner receives their details, and cannot change how they are contacted | Privacy notice in the portal; contact preferences; a rights-request path |
| Non-compliance | Lawfulness, storage limitation | Archived records are never deleted because nothing enforces the schedule | Automated retention, with evidence |
Note the inversion: STRIDE treats non-repudiation as a property to protect, and LINDDUN treats it as a threat. Both are right, in different places — staff actions must be undeniable, while patient feedback often should not be attributable. LINDDUN GO, a card-based variant, makes a first pass practical in a workshop of an hour or two.
Data classification
Controls follow classification. A class is useful only when it comes with handling rules specific enough for a pipeline or a policy engine to enforce.
| Class | What it covers at Lumen | Where it may be stored | Protection | Must never appear in |
|---|---|---|---|---|
| 1. Restricted — PHI | Anything linking an identifiable patient to a referral, booking, modality, body part, urgency, centre, preparation or feedback; patients' contact details (being on Lumen's list is itself health information); audit records of access to patient data; pseudonymised patient records | Only in the patient's jurisdiction — its home region and the in-jurisdiction recovery region — including backups, DR copies and the search index (QA05, QA14) | Regional keys; field-level encryption with per-patient keys for clinical free text, archives and event logs; ABAC; every access audited (QA13) | Operational logs, URLs, SMS and email bodies, support tickets, non-production environments, cross-region stores |
| 2. Confidential — personal | Staff and partner-user accounts: name, work email, phone, role, sign-in history | The region of the employing organisation, by default | Encryption at rest; role-based access | Patient-facing surfaces; logs beyond a user ID |
| 3. Confidential — commercial | Partner pricing, capability, contracts and slots; rules and workflow definitions; financial reports | Anywhere in the platform: no personal data | Encryption at rest; tenant isolation, because one partner's pricing is confidential from another's (QA12) | Other partners' views |
| 4. Internal — aggregate | Counts and sums by centre, partner, modality and week, with small cells suppressed and no patient identifiers | May cross to the central reporting store (Module 6) | Suppression threshold; a privacy review of each new report definition | Ad-hoc query access over the central store |
| 5. Public | Centre addresses, opening hours, help pages | Anywhere | Integrity only | — |
Four rules make the table work:
- Classify at field level in the data model, and let the highest class in a record set the record's class. A slot is class 3 until a patient is booked into it; the booking is class 1.
- Derived data inherits its source's class unless an approved transformation — aggregation with suppression — lowers it. Pseudonymised data stays class 1: under the GDPR, for example, it is still personal data (Recital 26), as Module 6's physical view warned.
- Tags drive automation. Log scrubbers, data-loss checks in the pipeline and infrastructure policies read the class, not a hand-maintained list of fields.
- Secrets and keys sit outside the scheme. They never appear in code, configuration, images, logs or tickets — only in the secrets manager and the KMS.
Identity and access
Four populations, four identity sources
Module 4 introduced federated identity: the platform accepts signed tokens from an identity provider instead of keeping passwords. Lumen needs four providers, because its populations differ in assurance, lifecycle and risk.
| Population | Size (from the case) | Identity source | Protocol | Lifecycle and assurance |
|---|---|---|---|---|
| Lumen workforce — desk, managers and administrators, centre staff | ~1,290 | Lumen's corporate SSO | OIDC, or SAML 2.0 if that is what Lumen's identity provider offers | MFA enforced by Lumen. Leavers are removed in Lumen's directory and the change is pushed to the platform by SCIM, so access ends that day rather than at the next sign-in |
| Patients | ~2 million accounts a year | Lumen's patient identity service — a customer identity (CIAM) service | OIDC, authorisation-code flow with PKCE | Ask how identities were proofed and how accounts are recovered; recovery is the usual weak point. NIST SP 800-63-4 (2025) gives the vocabulary of identity, authentication and federation assurance levels |
| Partner users | ~1,500, doubling | Neither — F06's open question. Proposed: a separate partner identity tenant, with federation for partner groups that run their own provider | OIDC | MFA mandatory. Each practice's partner administrator invites and removes its own users (delegated administration) and recertifies them quarterly (assumption) |
| Supplier operations | The support and platform team | The Supplier's own workforce identity | OIDC | Phishing-resistant MFA, managed devices, and privileged access only through just-in-time elevation |
SAML 2.0 carries XML assertions through the browser and is common in older enterprise identity providers. OIDC, a JSON and JWT layer on OAuth 2.0, suits single-page and mobile clients as well as APIs. Support whichever Lumen's provider speaks for the workforce, and use OIDC for patients and partners. Do not merge populations to save a provider: a radiographer who is also a patient has two identities, so a staff role can never be reached through a patient sign-in.
Partner organisations as tenants
QA12 makes each of the ~600 partner practices a tenant of one shared portal. Two authorisation models combine:
- RBAC (role-based access control) answers coarse questions: may a partner coordinator upload slots? May centre staff see the day list?
- ABAC (attribute-based access control) answers the question isolation depends on: may this user see this booking? The answer depends on attributes of the user, the resource and the moment.
An illustrative policy, not any product's syntax:
permit partner_user read booking
when user.partner_id == booking.assigned_partner_id
and user.region == booking.region
and booking.stage in [Offered, Accepted, Confirmed, Completed]
and now <= booking.completed_at + 30 days
The last line is purpose limitation in code: a partner needs the patient's details to deliver the study, not for ever. The 30 days are an assumption to agree with the DPO. Policy engines such as Open Policy Agent (Rego) or Cedar keep rules like these out of application code, versioned and testable.
Enforce isolation at every layer, because each catches what the others miss:
- The token carries
partner_id, set by the identity tenant at onboarding. The portal never sends it, and the API never trusts one that arrives in a request. - Every endpoint checks object-level authorisation. QA12's URL-editing attack is item API1, Broken Object Level Authorization, in the OWASP API Security Top 10 (2023), and Broken Access Control is still first in the OWASP Top 10:2025.
- The data layer applies row-level security keyed on the session's
partner_id, so a forgotten check returns nothing rather than another partner's rows. - Responses say "not found", never "forbidden", so they do not confirm that a record exists — QA12's specified response.
- Tests and detection close the loop: QA12's automated tests over every partner-facing endpoint at each release, and an alert after 5 refusals in 10 minutes.
Least privilege and break-glass access
Least privilege means each role gets what its work needs and no more. Desk users see referrals in their own region's queue; centre staff see their centre's day list; the Scheduling Manager configures rules without browsing patient records; reporting users see aggregates; Supplier engineers see no PHI by default. Standing administrative rights are replaced by just-in-time elevation — requested, approved, time-limited and recorded. A quarterly access review by each role's owner (assumption) catches the drift that joiners and movers create.
Least privilege will sometimes block urgent, legitimate work: a desk in one region covering another region's queue during a centre closure (QA15), or an engineer repairing a corrupted booking at 02:00. Break-glass access is the designed exception:
- a separate, visible action, never a hidden permission;
- a mandatory reason and ticket reference;
- scope limited to one patient or one queue, and time limited (4 hours, assumption);
- a flagged audit record, and an immediate alert to the security team and Lumen's privacy office;
- review within one working day, checking the stated reason against what was actually opened.
Keep separate emergency accounts, their credentials sealed and stored offline, for the day the identity provider itself is down; any use raises an alert. Break-glass never overrides residency: an engineer in another jurisdiction still goes through the support-access rules below.
Service-to-service identity
Behind the edge, services authenticate each other as strictly as users. Each workload gets an identity issued by the platform — a SPIFFE ID through a service mesh, or the cloud provider's workload identity — carried in a short-lived certificate that rotates automatically every few hours. That gives mTLS on every hop, as Module 6's physical view recommends, and lets authorisation name services: only the notification worker may call the messaging adapters, and only the audit service may write to the audit store.
The same identity removes static credentials. Services gain cloud permissions through workload identity federation and receive database credentials as short-lived secrets from a secrets manager, so there is no password in configuration to leak. A service mesh makes mTLS uniform; the cost is one more platform component to run and upgrade.
The automated partner API
The platform calls the partner group's scheduling API (F02, and Module 5's booking flow), so the partner's authorisation server decides how it authenticates — Module 8 gives the partner group that decision. What to ask for:
- the OAuth 2.0 client credentials grant (RFC 6749 §4.4): machine to machine, with no user in the loop;
- client authentication by a signed JWT (
private_key_jwt) or mutual TLS (RFC 8705) rather than a shared client secret, with the private key held in the KMS or the secrets manager; - sender-constrained tokens — certificate-bound (RFC 8705) or DPoP (RFC 9449) — so a stolen token cannot be replayed from elsewhere;
- narrow scopes (read availability, create booking) and tokens that live for minutes, not days;
- one client registration per region, so a compromise is contained to one region and the partner can see which region is calling.
RFC 9700, Best Current Practice for OAuth 2.0 Security (2025), collects the current guidance. If the partner group later pushes availability changes to the platform, reverse the pattern: the platform's API accepts client-credentials tokens bound to that partner's partner_id, validates every payload and rate-limits the caller. Either way, send the partner only what a booking needs.
Encryption and key management
In transit
QA09 requires TLS 1.3 (RFC 8446) on all authenticated traffic, and Module 6's physical view already terminates TLS at the edge and re-encrypts with mTLS inside the region. Three additions:
- Check every counterparty in discovery. The partner API, the referral endpoint and the messaging providers may not all offer TLS 1.3. One that cannot is a QA09 risk to record and resolve, not a reason to quietly allow TLS 1.2.
- Know where your control ends. Email crosses the internet from the provider to the patient's mail server over whatever that server negotiates, and SMS crosses carrier networks. Transport there is not yours to secure, which is why notification content is minimised.
- Automate certificates — issuance, renewal, short lifetimes — so that an expired certificate never becomes an outage.
At rest: envelope encryption and a regional key hierarchy
Envelope encryption encrypts data with a data encryption key (DEK), generated and used locally, then encrypts — wraps — the DEK with a key encryption key (KEK) that never leaves the key management service (KMS) and its hardware security modules (HSMs). The wrapped DEK is stored beside the data. Bulk data never travels to the KMS; rotating a KEK means re-wrapping DEKs, not re-encrypting data; and every unwrap is a logged, permission-checked call, so revoking one KMS permission makes the data unreadable.
Use two layers:
- Storage-level encryption of every volume, database, bucket and backup, under customer-managed keys. It defeats lost media and provider-side access to storage, but not an attacker who holds application or database credentials.
- Field-level encryption of the most sensitive fields — referral reason, clinical free text, patient contact details — so that a database dump or a curious administrator sees ciphertext. It costs queryability: ciphertext cannot be range-searched or sorted, and exact-match lookups need a blind index (a keyed hash stored beside the field).
QA05 makes the hierarchy regional. Each region's KMS holds its own keys, which cannot be exported, and a key policy refuses requests from other regions' workloads — so a copy that leaks across a border is unreadable (Module 3's encrypt with in-jurisdiction keys tactic). QA14 adds a constraint: the recovery region needs the keys too, so it must sit inside the same jurisdiction. Where a provider has only one region in a jurisdiction — the trade-off point Module 3 flagged — the key design and the DR design fail together.
The numbers shape the hierarchy. Assume, illustratively, $1 per key a month and $0.03 per 10,000 requests; check current prices. One KMS key per patient, at about 2 million patient accounts a year, would cost about $2 million a month after one year, and rising. Five KEKs per region across four regions cost about $20 a month. Requests barely register: even one unwrap per patient session — 25,200 a day, about 630,000 a month over 25 operating days — costs about $2. Per-key fees, not request fees, are what rule out a KMS key per patient. So per-patient DEKs live in a key table inside the jurisdiction, wrapped by a KEK, and unwrapped DEKs are cached in memory for minutes.
Rotation, and who holds the keys
Rotation limits how much data one key protects and how long a stolen key stays useful. Rotate KEKs yearly (assumption): the KMS keeps old versions for decryption, and DEKs are re-wrapped as they are used. Generate new DEKs per period for new data. A suspected compromise is different: it means re-encrypting data under new keys, which takes hours to days at 6.5 million live records. Plan and rehearse it, rather than discover its cost during an incident.
Custody — who controls the key material — is a decision Lumen will have views on, because keys are what would let it cut the Supplier off.
| Option | Who holds the key material | What it buys | What it costs |
|---|---|---|---|
| Provider-managed keys | The cloud provider, invisibly | Nothing to run | No separation from the provider; no control over deletion, so no crypto-shredding |
| Customer-managed keys in the provider's HSM-backed KMS (customer = the cloud account holder, here the Supplier) | The Supplier, through key policies | Per-use audit, rotation, revocation, region binding | KMS quotas and per-key fees |
| Bring your own key (BYOK) | Generated in Lumen's own HSM, then imported | Proof of origin; an escrow copy; the ability to delete the imported material | Once imported, the provider's KMS uses it like any other key: little extra control in operation |
| Hold your own key (HYOK), or an external key store | The customer's HSM, outside the provider; every unwrap calls out to it | The customer can cut off access unilaterally | The customer's HSM joins the booking path: its availability and latency now count against QA01 and QA02 |
| Dedicated HSM | A single-tenant HSM, validated to FIPS 140-3 | Meets rules that demand dedicated hardware | Cost, and you run its availability yourself |
The worked answer records Lumen's choice as an ADR.
Crypto-shredding for erasure
Some stores cannot delete a row. Backups are immutable for their retention period; WORM archives refuse deletion by design; event logs and event-sourced stores are append-only (Module 4); and Lumen archives every record after 18 months online. Crypto-shredding solves erasure for all of them at once: encrypt each patient's data in those stores under that patient's own DEK and, to erase, destroy the key. Every copy of the ciphertext, wherever it is, becomes unreadable.
Five caveats decide whether it works:
- The key table has backups too. If they outlive the erasure deadline, they resurrect the key. Keep the key table's backup retention shorter than the deadline.
- Plaintext copies are not shredded — an export, a log line, an email already sent. Shredding only works alongside minimisation and log hygiene.
- Audit records under legal retention need their own key scope, or erasing a patient also destroys the evidence of who accessed their record.
- Whether ciphertext without its key still counts as personal data varies by regulator. Ask the DPO.
- Erasure of health data is often limited. The GDPR, for example, exempts processing needed for health care or for a legal retention duty (Art. 17(3)). In practice the end of a retention period is the commoner trigger, and the same mechanism serves both. Lumen, as controller, decides which applies.
Pseudonymisation and tokenisation for analytics
Pseudonymisation replaces identifiers so that data cannot be attributed to a person without additional information kept separately (GDPR Art. 4(5)). It reduces risk; it does not make data anonymous.
- A keyed hash (an HMAC with a regional secret) is deterministic, so analysts can join one patient's records within a dataset, yet nobody can reverse it by hashing a list of known patient IDs without the key.
- Tokenisation substitutes a random token and keeps the mapping in a vault, which only the vault service can reverse. Use it where an authorised process must get back to the patient — a clinical-safety follow-up prompted by an analytics finding, say.
Lumen's partner-performance and time-to-offer analytics run inside the jurisdiction on pseudonymised records, with a different key per purpose (LINDDUN's linking). Quasi-identifiers are coarsened: age bands instead of dates of birth, postcode districts instead of full postcodes. Only aggregates leave the jurisdiction.
Audit logging
QA13 says that every read or change of PHI writes an audit record, and that one patient's access history can be produced within an hour. That is three designs: what a record holds, how it is protected, and how it is found.
What an audit record holds
| Field | Content | Why |
|---|---|---|
| Who | User ID, role, partner_id or centre, session ID; for system actors, the service identity | Attribution |
| Whose data | The patient key — an internal opaque ID, never a name | QA13's one-patient query |
| What | Action (read, create, update, export, print), resource type and resource ID | The scope of any exposure |
| When | UTC timestamp from synchronised clocks | Timelines that hold up in an investigation |
| Where | Region, client address, device or user agent | Detecting misuse; showing residency |
| Why | Purpose or reason code; mandatory free text for break-glass | Purpose limitation, made reviewable |
| Outcome | Allowed or denied, and the policy that decided | QA12's refusals are audit events too |
What a record must not hold: the clinical content that was read, request or response bodies, free-text notes, tokens or secrets. The audit trail proves that a record was accessed, not what it said.
Audit every path to patient data: the portals and APIs, the referral sync and the partner adapter, exports and prints, configuration changes that alter patient outcomes (QA10's rules), and direct database access by administrators. Emit records from one shared component at the service boundary — an interceptor every PHI endpoint passes through — so that a new feature cannot forget. A build check that fails when a PHI endpoint lacks the audit annotation turns QA13 into a fitness function.
Volume, as a sizing check. Assume about 20 audited accesses per referral across all actors: patient portal views, desk triage and booking, the centre's day list, the partner, and the system's stage changes. 14,000 × 20 = 280,000 records an operating day; over 300 operating days, about 84 million a year. At an assumed 1 KB each that is about 84 GB a year, or ≈ 118 GB at year-3 volumes (× 1.405) — trivial to store. The effort goes into QA13's one-hour query across more than a hundred million records (≈ 126 million online, over the 18-month searchable period), which needs an index by patient key. So keep two copies inside the jurisdiction: a searchable audit index for the online period, and the WORM archive as the evidential copy.
Fail closed or fail open? If the audit write fails, should the read proceed? QA13 says no record, no access. To stop that costing QA01, each service writes its records synchronously to a highly available, in-region durable buffer and ships them to WORM asynchronously. The buffer then takes a share of the booking path's availability budget — a trade-off point between QA13 and QA01, in Module 8's vocabulary.
Immutability and retention
- WORM storage: object storage with a compliance-mode retention lock, which even the account's own administrators cannot shorten.
- Separation of duties: the audit store lives in a separate account or subscription, administered by people who do not run the platform.
- Tamper evidence: records chained by hash, or periodic signed digests, so that a missing or altered range is detectable.
- Retention from Lumen's schedule (illustratively 6 years), with legal hold for investigations. Audit records are class 1 data themselves: they stay inside the jurisdiction, and only the privacy office and investigators read them.
Keeping patient data out of operational logs
The audit trail is a regulated record that identifies patients by key, on its own pipeline. Operational telemetry — application logs, traces, metrics, error reports — must hold no PHI at all, so that on-call engineers can use it freely. Module 3 part 2's PHI-safe telemetry sets the rules: opaque correlation tokens instead of identifiers, an attribute allow-list and redaction at the collector, no person-level metric labels, and QA05 applied to telemetry too — a scrubber that misses one field should be a defect, not a cross-border transfer. Three additions:
- Keep PHI out of URLs. Paths carry opaque IDs and query strings carry nothing personal, because URLs end up in proxy, CDN and browser-history logs.
- Turn off payload capture in error-tracking and APM tools. Each one is a sub-processor, and most capture request data by default.
- Prove it with a log canary: synthetic patients in pre-production carry distinctive fake values, and a scheduled job searches every log store for them. A hit fails the release.
SIEM and detection
A SIEM (security information and event management system) collects security events and runs detection rules over them. Feed it authentication events, QA12 refusals, role and privilege changes, break-glass use, KMS anomalies, web application firewall events, administrative sessions and configuration changes. These events carry no patient identifiers by construction, so one central SIEM, and a follow-the-sun security team, can serve every region — provided Lumen's DPO accepts staff and partner user IDs crossing borders. Investigators pivot from an alert into the in-region audit index.
| Detection use case | Signal | Response |
|---|---|---|
| Cross-partner probing | 5 refusals in 10 minutes for one user (QA12) | Alert; lock the account at a higher threshold |
| Bulk lookup | A desk user opens far more patient records than their own 30-day pattern, or records outside their queue | Alert to the privacy office for review |
| Snooping | Access to records flagged as staff or public figures | Reason required at the time of access; alert |
| Account takeover | Sign-in from an unexpected country, impossible travel, repeated MFA prompts | Step-up authentication; revoke sessions |
| Break-glass | Any use | Immediate alert; review within one working day |
| Audit gap | A service keeps serving requests while its audit records stop | Page on-call: a broken audit path is a security incident |
Privacy by design
Cavoukian's Privacy by Design: The 7 Foundational Principles (Information and Privacy Commissioner of Ontario, 2009) made privacy a design property, proactive and on by default. The GDPR wrote the idea into law as data protection by design and by default (Art. 25). For an architect it comes down to four practices.
Minimisation, purpose limitation and retention
For every data element, record its purpose, who needs it and for how long — the data inventory under the classification table. Then remove whatever fails the test:
- Partners need the patient's name, contact details, modality, body part and preparation — not the referral reason or clinical history, unless Lumen's clinical lead decides a study type requires them.
- Notifications need nothing clinical.
- Analytics needs no names.
- The referral extract should carry only the fields the platform uses: a request to Lumen IT, made in discovery.
Purpose limitation stops data collected for scheduling being reused — for marketing, say, or to train a model — without a new lawful basis. Module 11 asks the same question of training data.
A retention schedule turns storage limitation into something enforceable. The periods are Lumen's to set as controller; the architect makes each one automatic and evidenced.
| Data | Kept | Then | Basis |
|---|---|---|---|
| Appointment and study records | 18 months online | Archive; crypto-shred at the end of the archive period Lumen sets | The case |
| Referral extracts in the landing zone | 7 days | Delete | Assumption |
| Notification bodies | Not kept by the platform: template ID and delivery status only | Provider-side retention set to the provider's minimum | Assumption |
| Partner-visible patient details | Until 30 days after Completed | Hidden from the partner; the record itself follows the first row | Assumption (the ABAC rule above) |
| Audit trail | Searchable for 18 months; WORM for the full period (illustratively 6 years) | Delete at expiry | Assumption |
| Backups | 30 days | Expire | Assumption |
| Operational logs | 30 days | Delete | Assumption; they hold no PHI |
Data-subject rights
Most regimes give patients rights over their data. Taking the GDPR's as the example — access, rectification, erasure, restriction and objection, answered within a month, extendable in some cases (Art. 12(3)) — the architecture needs:
- a data map of every store that holds a patient key, so that one request reaches all of them, archive and analytics included;
- a rights-request workflow in the Administration Portal for Lumen's privacy office, with the requester's identity verified through the patient identity service;
- rectification at the source: referral data is mastered in Lumen's referral system, so corrections go there and arrive through the extract, and the platform does not fork the record;
- erasure where it applies, through crypto-shredding;
- an access-history report, which QA13 already produces within an hour; some regimes let patients ask who has seen their record.
The DPIA
The controller owns the DPIA. At Lumen the Sponsor is accountable for each region's assessment and the DPO advises (Module 2's RACI). Under the GDPR the controller must seek the DPO's advice (Art. 35(2)), and the processor must help (Art. 28(3)(f)) — which is why the Solution Architect is Responsible for drafting it. The assessment describes the processing and its purposes, tests necessity and proportionality, assesses the risks to patients, and sets out the measures that address them.
This module's outputs — the DFD, the classification, the controls matrix, the residency design and the retention schedule — form its technical annex. Plan one per region before go-live (O4.1), and revisit it on every material change: a new region, a new sub-processor, a new use of the data. If high risk remains after the measures, the GDPR requires prior consultation with the supervisory authority (Art. 36), which can take weeks. That belongs in the delivery plan's risk log, not in a surprise before launch.
Aggregate-only cross-region reporting
Module 6's physical view sends only aggregates without patient identifiers to the central store. Aggregates can still identify people, so two safeguards go with them:
- Small-cell suppression. Any cell below a threshold — 10, illustratively; the DPO sets it — is suppressed or merged, and rare combinations are coarsened.
- Fixed report definitions rather than ad-hoc queries over the central store, because two overlapping aggregates can be subtracted to isolate one person (a differencing attack). Each new definition gets a privacy review.
Residency and cross-border flows
What may cross a border
QA05 keeps patient data in the jurisdiction where it was collected. The design has to say exactly what may leave.
| Data | Crosses a border? | Condition |
|---|---|---|
| Patient-level records, search index, backups, DR copies, audit records | No | DR uses a recovery region inside the jurisdiction (QA14) |
| Pseudonymised patient records | No, by default | Still personal data under the GDPR, for example; only with a transfer mechanism the DPO confirms |
| Encryption keys | No | Each region's KMS is the only place its keys exist |
| Aggregates with small-cell suppression | Yes | To the central reporting store (Module 6) |
| Partner slots, pricing and capability; the centre directory | Yes | No personal data; tenant isolation still applies |
| Configuration, rules, workflow definitions, code, images | Yes | No personal data — region as configuration (QA16) |
| Security telemetry without patient identifiers | Yes, if the DPO agrees | Staff and partner user IDs are personal data too |
Three mechanisms enforce the table. Module 8's residency fitness function and region-restricting guardrail stop stores being declared in the wrong place. Egress control makes each region's network refuse outbound traffic except to allow-listed destinations: the messaging providers, the partner API and the central reporting endpoint. And Module 3's tactic binds each request to its region at the identity boundary. Until the new jurisdiction's regulatory position arrives (Module 2's dependency D1), keep everything in region.
Support access from another region
A Supplier that supports the service around the clock will have engineers in other countries. In the EDPB's reading of the GDPR, remote access from another country by a separate entity — a group affiliate or sub-processor — is a transfer even if nothing is stored there; access by the Supplier's own staff abroad may not be, but carries its own risks. Ask the DPO which applies. Either way, a jump host in the region keeps the data's storage local, not the access. The design:
- Day-to-day support works from telemetry, which holds no PHI.
- Access to patient data goes through the break-glass path — just in time, approved, scoped and recorded, through an in-region bastion.
- Only named engineers in locations the DPO has approved may use it, with a transfer mechanism in place wherever the access counts as a transfer — standard contractual clauses or an adequacy decision, in GDPR terms.
- Support tools mask PHI by default, and ticket attachments are scanned, because a patient's screenshot pasted into a SaaS ticketing tool is a transfer to yet another sub-processor.
Sub-processors and notification content
The email and SMS providers are sub-processors: they process patient data on the Supplier's behalf. Under the GDPR the controller must authorise sub-processors, individually or by general written authorisation with a right to object (Art. 28(2)), and the Supplier must pass its own obligations down to them (Art. 28(4)); HIPAA's chain of business associate agreements works the same way. For each provider, establish where it processes and stores content and logs, how long it keeps message bodies, whether it uses the data for its own purposes, and how quickly it reports a breach. Patients' phone numbers and email addresses are class 1, because being on Lumen's list reveals a diagnostic-imaging relationship.
Volume makes the content rule urgent: about 2.1 million SMS and 2.1 million emails a month, each a disclosure to a third party and to whoever sees the patient's lock screen. SMS is not end-to-end encrypted: carriers and aggregators handle it in clear. It previews on locked phones, lands on shared family phones, and reaches whoever inherits a recycled number. So:
- No clinical detail in any SMS: no modality, body part, referral reason or urgency, and no preparation instruction that implies the study ("no food for six hours before your scan with contrast"). No full name and no date of birth.
- A neutral message and a link: "Lumen: there is an update to your appointment. Sign in to view it." Patients who opt in may also receive the date, time and town — never what the study is.
- Links carry no PHI. They lead to sign-in, or to a short-lived, single-use token that shows one confirmation and nothing else.
- Email subjects stay neutral; the detail sits behind sign-in in the portal.
- The sender name reveals the relationship. Recognisability pulls against privacy here; put the trade-off to the DPO rather than settle it in a template.
The rule has a cost side too. SMS is priced per segment of 160 GSM-7 characters, so a message with a study description and a long link spills into a second segment — and SMS is already the largest line in the run-cost model, at ≈ $12,600 a month at the course's illustrative prices (Module 9's worked cloud cost model). Because templates are configuration (QA10), the rule has to be checked whenever a template changes, not once at go-live — the new ASR QA19 in the worked answer.
Zero trust
NIST SP 800-207, Zero Trust Architecture (Rose, Borchert, Mitchell & Connelly, 2020), moves defences from the network perimeter to users, assets and resources: no trust is granted because of where a request comes from or who owns the network. A policy decision point — NIST's policy engine and policy administrator — decides each request, and a policy enforcement point in front of the resource applies the decision. NIST states the model as seven tenets. In paraphrase, applied to Lumen:
| Tenet (paraphrased) | Applied to Lumen |
|---|---|
| Every data source and computing service is a resource | The referral landing zone, the CI/CD pipeline, the KMS and the SIEM are protected like the portals |
| All communication is secured, whatever the network location | mTLS inside the region; no "trusted" internal network |
| Access is granted per session | Short-lived tokens; no standing administrative access |
| Access is decided by dynamic policy — identity, application, device, behaviour and environment | ABAC for partners; Supplier administrators only from managed devices; step-up MFA for unusual sign-ins |
| The integrity and security posture of every asset is monitored | Signed images and admission control; vulnerability scanning; device posture for administrators |
| Authentication and authorisation are enforced, dynamically, before every access | Enforcement at the gateway and in each service, with one policy engine deciding |
| As much as possible is collected about assets, network and communications, and used to improve security | The SIEM, its detection use cases, and post-incident reviews |
Zero trust has a limit at Lumen: patients' and partners' devices are unmanaged, so posture checks cannot apply to them. Where the device cannot be trusted, compensate with MFA, short sessions, rate limits and no bulk export from the partner portal.
Secure delivery
Many breaches enter through software the team ships or depends on, so the delivery pipeline is part of the security architecture. The OWASP Top 10:2025 added A03, Software Supply Chain Failures, widening 2021's vulnerable and outdated components to compromises anywhere in building, distributing or updating software: dependencies, build systems and the pipeline itself.
| Stage | Control | Blocks the release when |
|---|---|---|
| Commit | Secret scanning before push and on the server; a protected main branch with two-person review | A secret or an unreviewed change appears |
| Build | SAST; software composition analysis of dependencies; an SBOM per build, in CycloneDX (Ecma-424) or SPDX (ISO/IEC 5962:2021) | A critical finding has no recorded exception |
| Package | Image scanning; images signed (with Sigstore, for example) and carrying build provenance at a SLSA build level | An image is unsigned or has no provenance |
| Infrastructure | IaC scanning and policy as code — Open Policy Agent, or the cloud's own policy service — for residency, encryption, logging and no public storage | A store is declared outside its region, unencrypted or public |
| Deploy | Admission control verifies signature and provenance; production changes only through the pipeline | Anything arrives from outside the pipeline |
| Test | DAST with ZAP against staging, authenticated as two test partners; QA12 isolation tests; the log canary | Cross-partner access succeeds, or a canary value appears in a log |
| Run | Deployed SBOMs matched continuously against new vulnerability disclosures; patch targets by severity (assumption: critical within 7 days); a penetration test before go-live and yearly | — |
The SBOM pays for itself the first time a library vulnerability makes the news: "which services, in which regions, run the affected version?" becomes a query rather than a week of searching.
Secrets management. One secrets manager per region, or a vault product such as HashiCorp Vault or OpenBao; dynamic, short-lived database credentials; workload identity instead of stored cloud keys; automated rotation; and the scanning above to catch the leaks that happen anyway.
Policy as code serves twice. Preventive policies stop a non-compliant resource being created — Module 8's guardrails — and detective ones flag drift in what already runs. The same policy files, with their results, are assurance evidence. Verification standards give testers a yardstick: OWASP ASVS 5.0 (2025) for the portals, at a level you choose and record, and the OWASP API Security Top 10 (2023) for the APIs.
Non-production data. No production PHI in development or test. Generate synthetic patients — at year-3 volumes for performance tests — so that test environments hold nothing above class 3.
Incident response and breach notification
NIST SP 800-61 Rev. 3 (2025) recasts incident response as part of risk management, organised around the six functions of the NIST Cybersecurity Framework 2.0 — Govern, Identify, Protect, Detect, Respond and Recover — rather than as a separate lifecycle. The architect's part is to make sure detection, containment and scoping are designed in, not improvised on the day.
Notification law sets the clock. Two regimes as examples — Lumen's obligations depend on its actual jurisdictions:
| Example regime | Who notifies whom | Clock |
|---|---|---|
| GDPR / UK GDPR | Processor → controller | Without undue delay (Art. 33(2)) |
| Controller → supervisory authority | Without undue delay and, where feasible, within 72 hours of becoming aware, unless the breach is unlikely to result in a risk to people (Art. 33(1)) | |
| Controller → affected people | Without undue delay if the risk is high — not required if the data was unintelligible to the attacker, for example because it was encrypted (Art. 34) | |
| HIPAA Breach Notification Rule (45 CFR 164.400–414) | Business associate → covered entity | Without unreasonable delay, and no later than 60 days after discovery |
| Covered entity → affected individuals | Without unreasonable delay, and no later than 60 days after discovery | |
| Covered entity → HHS and the media | For 500 or more individuals, HHS within the same 60 days, and prominent media where more than 500 residents of a state or jurisdiction are affected; smaller breaches go to HHS annually. The rule covers unsecured PHI: PHI encrypted to HHS guidance falls outside it |
What the architecture must provide:
- A contracted processor window. Under the GDPR, Lumen's 72 hours start when Lumen becomes aware — in the EDPB's reading, when the Supplier informs it — and the Supplier must notify without undue delay (Art. 33(2)). Delay still leaves patients exposed, so contract a window — within 24 hours of a suspected breach being confirmed (assumption) — and size detection to meet it.
- Scoping within an hour. "Which patients did the compromised partner account read?" is QA13's one-hour query. Without it, the notification goes to everyone, or goes too late.
- Encryption that changes the outcome. In both examples, data encrypted under keys the attacker did not obtain can change whether patients must be told — one more reason to keep keys in separately administered KMS accounts.
- Containment levers: revoke every session of a user, a partner or a tenant within minutes; rotate the partner-API credentials and other secrets without a redeploy; pause one messaging channel by configuration; isolate a region.
- Preserved evidence: the WORM audit trail, forensic snapshots, synchronised clocks.
- Joint playbooks, rehearsed in a tabletop exercise every year (assumption): Lumen notifies; the Supplier investigates; the partner group and each messaging provider have a named contact. These are Module 8's decision rights, applied to the worst day.
Assurance and evidence
Customers rarely audit a supplier themselves; they ask for independent evidence.
| Framework (examples) | What it is | Watch for |
|---|---|---|
| ISO/IEC 27001:2022 | A certifiable information security management system, with 93 reference controls in Annex A | The certificate's scope must include the Lumen service and its hosting. ISO/IEC 27701:2025, now a standalone standard, certifies privacy management; ISO/IEC 27018 covers personal data in public clouds |
| SOC 2 | An AICPA attestation report against the Trust Services Criteria: security, availability, processing integrity, confidentiality, privacy | Type 1 reports on design at a point in time; Type 2 on operating effectiveness over a period of months, commonly six to twelve. A new service cannot show a Type 2 at go-live, so plan a Type 1 first |
| HITRUST CSF | A certifiable framework common in US healthcare, harmonising HIPAA, ISO and NIST requirements into one control set, with assessments of increasing depth (e1, i1, r2) | Its depth suits a high-risk service; cost and duration grow with each level |
Which one Lumen wants depends on its market and its contract: ask in discovery, and inherit the cloud provider's own certifications for the layers it runs (shared responsibility, Module 9). The controls matrix is the spine of the evidence. Each control points to its proof — pipeline results, fitness-function history, penetration-test reports, access reviews, key-rotation logs, DR test reports, tabletop records, the DPIA — and evidence collected automatically survives the second audit as well as the first.
Where security lives in the SAD and in governance
Security is not a separate document. In Rozanski and Woods's terms the security perspective is applied to existing views (Module 6). It adds authorisation and audit components to the Functional view; classification, ownership and retention to the Information view; regions, KMS and trust boundaries to the Deployment view; key rotation, access reviews and incident runbooks to the Operational view; and pipeline controls to the Development view. It also produces the threat model as a secondary model. In Module 6's arc42 outline, the regulation constraint goes in section 2; identity, audit, encryption and residency are cross-cutting concepts in section 8; the security ADRs go in section 9; QA05, QA09, QA12–QA14 and the new ASRs in section 10; and residual risks in section 11.
Governance keeps it true after the document is signed (Module 8): the principle patient data stays where it was collected; fitness functions for residency, isolation, log canaries and notification templates; guardrails that refuse out-of-region, public or unsigned resources; a security architect on the design authority; and the joint architecture board approving decisions that cross into Lumen's decision rights, key custody first among them. Lumen's CISO can block go-live (Module 2's power/interest grid), so make security sign-off an explicit go-live criterion, backed by this evidence.
Check yourself
- A colleague says the platform holds no health data, because diagnoses and images live in Lumen's clinical systems. How do you answer?
- Which property does each STRIDE threat violate, and which DFD element types face repudiation?
- Why does
partner_idcome from the token and get enforced in the data layer, rather than being sent by the partner portal and checked in the API? - Why not one KMS key per patient, and what do you do instead?
- You crypto-shred a patient's key. Name two places their data can survive unless you designed for them.
- The audit trail and the application logs both record a partner user opening a booking. Which may contain the patient key, and where may each be sent?
- Give one privacy reason and one cost reason for an SMS that says "an update to your appointment" rather than "your MRI on Tuesday".
- A Supplier engineer in another country must repair one patient's corrupted booking tonight. What must be true before they can see it?
Suggested answers
- A booking is health data. The GDPR, for example, counts information collected while registering for health care (Recital 35), and under HIPAA appointment information can be PHI. Referrals, offers, appointments, preparation instructions and patients' contact details all identify a person's use of diagnostic imaging.
- Spoofing violates authentication; tampering, integrity; repudiation, non-repudiation; information disclosure, confidentiality; denial of service, availability; elevation of privilege, authorisation. External entities and processes face repudiation, and so do data stores that are logs.
- Anything the client sends can be edited, which is exactly QA12's attack. The identity tenant sets
partner_idat onboarding, so it cannot be changed without forging the token; and row-level security in the data layer means a check missed in one endpoint returns nothing rather than another partner's data. - At illustrative KMS prices of $1 per key a month, about 2 million patients a year would cost about $2 million a month. Keep a few KEKs per region in the KMS, and per-patient DEKs wrapped by them in a key table inside the jurisdiction.
- Any two of: backups of the key table, if they outlive the erasure deadline; plaintext copies such as exports, log lines or emails already sent; data copied in clear out of the encrypted stores, such as an analytics extract; and audit records, which are deliberately kept under a separate key scope.
- The audit trail holds the patient key; it stays inside the jurisdiction on WORM storage, and only the privacy office and investigators read it. Application logs must hold no patient identifier at all, which is what lets on-call engineers use them freely; they still stay inside the jurisdiction, and only security events derived from them go to the central SIEM, if the DPO agrees.
- Privacy: SMS crosses carriers in clear, previews on locked screens and reaches shared or recycled phones, so naming the study discloses health information (LINDDUN's detecting). Cost: a longer message spills into a second 160-character segment on what is already the largest line in the run-cost model.
- A recorded reason and approval through the break-glass path; access scoped to that patient and limited in time; a session through the in-region bastion that is audited and raises an alert; and the DPO's confirmation that access from that country is permitted, with a transfer mechanism in place if the access counts as a transfer. Often telemetry alone will diagnose the fault, without anyone seeing the patient's data.
Exercises — Module 10
Task. Produce the security and privacy architecture for Lumen Diagnostics.
Output: 4–6 pages containing a data-flow diagram with trust boundaries and a STRIDE pass over it; a data classification table with handling rules; a controls matrix — threat → control → ASR — covering QA05, QA09, QA12, QA13 and QA14, plus at least two new ASRs you write; the key-management and residency design; the audit design; three privacy-by-design decisions; and at least two ADRs.
Time: about 5 hours.
Inputs: the case and its Volumes and usage table; your Module 2 stakeholder register and objective O4.1; your Module 3 ASRs, keeping their IDs; your Module 5 context and container diagrams; your Module 6 SAD and physical view; your Module 8 principles and governance model; and the residency handling from your Module 9, part 2 Task.
Threat model
- Draw the DFD from your Module 5 container diagram: the patient portal, the desk and administration portals, the partner portal, the automated partner API, the referral extract, the patient identity service, workforce SSO, the email and SMS providers, and the reporting stores
- Mark every trust boundary, and number the flows that cross one
- Run STRIDE per element; for each threat, name the property it violates
- Run LINDDUN over the same diagram — at least the notification and reporting flows
Classification and controls
- Classes with handling rules a pipeline could enforce: where each may be stored, how it is protected, where it must never appear
- Controls matrix: threat → control → ASR → how the control is verified
- Write at least two new ASRs as testable statements, numbered on from the last ID in your Module 3 list
Keys, residency and audit
- The key hierarchy per region, rotation, custody (with the options you rejected), and how DR keys stay in the jurisdiction (QA14)
- What may cross a border, what may not, and how support from another region works
- Price the key design with labelled, illustrative prices
- Audit: fields, what is excluded, immutability, retention, how QA13's one-hour query is met, and whether the audit write fails closed or open
Privacy and decisions
- Three privacy-by-design decisions, each with the alternative you rejected and who must agree — often the DPO
- At least two ADRs; mark any that cross into Lumen's decision rights for the joint architecture board
- Name every regulation as an example, and every figure the case does not give as an assumption
Self-assessment
| Criterion | What good looks like |
|---|---|
| Boundaries drawn, not implied | Every external system in the case appears; each trust boundary is named, and every flow across one is numbered and analysed |
| Threats tied to properties | Each STRIDE threat names the property it violates and a control; LINDDUN finds at least one threat that STRIDE did not |
| Traceable controls | Every control maps to an ASR ID and to a verification — a test, fitness function, review or report. QA05, QA09, QA12, QA13 and QA14 each have at least one |
| Testable new ASRs | Each has a stimulus and a measurable response, and a reason it is architecturally significant |
| Keys and residency coherent | Keys, backups, DR copies, audit records and support access all respect QA05; the recovery region and its keys sit inside the jurisdiction, or the conflict is raised as a risk |
| Privacy as design | Minimisation, retention and notification content are concrete decisions with owners, not principles restated |
| Regulation handled properly | Regimes are examples; obligations are framed as questions for the DPO and legal advisers; no figure is presented as law for Lumen |
Worked answer — Lumen security and privacy excerpts
Attempt the Task before reading this. It is deliberately partial — one trust boundary, three new ASRs, five rows of the controls matrix and one ADR — to show the reasoning, not a complete answer to copy. Every figure the case does not give is an assumption.
Trust-boundary excerpt — partner users crossing into the platform
TB1 to TB3, flows DF3 and DF6: about 1,500 partner users, doubling, on devices nobody at Lumen or the Supplier manages.
| Threat at this boundary | Property | Control | |
|---|---|---|---|
| S | A partner coordinator's password is phished | Authentication | MFA in the partner identity tenant; sessions revoked from the SIEM on an account-takeover signal |
| T | A slot upload is crafted to change another partner's pricing | Integrity | Uploads scoped to the token's partner_id; pricing changes audited and shown to the owning partner |
| R | A practice denies having declined a booking | Non-repudiation | An audit record with user, partner_id, action and time |
| I | A user edits a booking ID to read another partner's patient | Confidentiality | Object-level authorisation, row-level security, "not found" (QA12) |
| D | A script floods the slot-upload endpoint | Availability | A rate limit per partner at the gateway; the partner portal's own 99% target (QA01) and a bulkhead that keeps its load off the booking path |
| E | A former employee keeps access after leaving the practice | Authorisation | Removal delegated to the partner administrator; quarterly recertification; accounts unused for 90 days lapse (assumption) |
New ASRs
| ID | ASR | Why it is architecturally significant |
|---|---|---|
| QA19 | No email or SMS contains clinical detail — modality, body part, referral reason, urgency or study-specific preparation — or a full name; 100% of templates pass an automated content check whenever a template changes | Templates are configuration (QA10), so the rule needs a check in the configuration path, not one review at go-live |
| QA20 | Break-glass access is scoped to one patient or one queue, expires within 4 hours, alerts the security team within 5 minutes and is reviewed within one working day | Shapes the authorisation model, the audit schema and the operating model; a hidden permission cannot meet it |
| QA21 | When Lumen approves an erasure, or a record's retention ends, the patient's data is unreadable in every store, replica, archive, event log and backup within 30 days | Forces per-patient keys in the immutable stores, and caps the key table's backup retention |
Controls-matrix rows
| # | Threat (STRIDE — property) | Control | ASR | Verified by |
|---|---|---|---|---|
| 1 | A partner user reads or changes another partner's booking (I, E — confidentiality, authorisation) | partner_id from the identity tenant; object-level checks; row-level security; "not found"; refusal alerting | QA12 | Automated cross-partner tests over every partner-facing endpoint at each release; DAST authenticated as two test partners |
| 2 | PHI read without trace, or the trail altered (R — non-repudiation) | Shared audit interceptor; fail closed through an in-region durable buffer; WORM store in a separately administered account; hash-chained digests | QA13, QA05 | Build check for unannotated PHI endpoints; a monthly drill producing one test patient's history within 1 hour; a digest-verification job |
| 3 | Clinical detail disclosed through SMS or email (I — confidentiality; LINDDUN detecting) | Neutral templates; date and town only with the patient's opt-in; no PHI in links; a template content check in the configuration pipeline | QA19 | Template check on every change; a quarterly review of sampled rendered messages by Lumen's privacy office |
| 4 | Patient data readable outside its jurisdiction — a misplaced backup, a leaked copy (I — confidentiality) | Regional HSM-backed KMS with non-exportable keys; a key policy refusing other regions' workloads; DR keys only in an in-jurisdiction recovery region | QA05, QA14 | IaC policy test on key and backup locations; a DR rehearsal that restores in the recovery region with that region's keys |
| 5 | Privileged access abused under cover of an emergency (E — authorisation; R — non-repudiation) | Break-glass elevation with reason, scope and expiry; immediate alert; next-day review | QA20, QA13 | A quarterly test elevation, checking the alert time and the review record |
ADR-SEC-01 — Key custody: customer-managed, HSM-backed keys in each region
Status: proposed. It needs the joint architecture board's approval, because patient-data residency and access are Lumen's decisions (Module 8).
Context. QA05 requires keys inside each jurisdiction; QA14 requires them in the recovery region too; QA21 requires per-patient deletion; C01 makes the Supplier the operator. Lumen's CISO wants assurance that the Supplier cannot read data without trace, and asks whether Lumen could cut off access unilaterally at exit.
Options considered.
- Provider-managed keys. Rejected: no control over deletion, so QA21 fails, and no evidence of each use.
- Customer-managed keys in each region's HSM-backed KMS, administered by a Supplier key-custodian role kept separate from the platform administrators, with every key use logged to the audit account.
- BYOK: key material generated in Lumen's HSM and imported into each regional KMS.
- HYOK: Lumen's HSM outside the cloud, called on every unwrap. Rejected for now: Lumen's HSM would join the booking path, and its availability would have to be priced against QA01's ≈ 8.5-hour outage budget (≈ $11,760 per peak hour) and QA14's 4-hour RTO before anyone could accept it.
Decision. Option 2, with option 3 available for any region at Lumen's request, without changing the design. Per-patient DEKs are wrapped by a regional KEK and kept in a key table inside the jurisdiction, whose backups are retained for 7 days (assumption) so that QA21's 30 days hold.
Consequences.
- Five KEKs per region cost about $20 a month across four regions at the illustrative prices; per-patient KMS keys, at about $2 million a month, are avoided.
- Exit and suspension work through the KMS: disabling a region's KEKs, at Lumen's instruction, makes that region's data unreadable. A disabled key is also an outage, so disabling one needs two-person approval.
- Option 2 does not give Lumen unilateral cut-off: the Supplier administers the keys. If the CISO requires it, BYOK with expiring imported key material that only Lumen re-imports, or HYOK, is the route — the joint board's decision.
- In a jurisdiction where the provider has only one region, QA14's recovery region cannot hold keys in the jurisdiction. That is a risk to raise before the region's design is fixed (Module 2's dependency D1), not a default to accept.
- Key administration becomes a separate role, with its own access reviews and audit.
A complete answer adds the full DFD and STRIDE pass, rows for QA09 and the remaining threats, the retention schedule, the support-access design and a second ADR — the audit write's fail-closed choice, for example.