SEC-1: sovereign age-key backup + rotation tooling + runbook #52
No reviewers
Labels
No labels
bug
discussion
duplicate
enhancement
goal
help wanted
horizon:backlog
horizon:governance
horizon:mvp
invalid
operator-decision
question
roadmap
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
open-platform/mitosis!52
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/sec-1-age-key-rotation"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Implements roadmap SEC-1 (plat/mitosis#26): backup + rotation lifecycle for the sovereign age key.
What
bin/lib.shfork_backup_key— at germination, writes an age-encrypted (or clearly operator-guarded) backup of the sovereign key toFORK_KEY_BACKUP, encrypting toFORK_KEY_BACKUP_RECIPIENTwhen given, and forces an explicit custody acknowledgment (FORK_KEY_ACK=1or a typedYESon a TTY) before the platform is built. No backup path → loud instruction, never a silent skip. The on-disk key is unchanged and remains the sole key — sovereignty is not weakened.rotate_age_key(+_rotate_*helpers) — mints a new keypair, re-seals everyclusters/**sops file preserving values viasops updatekeys(not the regenerate-fresh shortcut), rotates the data key so the retired key decrypts nothing, updates.sops.yamland the in-clustersops-ageSecret, removes the old recipient, and gates onfork_verify_all_sealed. Safe live ordering (add recipient+push → swap in-cluster key → remove old+rotate+push) so Flux never loses the ability to decrypt.bin/germinate— callsfork_backup_keyat key creation; the YOUR PLATFORM card notes the backup path.docs/ops/age-key-rotation.md— runbook: backup, lost-key recovery, suspected-compromise rotation.Validation
Validated LIVE on a throwaway vxrail k3d platform (see PR thread for evidence): values preserved in a running pod after rotation; new key verifies + old key fails; old key decrypts nothing under
clusters/**; restore-from-backup recovers a platform whose local key was moved aside.Closes #26.
🤖 Generated with Claude Code