generated from coulomb/repo-seed
Point lifecycle and rotation procedures at railiance-platform docs for CCR-2026-0005.
90 lines
3.4 KiB
Markdown
90 lines
3.4 KiB
Markdown
# reuse-surface Hub Write Token — OpenBao Custody
|
|
|
|
Date: 2026-07-07 (promoted active 2026-07-07)
|
|
Workplan: RAILIANCE-WP-0011-T03 · CCR-2026-0005
|
|
Catalog: `reuse-surface-hub-write-token` (**active** — path live, ESO delivering)
|
|
|
|
Bearer token for authenticated writes to the production federation hub at
|
|
`https://reuse.coulomb.social` (`POST /v1/repos`, `reuse-surface hub register`).
|
|
ops-warden does not vend this token — custody belongs to `railiance-platform`
|
|
(OpenBao) and the `reuse-surface` workload via External Secrets.
|
|
|
|
---
|
|
|
|
## Owner-confirmed lane (no placeholders)
|
|
|
|
| Field | Value |
|
|
| --- | --- |
|
|
| OpenBao server | `https://bao.coulomb.social` (coulombcore) |
|
|
| KV path | `platform/workloads/reuse/reuse-surface/runtime-secrets` |
|
|
| Hub write field | `REUSE_SURFACE_TOKEN` |
|
|
| Webhook HMAC field | `REUSE_SURFACE_FORGEJO_WEBHOOK_SECRET` |
|
|
| Read policy | `workload-kv-read-reuse-surface-runtime` |
|
|
| ESO delivery | `ExternalSecret reuse/reuse-surface-runtime` → `reuse-surface-env` (Railiance01) |
|
|
| Deploy runbook | `railiance-apps/docs/reuse-surface-on-railiance01.md` |
|
|
| Hub API spec | `reuse-surface/specs/FederationHubAPI.md` |
|
|
|
|
**Promotion gate (met 2026-07-07):** path seeded, `ExternalSecret reuse/reuse-surface-runtime`
|
|
`SecretSynced`, positive hub + webhook verification and negative default-policy denial
|
|
recorded in CCR-2026-0005.
|
|
|
|
### Break-glass (cluster read)
|
|
|
|
If OpenBao is unreachable, operators with Railiance01 kubeconfig may read the
|
|
materialized Secret (ESO cache):
|
|
|
|
```bash
|
|
kubectl --kubeconfig ~/.kube/config-hosteurope get secret reuse-surface-env -n reuse \
|
|
-o jsonpath='{.data.REUSE_SURFACE_TOKEN}' | base64 -d
|
|
```
|
|
|
|
Never paste values into chat, State Hub, workplans, or Git.
|
|
|
|
---
|
|
|
|
## Worker checklist
|
|
|
|
1. **Confirm OpenBao reachability** (you act as yourself; ops-warden adds no credential):
|
|
```bash
|
|
bao kv metadata get platform/workloads/reuse/reuse-surface/runtime-secrets
|
|
```
|
|
|
|
2. **Export hub write token for a shell session** (streams to your terminal):
|
|
```bash
|
|
export REUSE_SURFACE_URL=https://reuse.coulomb.social
|
|
export REUSE_SURFACE_TOKEN=$(
|
|
bao kv get -field=REUSE_SURFACE_TOKEN \
|
|
platform/workloads/reuse/reuse-surface/runtime-secrets
|
|
)
|
|
```
|
|
|
|
3. **Or proxy via warden access** (same `bao kv get`, audited metadata only):
|
|
```bash
|
|
warden route show reuse-surface-hub-write-token --json
|
|
warden access reuse-surface-hub-write-token --no-policy --fetch
|
|
```
|
|
|
|
4. **Webhook HMAC** (same path, second field — must match Forgejo org webhook):
|
|
```bash
|
|
bao kv get -field=REUSE_SURFACE_FORGEJO_WEBHOOK_SECRET \
|
|
platform/workloads/reuse/reuse-surface/runtime-secrets
|
|
```
|
|
After rotation: `railiance-apps` `make reuse-forgejo-webhook`.
|
|
|
|
5. **Register a repo** after publish-check passes:
|
|
```bash
|
|
reuse-surface hub status
|
|
reuse-surface hub register --repo <slug> \
|
|
--url <forgejo-raw-capabilities-yaml-url> \
|
|
--domain <domain>
|
|
```
|
|
|
|
6. **Verify federated index** picked up the new source:
|
|
```bash
|
|
curl -fsS "$REUSE_SURFACE_URL/v1/federated" | jq '.sources | map(.repo) | index("<slug>")'
|
|
```
|
|
|
|
Rotation: `railiance-platform/docs/reuse-surface-runtime-secrets-rotation-runbook.md`
|
|
(OpenBao patch → ESO `force-sync` → hub rollout → `make reuse-forgejo-webhook` when
|
|
the webhook HMAC changes → `make reuse-webhook-smoke`). Lifecycle:
|
|
`railiance-platform/docs/credential-lane-lifecycle-runbook.md` (CCR-2026-0005). |