OpenBao Bootstrap
Use this once after the OpenBao HelmRelease has reconciled. The deployment uses integrated Raft storage and GCP KMS auto-unseal; it starts intentionally empty.
Preconditions
The Terraform change creating the
openbaoGCP KMS key has applied through Atlantis.Flux reports the
vaultHelmRelease Ready in thevaultnamespace.A 1Password vault is ready to hold the recovery keys and initial root token. Never put them in Git, a terminal recording, or this wiki.
Initialize
Confirm the pod is running and uninitialized:
kubectl --context folly -n vault get pods -l app.kubernetes.io/name=openbao kubectl --context folly -n vault exec vault-openbao-0 -- bao statusInitialize exactly once. Capture the output directly into the approved secret store without pasting it into a shell history or chat:
kubectl --context folly -n vault exec -it vault-openbao-0 -- bao operator initVerify the instance is initialized and unsealed:
kubectl --context folly -n vault exec vault-openbao-0 -- bao status
Verify
Open
https://vault.lolwtf.ca/ui/and authenticate with the initial root token only long enough to establish the intended administrator and policies.Confirm a pod restart auto-unseals through GCP KMS before storing production material.
Create required auth methods, mounts, policies, audit devices, and the fresh PKI through a reviewed follow-up change.
Rollback
Before new production data is written, restore the previous HelmRelease chart and GCP KMS/storage configuration from Git, then reconcile Flux.
Do not remove the old Vault GCS bucket or KMS key until OpenBao has been verified for the agreed retention window.
Linked references 3
Use this before wiring folly's monitoring Flux Kustomization to a monitoring-crds dependency. It is a one-time, hand-run step against the live folly cluster — one of the few kinds this repo carves out an exception for, because Helm's ownership convention has no git-declared path: Helm decides whether to adopt a pre-existing object by reading labels and annotations off the live object, not off anything a Kustomization can express. Runbooks/OpenBao Bootstrap is the same shape of exception, for the same reason — a one-time bootstrap action git cannot express, done once and never repeated by drift-correcting machinery.
Bootstrapping (init, unseal verification, first policies) is a runbook, not architecture: Runbooks/OpenBao Bootstrap.
Runbooks/OpenBao Bootstrap — initialize and verify the folly OpenBao instance