Start DISCTL-WP-0002: policies, registers, runbooks, playbooks
Expand AssetRegister and DataRegister with T0/T4 stack assets. Add ResiliencePolicy, PanicSheet, full-server-loss runbook, and five incident playbooks. Update README with mirror status. Mark T02-T05, T07-T08 done; T01 and T06 in progress.
This commit is contained in:
parent
4288ad21a9
commit
d011073e16
13 changed files with 814 additions and 29 deletions
|
|
@ -1,10 +1,10 @@
|
|||
# Resilience Control Plane — asset register (initial seed)
|
||||
# DISCTL-WP-0003-T01 — railiance-backup tool family and backup lanes
|
||||
# Broader T0/T4 inventory (domains, Stripe, Bubble, etc.) follows in DISCTL-WP-0002-T02.
|
||||
# Backup lanes: DISCTL-WP-0003-T01. Stack assets (T0/T4): DISCTL-WP-0002-T02.
|
||||
|
||||
schema_version: "0.1"
|
||||
schema_version: "0.2"
|
||||
updated: "2026-07-07"
|
||||
register_scope: backup_lanes
|
||||
register_scope: backup_lanes_and_stack
|
||||
|
||||
tier_definitions:
|
||||
T0: "Identity / trust / money — recoverable even after breach"
|
||||
|
|
@ -216,6 +216,246 @@ backup_streams:
|
|||
- history/2026-07-04-forgejo-backup-strategy-assessment.md
|
||||
- specs/ResilienceControlSetup.md
|
||||
|
||||
assets:
|
||||
# ── T0 Identity / trust / money ──────────────────────────────────────────────
|
||||
|
||||
- id: asset-dns-coulomb-social
|
||||
name: coulomb.social DNS zone
|
||||
tier: T0
|
||||
owner: Bernd
|
||||
provider: IONOS
|
||||
hosts:
|
||||
- gitea.coulomb.social
|
||||
- forgejo.coulomb.social
|
||||
- hub.coulomb.social
|
||||
- reuse.coulomb.social
|
||||
production_ips:
|
||||
coulombcore_legacy: "92.205.130.254"
|
||||
railiance01: "92.205.62.239"
|
||||
recovery_path:
|
||||
method: IONOS control panel + zone record export
|
||||
backup_admin: unknown
|
||||
mfa_recovery: unknown
|
||||
break_glass: unknown
|
||||
backup: manual export after changes
|
||||
status: at_risk
|
||||
gaps:
|
||||
- "Registrar lock status not inventoried"
|
||||
- "MFA recovery codes not recorded here"
|
||||
- "No automated zone export"
|
||||
|
||||
- id: asset-registrar-ionos
|
||||
name: Domain registrar (IONOS)
|
||||
tier: T0
|
||||
owner: Bernd
|
||||
recovery_path:
|
||||
method: IONOS account login
|
||||
backup_admin: unknown
|
||||
mfa_recovery: unknown
|
||||
break_glass: unknown
|
||||
status: unknown
|
||||
gaps:
|
||||
- "Backup admin contact not recorded"
|
||||
- "Account lock + MFA recovery not evidenced"
|
||||
|
||||
- id: asset-email-ionos
|
||||
name: coulomb.social email (IONOS SMTP)
|
||||
tier: T0
|
||||
owner: Bernd
|
||||
mailboxes:
|
||||
- forgejo@coulomb.social
|
||||
recovery_path:
|
||||
method: IONOS mail control panel
|
||||
backup_admin: unknown
|
||||
mfa_recovery: unknown
|
||||
status: operational
|
||||
gaps:
|
||||
- "Recovery path not fully documented"
|
||||
|
||||
- id: asset-stripe-admin
|
||||
name: Stripe account (payments / subscriptions)
|
||||
tier: T0
|
||||
owner: Bernd
|
||||
recovery_path:
|
||||
method: Stripe dashboard login
|
||||
backup_admin: unknown
|
||||
mfa_recovery: unknown
|
||||
break_glass: unknown
|
||||
backup: scheduled CSV export (not established)
|
||||
status: at_risk
|
||||
gaps:
|
||||
- "No scheduled export evidenced"
|
||||
- "Recovery contacts not inventoried"
|
||||
|
||||
- id: asset-openbao-recovery
|
||||
name: OpenBao sealed recovery material
|
||||
tier: T0
|
||||
owner: Bernd
|
||||
host: railiance01
|
||||
recovery_path:
|
||||
method: OpenBao unseal keys + root token recovery procedure
|
||||
backup_admin: Bernd
|
||||
break_glass: ops-warden / railiance-platform runbooks
|
||||
backup: SOPS/age sealed vault (not fully evidenced for cold disaster)
|
||||
status: at_risk
|
||||
gaps:
|
||||
- "Cold disaster recovery of unseal material not drill-tested"
|
||||
references:
|
||||
- railiance-platform/docs/openbao-*.md
|
||||
|
||||
- id: asset-age-backup-keys
|
||||
name: age encryption keys (backup artifacts)
|
||||
tier: T0
|
||||
owner: Bernd
|
||||
recovery_path:
|
||||
method: Password manager recovery copy
|
||||
operational: ~/.config/age/railiance-backup.key, ~/.config/sops/age/keys.txt
|
||||
backup: password manager (mandatory)
|
||||
status: operational
|
||||
gaps:
|
||||
- "Password manager copy not verified in register drill"
|
||||
|
||||
- id: asset-backup-offsite-lane
|
||||
name: Nextcloud backup file drop
|
||||
tier: T0
|
||||
owner: Bernd
|
||||
recovery_path:
|
||||
method: Nextcloud admin read access for restore; upload via filesdrop token
|
||||
credentials: OpenBao platform/workloads/railiance/backup/offsite-lane
|
||||
backup: N/A (this is the backup destination)
|
||||
status: operational
|
||||
references:
|
||||
- BackupPolicy.md §4
|
||||
- railiance-cluster/docs/backup-restore.md
|
||||
|
||||
- id: asset-ssh-warden
|
||||
name: SSH certificate access (ops-warden)
|
||||
tier: T0
|
||||
owner: Bernd
|
||||
recovery_path:
|
||||
method: warden sign / cert_command
|
||||
break_glass: ops-warden wiki
|
||||
status: operational
|
||||
references:
|
||||
- AGENTS.md credential routing
|
||||
|
||||
# ── T1 Irreplaceable source of truth ─────────────────────────────────────────
|
||||
|
||||
- id: asset-gitea-canonical
|
||||
name: Gitea instance (canonical forge until cutover)
|
||||
tier: T1
|
||||
owner: Bernd
|
||||
host: coulombcore
|
||||
url: https://gitea.coulomb.social
|
||||
backup_stream: backup-gitea-canonical
|
||||
recovery_path:
|
||||
method: gitea dump restore; git mirror
|
||||
status: at_risk
|
||||
|
||||
- id: asset-forgejo-production
|
||||
name: Forgejo instance (production forge)
|
||||
tier: T1
|
||||
owner: Bernd
|
||||
host: railiance01
|
||||
url: https://forgejo.coulomb.social
|
||||
backup_stream: backup-forgejo-production
|
||||
recovery_path:
|
||||
method: forgejo-restore-drill.sh
|
||||
status: not_wired
|
||||
|
||||
- id: asset-git-repos
|
||||
name: Git repositories (all coulomb/* repos)
|
||||
tier: T1
|
||||
owner: Bernd
|
||||
source_of_truth: Gitea (migrating to Forgejo)
|
||||
backup: git push to remote; forgejo/gitea dump for full fidelity
|
||||
recovery_path:
|
||||
method: git clone from mirror or dump restore
|
||||
status: operational
|
||||
gaps:
|
||||
- "disaster-control not mirrored off primary Gitea (DISCTL-WP-0002-T01)"
|
||||
|
||||
- id: asset-state-hub
|
||||
name: Custodian State Hub
|
||||
tier: T1
|
||||
owner: Bernd
|
||||
host: bnt-lap001 (dev workstation)
|
||||
backup_stream: backup-dev-workstation
|
||||
recovery_path:
|
||||
method: PostgreSQL restore from age-decrypted dump
|
||||
status: operational
|
||||
|
||||
- id: asset-disaster-control
|
||||
name: disaster-control repo (this control plane)
|
||||
tier: T1
|
||||
owner: Bernd
|
||||
host: gitea.coulomb.social
|
||||
backup: git push only
|
||||
recovery_path:
|
||||
method: git clone from mirror (not yet configured)
|
||||
status: at_risk
|
||||
gaps:
|
||||
- "No off-Gitea mirror (DISCTL-WP-0002-T01)"
|
||||
|
||||
# ── T2 Runtime platforms ─────────────────────────────────────────────────────
|
||||
|
||||
- id: asset-coulombcore
|
||||
name: CoulombCore server
|
||||
tier: T2
|
||||
owner: Bernd
|
||||
host: coulombcore
|
||||
ip: "92.205.130.254"
|
||||
recovery_path:
|
||||
method: Rebuild from Ansible + restore data; do not resurrect compromised host
|
||||
backup_stream: backup-gitea-canonical
|
||||
status: operational
|
||||
|
||||
- id: asset-railiance01
|
||||
name: railiance01 k3s cluster
|
||||
tier: T2
|
||||
owner: Bernd
|
||||
host: railiance01
|
||||
ip: "92.205.62.239"
|
||||
recovery_path:
|
||||
method: Ansible baseline + Helm redeploy + data restore from backups
|
||||
backup_streams:
|
||||
- backup-s1-os-config
|
||||
- backup-s2-k8s-runtime
|
||||
status: operational
|
||||
gaps:
|
||||
- "S1/S2 backups on-node only"
|
||||
|
||||
# ── T4 External dependencies ─────────────────────────────────────────────────
|
||||
|
||||
- id: asset-bubble-io
|
||||
name: Bubble.io legacy application
|
||||
tier: T4
|
||||
owner: Bernd
|
||||
recovery_path:
|
||||
method: Bubble database export + documented restore workflow
|
||||
limits: Platform-controlled; export cadence not established
|
||||
backup: none automated
|
||||
rpo: 24h
|
||||
rto: 24h
|
||||
status: at_risk
|
||||
gaps:
|
||||
- "No scheduled export evidenced"
|
||||
- "Member data on platform we do not control"
|
||||
|
||||
- id: asset-openrouter
|
||||
name: OpenRouter API (LLM inference)
|
||||
tier: T4
|
||||
owner: Bernd
|
||||
recovery_path:
|
||||
method: Alternate LLM provider; API key rotation via OpenBao
|
||||
limits: No data RPO unless storing prompts/results
|
||||
backup: API keys in OpenBao
|
||||
rpo: N/A
|
||||
rto: 1-4h
|
||||
status: operational
|
||||
gaps:
|
||||
- "Alternate provider path not documented in runbook"
|
||||
|
||||
related_streams:
|
||||
# Operational on cluster but outside T01 minimum table — tracked for completeness.
|
||||
- id: backup-adjacent-sso
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue