docs(audit): Hetzner API provisioning spike — both offsite models FIT
KEY: Storage Box API is api.hetzner.com/v1 (NOT api.hetzner.cloud/v1). Proven live on spike-* (torn down): sub-account create/reset/readonly/delete + billable bx11 box create/change_type/delete. Create takes a password (no ssh-key param) → transient-pw→ssh-copy-id -s -f→restic reach→reset_subaccount_password (key-only steady state). RepoPath /home/<repo>; quota levers (dedicated=box type, shared= readonly+soft-quota); idempotency via label_selector. SECURITY: token is project-wide unscopeable — can touch ep0 + SSH keys → move customer boxes to a dedicated Hetzner project. No prod code; spike torn down clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSK5g6qYLknKj8u3QAFEr6
This commit is contained in:
+12
@@ -3,6 +3,18 @@
|
||||
> Created with the REUSE.md rollout (2026-07-03). Authoritative history: `hub/CHANGELOG.md` (hub),
|
||||
> `website/CHANGELOG.md`, `scripts/CHANGELOG.md`; end-of-task detail in `REPORT.md`.
|
||||
|
||||
- **2026-07-09 — Hetzner API provisioning spike (offsite tier).** Both offsite models are API-provisionable
|
||||
(FIT). **#1 correction: the Storage Box API is `https://api.hetzner.com/v1`, NOT `api.hetzner.cloud/v1`**
|
||||
(Cloud API 404s for storage boxes); same Bearer token. Proven live on `spike-*` (torn down): sub-account
|
||||
create/reset/readonly/delete + a billable bx11 box create/rescale(`change_type`)/delete. Create takes a
|
||||
**password (no ssh-key param)** → transient-password→`ssh-copy-id -s -f`→restic-reach→`reset_subaccount_password`
|
||||
(transient pw invalidated, key survives) = key-only steady state. RepoPath `/home/<repo>` (chroot). Quota:
|
||||
dedicated=box type/`change_type` (hard); shared=no native quota → Felhom soft-quota + `update_access_settings{readonly}`
|
||||
freeze. Idempotency = **label_selector** (box names not unique). Rate 3600/h. **SECURITY: the token is
|
||||
project-wide unscopeable Read+Write — it can also touch ep0 (the prod offsite server) + 3 SSH keys →
|
||||
move customer boxes to a DEDICATED Hetzner project before the hub holds a write token.** Record:
|
||||
`documentation/audits/SPIKE-hetzner-api-provisioning-2026-07-09.md`. NEXT: the hub-provisioning impl.
|
||||
|
||||
- **2026-07-09 — fork-4 custody VALIDATED end-to-end live (supervised).** The full custody cycle proven on
|
||||
the demo (agent v0.77.0 + controller v0.105.0): enable → controller pushes the repo password to the agent →
|
||||
**real escrow ceremony** (`--selftest=escrow-create`, K + restic-pw under a fresh R, uploaded to the hub,
|
||||
|
||||
Reference in New Issue
Block a user