ops-warden/wiki/playbooks/railiance-backup-offsite-lane.md
tegwick ea98d6bf39
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
WARDEN-WP-0026 T01: capabilities-safe lane verification + incident note
T01 (done): canonical capabilities-based verify pattern in the fleet promotion
checklist (catalog-lane-promotion.md) and applied to the railiance-backup and
forgejo-admin lane playbooks. Verification proves allow/deny via
`bao token capabilities` against the KV v2 data path, never `bao kv get`; a denied
default-policy token-create is a pass, not a privileged-fallback trigger.

T07 (progress): lessons-learned note for the 2026-07-16 CCR-2026-0004 disclosure
(three root causes). Live re-verify + rotation block remain (depend on T06).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 14:26:05 +02:00

83 lines
No EOL
2.8 KiB
Markdown

# Railiance Offsite Backup Lane
Date: 2026-07-07
Catalog: `railiance-backup-offsite-lane` (status `draft`, `resolvable: false` until verified)
Owner: `railiance-platform` (CCR-2026-0004)
Nextcloud WebDAV upload token and URL for age-encrypted offsite backups (Option A).
Used by `railiance-backup` (workstation) and `forgejo-backup` (platform).
---
## OpenBao pointers
| Field | Value |
| --- | --- |
| Mount | `platform` |
| Path | `platform/workloads/railiance/backup/offsite-lane` |
| Fields | `NC_WEBDAV_TOKEN`, `NC_WEBDAV_URL`, `AGE_PRIVATE_KEY` |
| Policy | `workload-kv-read-railiance-backup-offsite-lane` |
| OIDC role | `railiance-backup-workload-kv-read` (`groups=net-kingdom-admins`) |
---
## Worker checklist
1. **Login** (caller identity — ops-warden adds no credential):
```bash
bao login -method=oidc -path=netkingdom role=railiance-backup-workload-kv-read
```
2. **Export for a backup run** (value streams to your shell — never paste into chat):
```bash
export RAILIANCE_BACKUP_NC_TOKEN=$(
bao kv get -field=NC_WEBDAV_TOKEN platform/workloads/railiance/backup/offsite-lane
)
export RAILIANCE_BACKUP_NC_WEBDAV_URL=$(
bao kv get -field=NC_WEBDAV_URL platform/workloads/railiance/backup/offsite-lane
)
```
3. **Or proxy via warden access** (after catalog promotion):
```bash
warden access railiance-backup-offsite-lane --no-policy --fetch --field NC_WEBDAV_TOKEN
```
4. **Run backup**:
```bash
# workstation custodian DB + config
bin/railiance backup
# Forgejo production (from railiance-platform checkout)
tools/cmd/forgejo-backup
```
`AGE_PRIVATE_KEY` in the same path is recovery escrow — fetch only for restore drills.
---
## Verify the lane (capabilities-safe — never read the value)
Prove allow/deny with `bao token capabilities`, **not** `bao kv get`. Reading the
value to "confirm" it triggered the 2026-07-16 disclosure of `NC_WEBDAV_TOKEN` /
`NC_WEBDAV_URL` / `AGE_PRIVATE_KEY` (see `history/2026-07-16-credential-disclosure-lessons.md`).
```bash
# Positive: lane OIDC identity can read the data path
bao login -method=oidc -path=netkingdom role=railiance-backup-workload-kv-read
bao token capabilities "$(bao print token)" platform/data/workloads/railiance/backup/offsite-lane
# → expect: read
# Negative: default-only identity is denied (no value is read)
DEFAULT_TOKEN=$(bao token create -policy=default -field=token) # if this is denied, that IS the pass — do NOT fall back
bao token capabilities "$DEFAULT_TOKEN" platform/data/workloads/railiance/backup/offsite-lane
# → expect: deny
```
The capability lists contain no secret material — safe to record on
`CCR-2026-0004` as promotion evidence. Full pattern:
`wiki/playbooks/catalog-lane-promotion.md#capabilities-safe-lane-verification`.