net-kingdom/runbooks/openbao-emergency-lockdown/pack.yaml
tegwick 1fbebb2d94
Some checks are pending
CI Smoke / host-smoke (push) Waiting to run
CI Smoke / container-smoke (push) Waiting to run
Port the seven console runbooks to native runbook-pack/v0.2 packs (NK-WP-0044-T07)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: sonnet
Assistant-Process: 6969@bnt-lap001
Assistant-Session: e8ae73f2-8385-4c9c-b714-94c3c52cdbc0
2026-09-29 23:14:52 +02:00

79 lines
3 KiB
YAML

spec: runbook-pack/v0.2
id: nk.openbao-emergency-lockdown
title: OpenBao emergency lock-down
owner: net-kingdom
outcome: OpenBao is sealed, sealed state is confirmed, and the drill or incident outcome is recorded without secrets.
engine: native
confirm_phrase: I understand this cannot be undone
framing:
- Sealing stops all access to stored assets until a quorum of shares unseals it again.
- Confirm the quorum is available before sealing outside an incident.
- Ported from the security bootstrap console runbook "Emergency lock-down".
actors:
- id: operator
role: OpenBao ceremony operator
description: Holds a root or sudo-capable token and seals the instance.
privileges: [openbao-root-or-sudo]
datapoints:
- id: evidence_path
label: Emergency drill evidence file
type: path
default: /tmp/netkingdom-openbao-emergency-drill/evidence.json
dimensions: {actor: operator, kind: location, subsystem: openbao}
ask_in: seal
stages:
- id: seal
title: Seal and confirm
goal: OpenBao reports Sealed true.
steps:
- id: seal-now
title: Seal OpenBao
actor: operator
owner: openbao
command: |
printf "OpenBao token: " >&2; read -rs OPENBAO_TOKEN; printf "\n" >&2
printf "%s\n" "$OPENBAO_TOKEN" | kubectl exec -i -n openbao openbao-0 -- sh -c 'read -r BAO_TOKEN; export BAO_TOKEN; bao operator seal'
unset OPENBAO_TOKEN
reversible: false
idempotent: idempotent
idempotent_note: Sealing an already sealed instance changes nothing.
auto_confirm: manual-only
rollback: Unseal with a quorum of shares (attended ceremony).
verify:
done_when: The seal command succeeded
expect: manual
- id: confirm-sealed
title: Confirm sealed status
actor: operator
owner: openbao
requires: [seal-now]
command: kubectl exec -n openbao openbao-0 -- bao status
idempotent: idempotent
verify:
done_when: Sealed is true
expect: manual
gates:
- id: sealed
title: OpenBao is sealed
goal: contained-exposure
blocking: true
downstream_risk: Stored assets stay reachable during the incident.
checks:
- done_when: Status reports Sealed true
expect: manual
- id: record
title: Record the outcome
goal: Non-secret drill or incident evidence validates.
requires: [seal]
steps:
- id: validate-evidence
title: Validate the emergency evidence
actor: operator
owner: railiance-platform
uses: [evidence_path]
command: make -C ../railiance-platform openbao-validate-emergency-evidence OPENBAO_EMERGENCY_EVIDENCE={{evidence_path}}
idempotent: idempotent
verify:
done_when: The validator accepts the evidence
command: make -C ../railiance-platform openbao-validate-emergency-evidence OPENBAO_EMERGENCY_EVIDENCE={{evidence_path}}
expect: exit-0