TRE (Trusted Research Environment) — design and SATRE compliance
Date: 2026-09-21, revised 2026-09-22 · Owner: Yahia (TRE) · Sibling document: Data Cohorts design (owner Moe) at https://cohorts-design.pages.dev · Status: design only, no code.
0. Scope and ownership
The TRE is a separate entity from the data cohorts product; there is no overlap. Yahia owns the TRE; Moe owns cohorts. This document covers: what a TRE workspace is in bionl, its lifecycle, the controls it must enforce, the SATRE specification mapped statement by statement, the audit of today's workspace VM against those controls, and the hardening track. It does not cover the catalogue, pricing, checkout, orders, allocation or cohort files — those live in the cohorts document and reach the TRE only through the contract in §3.
1. Decisions that bind the TRE (Moe, 2026-09-21, revised 2026-09-22)
| # | Decision |
|---|---|
| T1 | A TRE is an existing bionl Workspace flagged kind = tre. The flag drives feature visibility in web and api and special mount handling in IMS. |
| T2 | One TRE per (organization, cohort). Top-up purchases of the same cohort add mounts to the same TRE; its expiry stays the first purchase's date. Different cohorts → separate TREs even in the same region. |
| T3 | Region-bound: the TRE lives in the cohort's region (KSA or US); data from another region is never mounted into it. |
| T4 | Purchased data arrives as read-only mounts of a per-purchase prefix in the regional platform cohort bucket (segmented at file level; allocation is the cohorts side's job). |
| T5 | On expiry the workspace is locked, not deleted: all users of the org are denied access; VM stopped; data retained under the retention policy. Unlock only by a new purchase (semantics of a post-expiry top-up = open question). |
| T6 | Who enters the TRE: Org Owner + RBAC (PR #429). Same RBAC gates purchase on the cohorts side. |
| T7 | Standard: SATRE v2 — every Mandatory statement must score ≥1 before anything is called a TRE. |
| T8 | MIMIC is disregarded as a data source. |
2. Open questions (TRE side)
- Post-expiry top-up: unlock with a new expiry vs new TRE (agree with cohorts).
- The exact feature gate list for
kind = trein web/api (download, upload, export, publish, git push, URL import, workflows, sharing) — proposal in §4.2 item 1–2. - VM profile for TREs (machine types, GPU, egress allowlist contents, package mirror).
- RBAC permission names for TRE entry / TRE admin.
- Retention period for locked TREs and their materialised data; who can delete.
- Whether the two regional TREs are ever operated as a federation (SATRE pillar 5).
3. Contract with cohorts (the only coupling)
Cohorts → TRE (S2S, idempotent):
provision(orgId, cohortId, region, mount {bucket, prefix, label}, expiresAt, purchasedBy)→{ treWorkspaceId }— creates the flagged workspace in the region, attaches the RO mount via IMS, records expiry.addMount(treWorkspaceId, mount)→ ok — top-up; expiry untouched.lock(treWorkspaceId, reason)/unlock(treWorkspaceId, newExpiresAt)→ ok.status(treWorkspaceId)→ state, expiry, mounts — for the purchases page. The TRE enforces expiry itself as well (a lock is not dependent on the cohorts job running).
4. TRE workspace model (proposal)
Workspace.kind(standard|tre),Workspace.region,Workspace.lockedAt / lockReason,TreProfile(egress allowlist, package mirror, VM tier, GPU allowed),TreMembership(user × workspace, MFA verified, terms version, training record) — or reuseWorkspaceMembers+ RBAC.- Lifecycle: provision → active (mounts added over time) → locked (expiry / incident) → unlocked (new purchase) → deleted (retention policy, with deletion record).
- Feature gates when
kind = tre(web + api + runtime): download/export/upload/publish/git-push/URL-import off; egress request UI on; TRE banner; MFA + terms + training gate on entry; VM from the TRE network profile.
Source read in full 2026-09-21: satre-specification.readthedocs.io/en/stable (specification YAML = 185 statements; principles; roles; evaluation method; alignment; FAQs). Spec facts that shape our approach:
- Structure: 5 pillars → capabilities → statements. Pillars 1–4 apply to every TRE (164 statements); pillar 5 Federation (21) applies only if we federate. Counts: IG 46 (30 Mandatory + 5 Mandatory* + 5 Rec + 6 Opt), Computing 62 (25 M + 29 R + 8 O), Data Mgmt 39 (16 M + 14 R + 9 O), Supporting 17 (4 M + 13 R), Federation 21 (14 M + 1 M* + 6 R).
- Compliance rule (evaluation page): score each statement 0 / 1 / 2 / N-A. Every Mandatory statement must score ≥1 or the TRE is not SATRE-compliant. Recommended = priority after Mandatory; Optional = context-dependent.
Mandatory*= mandatory unless the exemption applies (no personal data / no physical assets / public involvement). SATRE is not an accreditation; it is a self-assessment (spreadsheet template) that is expected to be published (ties to 1.7.02, 2.7.06). Recommended evaluation = score + justification + improvement per statement. - Principles (apply across the board): Usability (don't make the TRE unusable by over-restriction; JupyterLab/browser is explicitly fine), Maintaining public trust (transparency, public involvement when holding personal data), Observability (every human/automated change produces audit data), Standardisation (reuse known patterns, don't block interoperability).
- Roles we must be able to name people for: Data Consumer/Analyst, Project Manager, Project Team; Data Steward, Database Admin, Information Asset Owner (= the cohort provider), Output Checker; Operator, Developer, Builder; IG Manager, Quality Manager, Top Management, Data Protection Manager, Auditor; Lay Panel, Data Subject.
- Key SATRE vocabulary → bionl mapping: "project" = one purchase/Order (or a Study grouping several orders); "workspace" = TRE workspace; "dataset" = cohort; "Information Asset Owner" = cohort provider (hospital); "Operator" = bionl ops; "ingress" = cohort staging + Raw drive publish; "egress" = any file/notebook/output leaving the TRE.
10.0 Posture audit of today's workspace VM (2026-09-21, code-verified) — blockers before any TRE claim
Paths: B/ = bionl monorepo, R/ = bionl-runtime. These are live security findings, not only SATRE gaps; several must be fixed platform-wide, not just for TRE workspaces.
| # | Finding | Evidence | SATRE hit |
|---|---|---|---|
| A1 | Runtime API on the VM has no authentication; /files/download?filepath= streams any absolute path, /mounts mounts arbitrary buckets, /download-file fetches arbitrary URLs (no SSRF guard), /ws executes kernel code. Only control is network reachability. |
R/runtime/src/main.ts (0.0.0.0:5050), R/runtime/src/app.ts:84 CORS *, :89-110, :255-290 |
1.5.05, 2.2.09, 3.1.12 |
| A2 | GET /ping returns the full process environment unauthenticated. |
R/runtime/src/app.ts:186 |
2.5.03, 2.8.05 |
| A3 | Jupyter static token bionl, no TLS, same on every VM. |
R/start.sh, R/runtime/config.json |
1.5.05, 2.8.02 |
| A4 | Runtime container runs privileged: true → notebook code = root on the host, metadata server reachable. |
B/libs/services/src/services/compute/compute.service.ts makeGceContainerDeclaration() |
2.1.14, 2.2.09 |
| A5 | One shared VM service account fleet-wide with devstorage.full_control, and IMS grants that SA objectAdmin on every org bucket → any workspace can read/write any other org's bucket via the metadata token. Biggest tenant-isolation gap. |
compute.service.ts makeCreateInstancePayload (GOOGLE_VM_SA); B/apps/ims/src/providers/gcp/gcp.adapter.ts:53-64 |
2.1.08, 2.1.14, 2.2.10, 3.2.03 |
| A6 | gcsfuse uses VM ADC, not IMS downscoped tokens → -o ro and --only-dir are cosmetic; RO drives and prefix boundaries bypassable with gsutil from a cell. Downscoped-credential machinery exists in IMS but the runtime never calls it. |
R/runtime/src/utils.ts:95; B/apps/ims/src/providers/gcp/gcp.credentials.ts, credentials/credentials.service.ts |
3.1.06, 3.1.11, 3.1.14 |
| A7 | Unrestricted outbound internet from VMs by design (Cloud NAT so pip/image pulls work); git preinstalled → git push anywhere. | B/libs/deployment-config/profiles/default.yaml comments; R/Dockerfile |
2.2.11, 3.1.05, 3.1.12 |
| A8 | Firewall rules, Cloud NAT, VM SA IAM, bucket IAM are all outside Terraform; VMs carry http-server/https-server tags unconditionally. |
B/infra/README.md ("deliberately not managed"), compute.service.ts tags |
2.2.01, 2.2.09, 2.4.01 |
| A9 | Prod Cloud SQL authorizes 0.0.0.0/0 on its public IP (password only); dev+staging+prod share one instance; PITR off, zonal. |
B/infra/sql.tf |
2.2.09, 2.6.01, 2.8.03 |
| A10 | api→VM leg is plain ws:///http:// in-VPC; Firebase JWT passed in the WS query string (lands in LB logs). |
B/libs/services/src/services/websocket/websocket.service.ts:494, B/apps/web/src/utils/common.ts:52-67 |
2.8.03, 2.5.03 |
| A11 | No MFA, no SSO, no idle logout, indefinite Firebase sessions; anyone who authenticates gets an account + org + 100 credits; Google users skip email verification; any org member can invite anyone; invitationAccepted never checked. |
B/apps/web/src/pages/auth/*, B/libs/middlewares/src/is-authenticated.ts, organization.service.ts:113-129 |
1.5.01, 1.5.02, 3.2.02, 3.2.04 |
| A12 | RBAC tables (Role/Permission/UserRole) are dead code; access is ad-hoc; IDOR: users.update accepts any defaultWorkspaceId and 4 file procedures use it unvalidated; viewers can delete workspaces; /dev/update-vms and /dev/web-log unguarded; x-dev-key accepted as a query param. |
B/libs/trpc/src/app/user/user.schema.ts:17-24, workspace.router.ts:161-290, B/apps/api/src/app/dev/dev.router.ts:16,39 |
1.5.03, 3.2.03 |
| A13 | No egress control layer: 15-min bearer-less signed download URLs, origin:* CORS on every org bucket, notebook/PDF/template export, Session.isPublished readable by any signed-in user, community-published workflows, Batch jobs default to public IPs when env unset. |
B/apps/ims/src/buckets/buckets.service.ts:11-21, authorize-session.ts, B/apps/nextflow/src/lib/google-batch.ts |
3.1.05, 3.1.06, 3.3.04 |
| A14 | No CMEK/KMS in practice, no bucket versioning/WORM/uniform access/public-access-prevention (fields exist in IMS, never passed); Secure Boot off; boot disks no CMEK. | gcp.adapter.ts createBucket, buckets.service.ts:68, compute.service.ts |
2.8.01, 2.8.05, 3.1.14 |
| A15 | No audit log of user actions or data access (only domain trails: SessionEditorHistory, SubmissionReviewEvent, VmUsage, IMS Operation/ScopedCredential). Service layer logs notebook code + outputs via console.info (bypassing pino redaction) to Cloud Logging + Logtail. No log retention/locking in IaC. VM-side: no file-access or shell audit. |
websocket.service.ts frame logging; logtail.service.ts; B/infra/ |
2.5.03, 2.2.14, 3.1.11 |
| A16 | Runtime image unpatched: ubuntu:20.04 (EOL), Python 3.8, Node 18, unpinned apt, plain-HTTP .deb downloads, no unattended-upgrades, no scanning, built from a laptop outside CI. |
R/Dockerfile, R/deploy.sh |
2.1.06, 2.7.02, 2.7.03 |
| A17 | Workspace delete is soft-delete + VM kill only; bucket prefix never deleted; no org/user deletion path; no retention policy. | workspace.router.ts:161-220 |
1.4.04, 3.1.09, 3.1.10 |
| A18 | No GPU support (guestAccelerators: []); idle keeper off in lean/dammam profiles. |
compute.service.ts, profiles |
2.1.16, 4.4.04 |
| A19 | No security/compliance documentation of any kind (HIPAA/GDPR/ISO/DPIA/IR/retention/BCDR). | B/docs grep |
1.x, 4.3.01 |
Things that are genuinely in good shape: one VM per workspace, deleted not recycled (2.1.14 partial-HAVE); no external IP on VMs; per-PR previews + dev/prod split + tagged releases + rollback (2.2.04/05); IaC for core shape; Secret Manager + WIF, no SA keys; pino PHI redaction on api; SSRF-guarded URL import; DataSubmission review workflow as an ingress-governance precedent; IMS bucket/mount registry with drift detection; billing-grade usage metering (VmUsage, B*Usage, ledger); PostHog consent-gated.
10.1 Legend
Type: T = technical control the platform enforces · O = organisational (policy/SOP/people/contract) · T+O = both. Status today (pre-TRE, current bionl workspace + cohorts server): HAVE / PARTIAL / MISSING / ORG-MISSING / N-A. "(verify)" = pending the posture audit. Build = what the TRE work must add.
10.2 Derived TRE technical rule set (what Workspace.kind = 'tre' must enforce)
These are the concrete controls implied by the Mandatory technical statements; they become the acceptance criteria for the TRE flag in web, api, IMS and runtime:
- No data egress by default (3.1.05, 3.1.06, 3.1.12, 2.1.01): file download, notebook export/download, signed download URLs, "publish session", git push, URL export, workflow output to non-TRE buckets are all disabled for TRE workspaces. Egress only through an explicit egress request → Output Checker approval flow (3.3.04, 3.3.05) with a machine-readable record (3.3.09 optional but cheap). Browser clipboard copy out of Jupyter cannot be technically blocked in a web app; document as a "reasonable extent" mitigation (3.1.12 guidance) plus terms of use, or run Jupyter behind a remote-desktop gateway later.
- No ingress except governed paths (3.1.04, 3.1.12): uploads into a TRE workspace disabled by default; only cohort mounts (RO) and an approved ingress path (e.g., code from an approved git repo or a reviewed upload) are allowed.
- Outbound internet blocked by default on the TRE VM (2.2.11), with an allowlist for required services (package mirror, IMS credential endpoint, sentinel heartbeat, Google APIs via Private Google Access). Telemetry-requiring software recorded in a risk register (2.1.09).
- Project segregation (2.1.08, 2.1.14, 2.2.10): one VM per TRE workspace, never reused across orgs; no VM-to-VM connectivity across workspaces (firewall tags); shared services (databases, workflow engines) instanced per workspace; cross-region mixing forbidden (D5).
- Least-privilege identity (1.5.03, 3.2.01, 3.2.03): one Firebase account per person, MFA enforced for TRE users (3.2.04), TRE membership explicit and org-scoped, access to a cohort mount only for members of the purchasing org's TRE in that region, lock on expiry (T5) and on member removal.
- Data Controller consent gate (1.5.04): access to a cohort requires the provider's agreement, recorded per cohort (blanket licence terms accepted at purchase, or per-purchase approval when accessLevel = restricted).
- Audit logging, tamper-resistant (2.5.03, 2.2.13–15, 3.1.11): auth events, admin actions, mount grant/revoke, file access on cohort mounts (gcsfuse/GCS data-access logs), egress requests/approvals, VM lifecycle, resource usage; shipped to Cloud Logging with a locked retention bucket; per-org/project usage records.
- Encryption (2.8.01–02): at rest by default (GCS/Cloud SQL/PD, CMEK option via IMS
StorageProfile.cmek), TLS for browser↔TRE and service↔service; in-transit inside the VPC where possible (2.8.03). - Configuration as code + verification (2.2.01–06, 2.4.01–05): TRE VM image, firewall, mounts and flags are declared (terraform + IMS records + runtime image), drift-checked, and a non-compliant TRE can be destroyed and recreated.
- Lifecycle (1.4.04, 3.1.09, 3.1.10): access expiry → the TRE workspace is locked (no user of the org can enter; VM stopped; mounts remain attached but unreachable), not deleted (D10). Deletion of user outputs, materialised purchase data and VM disks happens later under a published retention policy with a deletion record (proof of deletion).
- Transparency records (1.4.06, 1.7.02, 3.1.08): public project register (orders → "Safe Projects" register with org, cohort, purpose), data-asset register (Cohort entity with provider/contact/received date/retention), published TRE documentation.
- Capacity and cost (2.3.01–04, 4.4.01): the purchase page states the TRE's machine types/GPU availability and compute costs; org credit/billing gates VM start (already exists) and per-project cost tracking.
10.3 Pillar 1 — Information Governance (46)
| ID | Imp. | Type | Requirement for the bionl TRE | Status | Build / action |
|---|---|---|---|---|---|
| 1.1.01 | M | O | Maintain a register of legal/regulatory/ethical requirements per region (KSA PDPL + NDMO health rules; US HIPAA/state law; GDPR if EU subjects) and contractual terms per cohort provider; review on a schedule. | ORG-MISSING | IG Manager owns a requirements register; link each cohort to its governing agreement (Cohort.agreementRef). |
| 1.1.02 | M | T+O | Controls traceable to requirements. | PARTIAL (IMS RO mounts, roles) | This matrix becomes the control register; each TRE control references the statement id. |
| 1.1.03 | M | O | Budget + named people for IG. | ORG-MISSING | Name IG Manager, Quality Manager, DPO, Top Management (CTO/CEO). |
| 1.2.01 | M | O | Only trusted individuals change policies/SOPs. | ORG-MISSING | Policies in a controlled repo with CODEOWNERS/approvals. |
| 1.2.02 | M | O | Versioned, codified change procedure for policies/SOPs. | ORG-MISSING | Git-versioned policy repo; change log with date/author/summary. |
| 1.2.03 | R | T+O | IG performance reporting to management. | MISSING | Dashboard: incidents, deviations, audit findings (can reuse PostHog/Looker). |
| 1.2.04 | M | O | Audit the TRE organisation against relevant standards. | ORG-MISSING | Annual SATRE self-assessment + internal audit; ISO 27001 later. |
| 1.2.05 | M | O | Report audit outcomes to required bodies. | ORG-MISSING | Process + publish SATRE evaluation. |
| 1.2.06 | M | O | Suppliers/contractors aligned to security requirements. | ORG-MISSING | DPAs/BAAs + security clauses: Google Cloud, Vercel, Frame, Upstash, Sentry, PostHog, Firebase, contractors. |
| 1.2.07 | M | O | Monitor supplier compliance. | ORG-MISSING | Annual supplier review; track provider changes. |
| 1.2.08 | M* | O | Physical asset tracking. | N-A (cloud only) unless staff laptops count | Record exemption; laptop policy if in scope. |
| 1.2.09 | M | T+O | Log/track/resolve deviations, incidents, audit findings. | PARTIAL (ClickUp) | Incident/issue register (ClickUp list or Mizan) with retention. |
| 1.2.10 | M | O | Root-cause → improvements. | ORG-MISSING | Post-incident review template. |
| 1.2.11 | R | T | Collect quality-management data. | PARTIAL (usage tables, logs) | Metrics export from audit/usage tables. |
| 1.2.12 | O | O | QMS tool. | ORG-MISSING | Optional; docs repo suffices initially. |
| 1.3.01 | M | O | Risk quantification method. | ORG-MISSING | Impact × likelihood matrix. |
| 1.3.02 | M | T+O | Data processing assessment (DPIA) for every project. | MISSING | Per-cohort DPIA template; purchase flow requires researcher to declare purpose (feeds 5.2 ticket) and links cohort DPIA. |
| 1.3.03 | M | O | Record mitigations decided from risk assessments. | ORG-MISSING | Risk register with decisions. |
| 1.3.04 | M | O | Risk roles/ownership/escalation. | ORG-MISSING | RACI: Top Management owns residual risk. |
| 1.3.05 | M | O | Documented risk appetite. | ORG-MISSING | One-page risk-appetite statement. |
| 1.4.01 | M | T+O | Checks that legal/financial/ethical prerequisites exist for the project duration. | PARTIAL (payment = financial check) | Purchase flow gates: accepted cohort licence/DUA, purpose + optional IRB ref, org billing OK; Order stores them. |
| 1.4.02 | M | T | Time-limited compliance maintained (contract expiry, responsible person leaving). | MISSING | TRE self-enforced expiry → lock (T5); cohort agreement expiry handled cohorts-side; owner-leaves-org handling. |
| 1.4.03 | M | O | Regulatory changes applied to projects. | ORG-MISSING | Tie to 1.1.01 review cycle. |
| 1.4.04 | M | T+O | Standard end-of-project process (archive logs/quality data, archive/delete datasets). | MISSING | Expiry → lock the TRE (T5); later retention-policy deletion of outputs and materialised data with a deletion record; log retention; documented SOP. |
| 1.4.05 | O | T | Study-management portal/workflow engine. | PARTIAL | cohorts app + Orders = the portal; Temporal worker for workflows. |
| 1.4.06 | R | T | Complete register of current and historic studies (Safe Projects), ideally public. | MISSING | Orders table + public register page (org, cohort, purpose, dates); HDR UK data-use-register fields. |
| 1.4.07 | M* | O | Public-data TREs must serve public-benefit research. | N-A for commercial cohorts unless public data held | Record applicability per cohort (public vs partner data). |
| 1.5.01 | M | T+O | Robust identification of accredited members before data access. | PARTIAL (Firebase email login, auto-created accounts) | TRE access requires verified email + MFA + org admin approval; optional ID check for restricted cohorts. |
| 1.5.02 | M | T+O | Onboarding per role (terms of use, training confirmation). | MISSING | TRE first-entry gate: accept TRE terms + confirm training (stored per user with version). |
| 1.5.03 | M | T | Identity-based access services, RBAC, least privilege. | PARTIAL (WorkspaceRole, UserRole exist; not on cohorts) | TRE membership model + cohort-mount authorisation; ops/admin roles. |
| 1.5.04 | M | T+O | No dataset access without Data Controller agreement. | MISSING | Cohort.accessLevel + licence acceptance at purchase; restricted cohorts require provider approval before provisioning (bridges to ClickUp 5.3 later). |
| 1.5.05 | M | T | Robust authentication for users and services, common controls (MFA etc.). | MISSING for the VM leg (A1–A3: runtime API unauthenticated, static Jupyter token); PARTIAL elsewhere (Firebase, S2S tokens, no MFA) | Enforce MFA for TRE users; single IdP (Firebase) for all apps; service identities via GCP OIDC. |
| 1.5.06 | M | T | Unique logon per user, records strictly controlled, traceable across the TRE. | PARTIAL (User id ↔ Firebase uid) | Add firebaseUid to User; audit trail on user-record changes; link training/terms records to the user. |
| 1.6.01 | M | O | Training needs analysis per role. | ORG-MISSING | TNA doc: researcher (safe researcher), operator, IG. |
| 1.6.02 | M | O | Training available for all roles. | ORG-MISSING | Provide/accept safe-researcher training (e.g., ONS/UKDS-style or in-house module). |
| 1.6.03 | M | O | Refresher training. | ORG-MISSING | Annual renewal; reminders. |
| 1.6.04 | M | T | Training records tied to role/access level. | MISSING | UserTraining table (course, version, completedAt, expiresAt); TRE entry checks it. |
| 1.6.05 | R | O | Accept third-party certifications. | ORG-MISSING | Accept recognised safe-researcher certificates. |
| 1.6.06 | O | T | Training platform. | MISSING | Later; link out to provider. |
| 1.6.07 | O | T | LMS. | MISSING | Later. |
| 1.6.08 | O | O | Courses in standard formats (SCORM). | MISSING | Later. |
| 1.6.09 | O | T | Retain historical course versions. | MISSING | Store course version in UserTraining. |
| 1.7.01 | M* | O | Fair, inclusive public engagement (if personal data). | ORG-MISSING (applies: hospital patient data) | PPIE plan per region; PEDRI standards. |
| 1.7.02 | M* | T+O | Public info on operations, data held, projects that accessed data. | MISSING | Public pages: TRE description, cohort catalogue (already public list endpoint), Safe-Projects register (1.4.06). |
| 1.7.03 | M* | O | Public involvement in operations/oversight. | ORG-MISSING | Lay panel / advisory input on access decisions. |
| 1.7.04 | R | O | Publish incidents/near-misses responsibly. | ORG-MISSING | Annual transparency report. |
10.4 Pillar 2 — Computing Technology and Information Security (62)
| ID | Imp. | Type | Requirement for the bionl TRE | Status | Build / action |
|---|---|---|---|---|---|
| 2.1.01 | M | T+O | No copy-out via system clipboard. | MISSING (browser Jupyter has clipboard) | Reasonable-extent controls: disable notebook download/export, block file download; document residual risk; optional later: Apache Guacamole/remote-desktop gateway with clipboard disabled. |
| 2.1.02 | R | T | Familiar environment (JupyterLab is explicitly acceptable). | HAVE | Keep Jupyter + notebook UI. |
| 2.1.03 | O | T | Code-submission-only mode. | PARTIAL (Nextflow/Batch jobs) | Optional "no interactive access" tier later. |
| 2.1.04 | R | T | Access via commonly available apps (browser). | HAVE | — |
| 2.1.05 | M | O | Clear user guidance on tools/data in the TRE. | PARTIAL (product docs) | TRE user guide: tools, mounts layout, egress process. |
| 2.1.06 | R | T | Auto security updates for user software. | MISSING (A16) | Runtime image rebuild cadence + unattended-upgrades on VM. |
| 2.1.07 | O | T | Shared services within a project. | PARTIAL (workspace shared by members) | OK as is; per-workspace only. |
| 2.1.08 | M | T | Shared services never cross projects. | PARTIAL (per-workspace VM; shared Raw drive is platform-wide RO) | Cohort mounts scoped per TRE; no shared DBs across workspaces. |
| 2.1.09 | M | O | Record/mitigate telemetry-requiring software. | MISSING | Register: PostHog, Sentry, Jupyter telemetry, licensed tools; allowlist egress. |
| 2.1.10 | M | T | Provide required software (Python, R, Jupyter, CLI, office-like). | HAVE (runtime image) | Document the tool list; review cadence. |
| 2.1.11 | R | T | Reproducibility tools (version control, pipelines). | HAVE (git integrations, Nextflow) | Git allowed only to approved internal remotes inside TRE (egress rule). |
| 2.1.12 | O | T | Access to public package repos/mirrors. | HAVE via open internet (A7) — must become a mirror/allowlist | Provide a PyPI/CRAN mirror or proxy allowlist instead of open internet. |
| 2.1.13 | O | T | Tightly controlled packages. | MISSING | Optional approved-package list for restricted tiers. |
| 2.1.14 | M | T | Segregation of users/data across projects on all compute incl. HPC/Batch. | PARTIAL: VM per workspace + delete-not-recycle is good, but A4/A5/A6 break data segregation; Batch jobs default to public IPs when PROPELLER_BATCH_* unset |
Batch/Nextflow jobs for TRE run with per-workspace SA + VPC, ephemeral workers, no shared scratch. |
| 2.1.15 | R | T | Scalable compute if needed. | HAVE (VM sizes, Google Batch) | Expose in TRE profile. |
| 2.1.16 | R | T | GPUs if needed. | MISSING (A18) | State availability on purchase page. |
| 2.1.17 | O | T | Data via DB systems, project-isolated. | MISSING | Later; per-workspace Postgres if needed. |
| 2.1.18 | O | T | Large-scale analytics tools. | MISSING | Later. |
| 2.2.01 | M | O+T | Documented infra deployment procedure. | PARTIAL (docs/ci-cd.md, ims-deployment.md, terraform) | TRE runbook: VM image, network, IMS mounts, flags. |
| 2.2.02 | R | T | Automate deployment. | HAVE (GH Actions, terraform, Cloud Run) | Extend terraform to TRE network/firewall. |
| 2.2.03 | M | O | Documented change procedure incl. emergency. | PARTIAL (PR → dev → release tags) | Write the change-management SOP referencing the pipeline. |
| 2.2.04 | M | T | Test before production. | HAVE (verify.yml, PR previews, dev env) | — |
| 2.2.05 | R | T | Dev mirrors prod. | HAVE (dev/prod envs) | — |
| 2.2.06 | M | O+T | Documented decommissioning. | PARTIAL (workspace delete, VM sweep) | TRE teardown SOP + automation (VM+disk delete, mounts, materialised prefix). |
| 2.2.07 | R | O | Know provider SLAs. | ORG-MISSING | Record GCP/Vercel/Frame SLAs. |
| 2.2.08 | R | O | Availability statement to users. | ORG-MISSING | Publish target. |
| 2.2.09 | M | T | Control all network infra (firewalls, segmentation). | MISSING as a control: firewall/NAT unmanaged (A8), unauthenticated VM services (A1), SQL open to 0.0.0.0/0 (A9) | TRE subnet per region, deny-all + allowlist, no external IP. |
| 2.2.10 | M | T | No connectivity between users of different projects. | MISSING: no VM↔VM deny rule in IaC; shared VM SA reaches all org buckets (A5) | Firewall: deny VM↔VM except same-workspace tag. |
| 2.2.11 | M | T | Outbound internet blocked by default. | MISSING (A7, by design) | Cloud NAT removed for TRE tag; Private Google Access; egress allowlist proxy. |
| 2.2.12 | R | T | Config/vulnerability monitoring, pen tests. | MISSING | Security Command Center / OS Config vulnerability reports; annual pen test. |
| 2.2.13 | M | T | Record usage data (users, projects, data, workspaces). | PARTIAL (B*Usage, orders) | Usage report per TRE/org/region. |
| 2.2.14 | R | T | Record dataset access: which, when, who. | MISSING | GCS data-access audit logs on cohort buckets + mount grant log; per-user attribution via per-workspace SA + workspace membership. |
| 2.2.15 | R | T | Record compute usage per user/aggregate. | HAVE (VM billing per org) | Attribute to Order/project. |
| 2.3.01 | M | T+O | Members know resources + costs before start. | PARTIAL (pricing page; VM pricing) | Purchase page shows TRE compute tiers, GPU availability, costs. |
| 2.3.02 | R | O | Anticipated needs satisfiable. | ORG-MISSING | Quota planning per region. |
| 2.3.03 | M | O | Resource allocation procedure. | ORG-MISSING (quota ceilings exist in code) | Document quotas, request path. |
| 2.3.04 | M | T | No overspend. | HAVE (org credits gate VM start, budgets) | Per-project spend caps. |
| 2.4.01 | M | O+T | Documented configuration procedure. | PARTIAL | TRE config = code (image + terraform + IMS profile); doc it. |
| 2.4.02 | R | T | Config management tooling. | HAVE (terraform, images) | — |
| 2.4.03 | R | T | Verify configuration validity. | PARTIAL (terraform plan) | Add TRE conformance check script. |
| 2.4.04 | R | T | Regular verification. | PARTIAL (IMS drift-check hook) | Scheduled TRE drift check (firewall, egress, mounts, flags). |
| 2.4.05 | M | T | Replace non-compliant TRE. | HAVE (destroy/recreate VM) | Automate "rebuild TRE" op. |
| 2.5.01 | M | O+T | Comply with data-specific regulation. | PARTIAL | Per-region regulatory mapping (1.1.01); KSA residency = region-bound TRE (D5/D6). |
| 2.5.02 | O | O | Threat modelling. | MISSING | STRIDE session on the TRE design. |
| 2.5.03 | M | T | Tamper-proof security logs; review process. | MISSING | Cloud Logging sinks to a locked bucket (retention lock); log auth, admin, ACL changes, data access/egress; weekly review; alerting. |
| 2.6.01 | R | T | Backups of data/environments if lawful. | PARTIAL: nightly SQL backup, PITR off, zonal, shared instance (A9); no bucket versioning (A14) | Decide backup policy for TRE outputs; cohort masters are provider-owned. |
| 2.6.02 | R | T | Redundancy. | HAVE (managed services) | — |
| 2.6.03 | R | T | Backups of infra/config. | HAVE (IaC in git) | — |
| 2.6.04 | M | O | Rapid incident response procedure. | ORG-MISSING | IR plan incl. breach notification timelines per region. |
| 2.6.05 | R | O | Incident simulation. | ORG-MISSING | Annual tabletop. |
| 2.7.01 | R | T | Vulnerability scanning + alerting. | MISSING | Artifact Registry scanning, OS Config, dependabot. |
| 2.7.02 | M | O+T | Security-update process for all TRE infra software. | PARTIAL | Patch SOP: runtime image, Cloud Run deps, gcsfuse, Jupyter. |
| 2.7.03 | R | T | Auto-patching. | MISSING (A16) | unattended-upgrades + image rebuild schedule. |
| 2.7.04 | R | O | Penetration tests. | MISSING | Annual external pen test of TRE path. |
| 2.7.05 | R | O | Update controls from test results. | ORG-MISSING | Feed into risk register. |
| 2.7.06 | R | O | Publish testing strategy/results. | ORG-MISSING | Transparency page. |
| 2.8.01 | M | T | Encrypt at rest. | HAVE (GCS/PD/Cloud SQL default; CMEK option in IMS) | Document; consider CMEK for KSA partner cohorts. |
| 2.8.02 | M | T | Encrypt in transit to/from TRE. | HAVE at the edge (Cloud Run/Vercel TLS); api→VM leg plain ws/http (A10) | Ensure browser→Jupyter is TLS end to end. |
| 2.8.03 | R | T | Encrypt inside the TRE. | PARTIAL | Prefer TLS between VM and internal services. |
| 2.8.04 | R | T | Widely accepted algorithms. | HAVE | — |
| 2.8.05 | R | T | Secure key management. | HAVE (Secret Manager; Cloud KMS for CMEK) | — |
| 2.9.01 | O | O | Physical protections. | N-A (cloud) | Terms of use for user premises. |
10.5 Pillar 3 — Data Management (39)
| ID | Imp. | Type | Requirement for the bionl TRE | Status | Build / action |
|---|---|---|---|---|---|
| 3.1.01 | M | O | Assess legal/regulatory implications across the data lifecycle. | ORG-MISSING | Per-cohort onboarding checklist (classification, agreement, retention). |
| 3.1.02 | R | O | Consult and record data-handling decisions. | ORG-MISSING | Decision log; public involvement where personal data. |
| 3.1.03 | M | T+O | Providers classify datasets by a common methodology. | MISSING | Cohort.sensitivityTier (e.g., synthetic / de-identified / identifiable) set by provider at onboarding; drives TRE tier. |
| 3.1.04 | M | T | Ingress process enforcing IG (approvals). | PARTIAL (DataSubmission review flow exists for Lean orgs) | Cohort ingress = provider upload → validation (manifest ↔ metadata) → reviewer approval → publish to regional cohort bucket; reuse DataSubmission pattern. |
| 3.1.05 | M | T | Egress process enforcing IG (approvals). | MISSING | EgressRequest model: files selected from TRE outputs → output checker review → approved files copied to org's normal Analysis drive / download; nothing else leaves. |
| 3.1.06 | M | T | Egress limited to IAO or delegates. | MISSING | Egress permission = explicit role (org admin as delegate, or provider for restricted cohorts). |
| 3.1.07 | O | T | Project-independent egress approval. | MISSING | Optional external checker role. |
| 3.1.08 | M | T | Record of data held (description, source, IAO contact, projects using, received date, retention end). | PARTIAL (ES metadata only) | Cohort entity fields + link to Orders. |
| 3.1.09 | M | O+T | Published data-deletion policy. | MISSING | Policy: locked TREs and their data are retained N days, then deleted with a record (T5). |
| 3.1.10 | R | T | Proof of deletion. | MISSING | Deletion records (object list, timestamps, actor) stored in audit log; exportable certificate. |
| 3.1.11 | R | T | Log modification of input data. | HAVE-by-design (cohort mounts RO) | Cohort re-ingest versioning log. |
| 3.1.12 | M | T+O | Prevent unauthorised ingress/egress to a reasonable extent. | PARTIAL | Rule set item 1–3. |
| 3.1.13 | R | T | Minimum data held. | HAVE-by-design (purchase = subset) | Random per-type allocation keeps only bought files mounted. |
| 3.1.14 | R | T | Archived data read-only. | HAVE (RO mounts, WORM option) | Archive outputs to RO prefix. |
| 3.1.15 | R | O | Simple standard archive formats. | ORG-MISSING | Prefer CSV/Parquet/VCF/DICOM. |
| 3.1.16 | R | O+T | ML artefact data-management plan agreed before start. | MISSING | Purchase-time declaration if training models; egress policy for weights (3.3.07). |
| 3.1.17 | M | O | Specify supported data categories. | MISSING | Public statement: which sensitivity tiers each region's TRE supports. |
| 3.1.18 | O | T | Configurable security controls per project. | PARTIAL (flags/profiles) | TRE profile with toggles (egress, internet allowlist). |
| 3.1.19 | O | T | Pre-defined security tiers. | MISSING | Tier 1 synthetic / Tier 2 de-identified / Tier 3 identifiable (maps to Cohort.sensitivityTier). |
| 3.1.20 | R | T+O | Check metadata for disclosure risk at upload. | MISSING | Ingress validation: small-cell counts, free-text fields, geography granularity; reviewer checklist. |
| 3.2.01 | M | T | No shared accounts. | HAVE (Firebase per person) | Policy statement. |
| 3.2.02 | M | O+T | Reasonably convinced of identity. | PARTIAL: email verification for password users only; Google users skip; open self-signup (A11) | Verified email + org admin vouch; ID check for Tier 3. |
| 3.2.03 | M | T | Access only to data required. | PARTIAL | TRE membership + per-order mounts. |
| 3.2.04 | M | T | MFA for all users. | MISSING (A11) | Enforce Firebase MFA (TOTP/SMS) for TRE members; block TRE entry without MFA. |
| 3.2.05 | O | T | Federated auth/SSO. | PARTIAL (Google sign-in) | Institutional SAML/OIDC later (ClickUp 1.1). |
| 3.2.06 | O | T | Restrict to networks/locations. | MISSING | Optional org IP allowlist for TRE. |
| 3.3.01 | R | T+O | System to classify outputs. | MISSING | Egress request form with output class (aggregate/figure/model/code). |
| 3.3.02 | R | O | Minimum outputs. | ORG-MISSING | Guidance in egress SOP. |
| 3.3.03 | R | T+O | Intended outputs declared at outset. | MISSING | Purpose + intended outputs at purchase. |
| 3.3.04 | M | O+T | Documented disclosure-control process for all outputs. | MISSING | SDC handbook-based SOP; enforced by egress workflow. |
| 3.3.05 | M | O+T | Responsibility for output checking assigned. | MISSING | Output Checker role (bionl ops or provider delegate) in RBAC. |
| 3.3.06 | R | O | Statistical basis for decisions. | ORG-MISSING | Adopt SDC rules (thresholds, dominance). |
| 3.3.07 | M | O | Policy for outputs that cannot be manually checked (binaries, model weights). | ORG-MISSING | Policy: default deny for model weights/binaries; conditions for release. |
| 3.3.08 | O | T | Semi-automated output checks. | MISSING | Later: automated small-cell/file-type scan. |
| 3.3.09 | O | T | Machine-readable disclosure-control record per output package. | MISSING | EgressRequest stores JSON of rules/thresholds/versions. |
| 3.4.01 | R | T | Metadata catalogue of datasets, itself disclosure-controlled. | HAVE (cohorts catalogue) | Ensure public facets can't leak small-cell counts (min threshold on counts). |
| 3.4.02 | R | T | Consistent metadata model. | HAVE (DATA_PROVIDER_METADATA_SPECIFICATION) | Publish schema; field registry (ClickUp 8.2). |
| 3.4.03 | O | T | Query interface for data consumers/subjects. | HAVE (search/facets) | — |
| 3.4.04 | O | T | Summary/synthetic data without exposing data. | HAVE (dashboards, Synthea cohorts) | — |
10.6 Pillar 4 — Supporting Capabilities (17)
| ID | Imp. | Type | Requirement | Status | Build / action |
|---|---|---|---|---|---|
| 4.1.01 | R | O | Business continuity plan covering TRE loss of service. | ORG-MISSING | BCP doc. |
| 4.1.02 | R | O | Test BCP regularly. | ORG-MISSING | Annual test. |
| 4.2.01 | R | T+O | Named project manager per project. | MISSING | Order.projectManagerId (purchaser by default). |
| 4.2.02 | R | O | PMs without direct TRE access. | ORG-MISSING | Optional separation for enterprise orgs. |
| 4.3.01 | M | O | Document all TRE features. | PARTIAL | TRE documentation set (user guide, operator runbook, architecture, this matrix). |
| 4.3.02 | R | O | Education programme. | ORG-MISSING | Onboarding module + FAQ. |
| 4.3.03 | R | O | Annual training needs analysis. | ORG-MISSING | Calendar item. |
| 4.4.01 | M | T+O | Projects aware of costs and able to pay. | HAVE (purchase + credits) | Show TRE compute cost alongside data price. |
| 4.4.02 | R | T | Track cost per project. | PARTIAL (per org) | Attribute VM/storage cost to Order. |
| 4.4.03 | R | O | Financial sustainability. | ORG-MISSING | Finance. |
| 4.4.04 | R | O | Minimise infra cost. | HAVE (idle watchdog, scale-to-zero) | — |
| 4.5.01 | M | O | Procurement plan for goods/services. | ORG-MISSING | List: GCP, Frame, ES hosting, pen-test vendor. |
| 4.6.01 | M | O | Operator team supporting projects. | PARTIAL (bionl ops) | Named support channel + SLAs. |
| 4.7.01 | R | O | Stakeholder feedback process. | PARTIAL (support email/ClickUp) | Public feedback form. |
| 4.8.01 | R | O | Access to legal advice. | ORG-MISSING | Retain counsel per region. |
| 4.8.02 | R | O | Access to data-protection advice. | ORG-MISSING | DPO / advisor. |
| 4.8.03 | R | O | Contract management owner. | ORG-MISSING | Name owner for DUAs/DPAs. |
10.7 Pillar 5 — Federation (21) — N/A today, relevant if KSA and US TREs are run as a federation or if bionl joins one
5.1.01–5.1.10 (governance: scope/structure, roles + shared-responsibility model, common rules + auditable compliance status, sharing incident/audit data, SOP lifecycle, join/leave processes, common risk approach, glossary (R), common access templates (R), public representation (M*)); 5.2.01 (baseline competency, safe-people registry via API); 5.3.01–02 (Safe Projects register via API; agreed legal/ethical standards); 5.4.01–04 (encryption/keys/PKI standards, shared incident response, common identities (R), shared security logs (R)); 5.5.01 (accurate config info on federation services); 5.6.01–02 (safe-output definition; cross-member metadata catalogue (R)); 5.7.01 (transparent pricing framework (R)). Design note: keep Orders/Safe-Projects register, training records and audit logs API-exposable so the two regional TREs could later federate without redesign.
10.8 What SATRE changes in the proposed design (§5)
- New models:
TreMembership(user × TRE workspace, MFA-verified, terms version, training record),UserTraining,EgressRequest(+ items, checker decision, disclosure-control JSON),AuditEvent(append-only, mirrored to locked Cloud Logging bucket),Cohort.sensitivityTier / accessLevel / agreementRef / iaoContact / retentionUntil,Order.purpose / intendedOutputs / mlPlan / projectManagerId,DeletionRecord. - TRE network profile: dedicated subnet + firewall tag per region, no external IP, egress allowlist proxy, Private Google Access; Batch/Nextflow for TRE jobs on the same profile.
- Runtime/web feature gates for
kind=tre: download/export/upload/publish/git-push/URL-import off; egress request UI on; TRE banner; MFA + terms + training gate on entry. - Ops artefacts to write: policy repo (IG, risk, incident, change, deletion, disclosure control, training), roles RACI, supplier register, public transparency pages, SATRE self-assessment spreadsheet (initial scores from this matrix).
- Launch gate: all Mandatory statements in pillars 1–4 scored ≥1; Federation N/A.