Strata design: the data sovereignty case (refs #63) 82504d09aefe
- Author
- Andy McCall @andymccall <[email protected]>
- When
- · 2026-10-03 10:54 UTC
- Signature
- ✔ signed by Andy McCall
- Hash
82504d09aefe20a3fb11283182d573d87a0ae926bb91d88bd2e8e77d08388636- Depends on
- a70dce536476
- Depended on by
- ac4af91530fc
- In bookmarks
- agents-in-readme bare-hashes carried-not-removed carry-identical doctor-trust identical-sides keyless-tags main merge-remote-bookmark only-help-103 paths-for-resolutions-and-amend push-notes show-stat subrepo-pin-state switch-says
- In tags
- v0.10.0 v0.11.0 v0.4.0 v0.4.1 v0.4.2 v0.4.3 v0.4.4 v0.4.5 v0.4.6 v0.5.0 v0.5.1 v0.6.0 v0.7.0 v0.8.0 v0.9.0
- Edits
- 1 atom, 0 tree operations, 1 file
Browse the tree at this change
modified docs/stores.md +31 −0
| … | 27 unchanged lines |
||
| 28 | 28 | Performance is "good enough" for one engineer today. This work is about |
|
| 29 | 29 | where a repository can live, not about speed. |
|
| 30 | 30 | ||
| 31 | + | ## 1a. The driving case: data sovereignty |
|
| 32 | + | ||
| 33 | + | UK Government work requires data to be kept on UK shores. On GitLab SaaS |
|
| 34 | + | that meant waiting for GitLab to build UK data centres, and it was still |
|
| 35 | + | unclear where runners kept their data, so the runners were self-hosted. |
|
| 36 | + | ||
| 37 | + | Strata answers that for repositories: they live in the customer's own |
|
| 38 | + | bucket, in their region, encrypted with their own KMS key. A sovereign |
|
| 39 | + | forge needs the same for everything else: |
|
| 40 | + | ||
| 41 | + | - **Flow artifacts, logs and caches** in the customer's bucket. Today |
|
| 42 | + | artifacts are kept in the hub's store and logs in its database. This is |
|
| 43 | + | the next gap after Strata. |
|
| 44 | + | - **Forge records** (issues, proposals, reviews) in a database in the |
|
| 45 | + | customer's region. |
|
| 46 | + | - **Keys held by the customer:** KMS for storage, developers' own keys |
|
| 47 | + | for signing. |
|
| 48 | + | ||
| 49 | + | The model to aim for is **control plane anywhere, data plane in the |
|
| 50 | + | customer's account**: |
|
| 51 | + | - **Content is never trusted to the operator.** It is hash-verified and |
|
| 52 | + | signed, so it stays tamper-evident whoever runs the hub. |
|
| 53 | + | - **Crypto-shredding.** Revoking the customer's KMS key makes the data |
|
| 54 | + | unreadable everywhere, including backups. That is a clean exit and |
|
| 55 | + | deletion guarantee. |
|
| 56 | + | - **The customer audits the vendor.** Every read the hub makes appears in |
|
| 57 | + | the customer's own CloudTrail or GCS audit logs. |
|
| 58 | + | - **Rendering stays in-region.** Rendering code for the browser needs |
|
| 59 | + | plaintext, so a store-and-render node runs inside the customer's |
|
| 60 | + | account, and only orchestration and the UI shell run outside it. |
|
| 61 | + | ||
| 31 | 62 | ## 2. What users see |
|
| 32 | 63 | ||
| 33 | 64 | Storage must be transparent: a bucket behaves like any other remote, with |
|
| … | 163 unchanged lines |