Promote Inter-Hub bootstrap lane to active catalog with worker checklist, attended/unattended branches, and flex-auth/OpenBao pointers. Mark WP-0012 T2/T3 done; ops-bridge tunnel playbook shipped in prior WP-0013 commit.
5.5 KiB
Inter-Hub Bootstrap Access Lane
Date: 2026-06-24 (catalog alignment)
Catalog id: inter-hub-bootstrap-ssh — warden route show inter-hub-bootstrap-ssh --json
Purpose
This runbook describes how ops-warden participates in authenticated Inter-Hub
bootstrap tasks, especially the ops-hub production activation lane tracked by
CUST-WP-0049.
ops-warden does not store Inter-Hub API keys. Its role is to issue short-lived SSH certificates for a narrow actor so an operator or agent can reach a trusted execution host without introducing static SSH keys into the workflow.
Boundary
ops-warden owns:
- actor registration
- short-lived certificate issuance
- TTL and principal policy
ops-ssh-wrapperusage
ops-warden does not own:
- Inter-Hub operator key storage
- OpenBao policy or secret paths
- host-side
/etc/ssh/auth_principals/deployment - force-command wrappers
- database migrations or Kubernetes access
Those host-side controls belong to railiance-infra or the relevant
deployment repo. Long-lived secret custody belongs in OpenBao or the approved
operator secret store.
Actor Pattern
Use a dedicated agt actor for Codex-assisted bootstrap work:
warden inventory add agt-codex-interhub-bootstrap \
--type agt \
--principal agt-interhub-bootstrap \
--ttl 2 \
--description "Short-lived agent access for attended Inter-Hub bootstrap execution"
Guidance:
- Prefer a 1-2 hour TTL for attended bootstrap.
- Keep the principal narrower than general ops access.
- Do not reuse human
admactors for agent-assisted bootstrap runs. - Remove or disable the actor after the bootstrap lane is no longer needed.
Worker checklist
- Confirm the bootstrap run is approved (
CUST-WP-0049or equivalent workplan). - Register or verify the narrow
agtactor in inventory (warden inventory list). - Sign a short-lived cert:
warden sign agt-codex-interhub-bootstrap --pubkey <path>. - Confirm host principal
agt-interhub-bootstrapis deployed (railiance-infrassh_principals.yaml; optional drift check:scripts/check_principals_drift.py). - Choose attended or unattended material access (below).
- Run via
ops-ssh-wrapperor attended SSH; collect non-secret evidence only.
For generic SSH issuance steps see catalog id ssh-cert-host-access.
Attended bootstrap
Use when host-side force-command / OpenBao read paths are not yet provisioned.
- Operator holds the Inter-Hub operator key in an attended
0600temp file (IHUB_OPERATOR_KEY_FILE) — never commit or paste in chat. - ops-warden signs the bootstrap actor cert (step 3 above).
- Operator runs the repo-owned bootstrap command on the trusted host, for example
make interhub-bootstrapinops-hub. - Operator stores any generated runtime key into OpenBao immediately.
- Record non-secret evidence in State Hub (ids, status, key prefixes).
Example client-side wrapper use:
WARDEN_ACTOR=agt-codex-interhub-bootstrap \
SSH_PUBKEY="$HOME/.ssh/id_ed25519.pub" \
ops-ssh-wrapper ssh ops-bootstrap@<trusted-host> run-ops-hub-interhub-bootstrap
The exact remote command and host account are environment-specific and should be provisioned by the deployment repo.
Unattended bootstrap
Use only after railiance-infra ships host-side controls (principals, force-command, wrapper).
- ops-warden signs the bootstrap actor cert.
- Target host accepts only the
agt-interhub-bootstrapprincipal. - Host-side wrapper reads the Inter-Hub operator key from OpenBao (see pointers below) — ops-warden does not vend that key.
- Wrapper runs the approved bootstrap routine and writes the runtime key back to OpenBao.
- Wrapper prints non-secret evidence only.
Without force-command and OpenBao read paths, stay on the attended branch.
flex-auth and OpenBao pointers
ops-warden issues the SSH envelope only. Custody and authorization live elsewhere:
| Need | Route | Notes |
|---|---|---|
| Inter-Hub operator key read/write | warden route show openbao-api-key --json |
railiance-platform owns paths |
| Authorization before sensitive bootstrap | warden route show flex-auth-policy-check --json |
flex-auth PDP when policy applies |
| Host principal deploy | warden route show railiance-infra-principals --json |
Ansible ssh_principals.yaml |
Do not restate OpenBao path strings here — they change in railiance-platform.
Host-Side Requirements
Before this lane can be used in production, railiance-infra or the deployment owner should provide:
- an auth principals entry for
agt-interhub-bootstrap - password auth disabled for the target account
- a force-command or restricted wrapper for the bootstrap path
- OpenBao read access for the Inter-Hub operator key, if unattended material access is approved
- OpenBao write access for the generated ops-hub runtime key
- non-secret execution logging
Without those controls, use only an attended local IHUB_OPERATOR_KEY_FILE
run.
Non-Secret Evidence
Safe evidence to copy into State Hub:
- workplan id and task id
- Inter-Hub base URL
- hub id and slug
- manifest id and status
- API consumer id
- runtime key prefix
- widget counts
- event id and event type
Never log:
- full operator keys
- full runtime API keys
- OpenBao tokens
- kubeconfig contents
- raw SQL output that could include secrets
Related Work
the-custodian/workplans/CUST-WP-0049-interhub-bootstrap-access-lane.mdops-hub/docs/bootstrap-runbook.mdwiki/AccessManagementDirective.mdwiki/OpsWardenConfig.mdwiki/CertCommandInterface.md