Files
awoooi/docs/security/BACKUP-RESTORE-ESCROW-INVENTORY.md

9.9 KiB
Raw Blame History

IwoooS Backup / Restore / Escrow / Retention 只讀清冊

項目 內容
日期 2026-06-11
狀態 repo_only_inventory_ready
工具 scripts/security/backup-restore-escrow-inventory.py
Snapshot docs/security/backup-restore-escrow-inventory.snapshot.json
Schema docs/schemas/backup_restore_escrow_inventory_v1.schema.json
本階段模式 committed repo files only不執行 backup / restore / offsite sync
runtime gate 0

1. 核心結論

Backup / restore / escrow / retention 已從抽象待辦推進成可重跑的 repo-only 高價值配置清冊。本清冊納入 38 個 surface其中 27 個屬於 write-capable 或 apply-capable 類型,必須先有 owner response、維護窗口、rollback owner 與驗證指標,才可進入任何 runtime 行動。

此清冊仍不是 live backup truth。它只證明 repo 裡有哪些備份、還原、離機同步、credential escrow、Velero、alert 與 DR 文件需要被控管不代表備份已成功、restore drill 已執行、offsite sync 已授權、escrow marker 可寫入或 retention policy 可變更。

2026-06-14 已新增 docs/security/BACKUP-RESTORE-OWNER-REQUEST-DRAFT.mddocs/security/backup-restore-owner-request-draft.snapshot.json,將 38 個 backup / restore / escrow surface 轉成 owner request draft。固定 request_draft_count=38write_capable_request_draft_count=27live_evidence_required_request_count=38required_owner_field_count=14blocked_action_count=18request_sent_count=0owner_response_received_count=0runtime_gate_count=0

此 artifact 只表示 owner request 的 required shape不代表 request sent、recipient confirmed、owner response received / accepted、live backup evidence、backup run、restore run、offsite sync、remote delete、credential escrow marker write、retention change、restic prune、rclone config、Velero restore / backup、kubectl action、SSH、secret collection、host write、production write 或 runtime gate。

2. 覆蓋摘要

指標 目前值 邊界
surface count 38 只代表 repo source 可見
source exists 38 每個 source 皆有 SHA256不代表 live 已套用
backup script surface 15 含總控、服務備份與 config capture
offsite / escrow surface 8 含 rclone sync、verifier、readiness、marker、config helpers
Velero surface 5 含 CronJob、ConfigMap script、standalone script、credential manifest、install manifest
restore drill surface 4 仍需人工批准,不可直接演練
retention surface 3 restic forget --prune 與 latest-only delete 仍未授權
credential surface 5 只允許 metadata / evidence id不收 secret value
alert surface 1 不代表 Prometheus / Alertmanager reload
write-capable surface 27 可見代表需管控,不代表可執行
owner response received / accepted 0 / 0 不得假性提高
restore / offsite / escrow / retention accepted 0 / 0 / 0 / 0 全部仍待 owner gate
runtime gate 0 不提供操作按鈕

Backup / restore / credential 類別成熟度從 52% 推進到 58%。這只代表 repo-only 清冊、schema、snapshot 與前台邊界完成,不代表 live evidence、restore drill 或 offsite sync 已被接受。

3. 已納管的 surface 類型

類型 代表 source 目前狀態
備份總控 scripts/backup/backup-all.sh 可執行總控可見,但本階段不執行
服務備份 backup-gitea.shbackup-awoooi.shbackup-harbor.shbackup-langfuse.shbackup-monitoring.shbackup-signoz.shbackup-open-webui.shbackup-clawbot.shbackup-sentry.shbackup-ai-artifacts.shbackup-public-routes.sh 需逐服務 owner、freshness、restore target isolation 與 secret redaction proof
Restic / retention scripts/backup/common.shscripts/backup/enforce-latest-only-retention.sh GFS 與 latest-only policy 可見;restic prune 與 delete 仍未授權
Offsite / escrow sync-offsite-backups.shverify-offsite-full-sync.shbackup-offsite-readiness-gate.shoffsite-escrow-evidence-report.shmark-credential-escrow-verified.sh remote sync、remote delete、marker write 全部仍需人工批准
Credential config configure-offsite-rclone.shconfigure-offsite-b2.shk8s/velero/01-credentials.yaml 只控管 secret metadata不得收 value、hash、partial token 或 recovery code
Velero restore drill k8s/awoooi-prod/16-cronjob-backup-restore-test.yaml17-configmap-backup-restore-scripts.yamlscripts/cron_backup_restore_test.sh manifest 與 script 可見;不代表 CronJob live、restore dry-run 或 metric 正常
Alert / health ops/monitoring/alerts.ymlscripts/ops/backup-health-textfile-exporter.py 只納入 rule / metric source不 reload Alertmanager不寫 live textfile
DR / cold-start 文件 BACKUP-STATUS.mdFULL-STACK-COLD-START-SOP.md、backup DR evaluation snapshots 文件已納入控管;命令範例不得被視為授權

4. 目前不符合或待補強

優先 缺口 風險 下一步
P0 credential_escrow_markers 尚未 accepted 缺少可恢復 restic/offsite/break-glass/DNS/OAuth credential 的人工證據 建立 non-secret evidence id owner response不得直接寫 marker
P0 restore drill approval package 仍是模板 不能證明 DB、config、K8s、observability restore 可安全演練 補隔離環境、observer、source backup ref、stop condition 與 rollback owner
P0 offsite sync 具有 remote delete 能力 latest-only / rclone sync 可能刪除遠端舊 pack 補 offsite owner、runway、remote delete owner、full sync window 與 verifier evidence
P0 retention / restic prune 未形成 owner gate 誤刪 snapshot 或縮短可恢復窗口 補 retention owner、restore runway、prune window 與回滾條件
P0 Velero credential / install manifest 仍需 live disposition Cluster-admin、MinIO endpoint 與 credential injection 風險高 補 RBAC owner、secret manager source、rotation owner、least privilege review
P1 restore test ConfigMap 與 standalone script timestamp 寫法不一致 Prometheus textfile 可能無法正確讀取 13 位 timestamp 先列入 owner disposition修正需走 CronJob / ConfigMap owner gate
P1 backup status runbook 有舊 live refresh note 先前 live 狀態可能過期 需要 owner-provided live refresh不由本清冊主動 SSH
P1 backup health exporter 可寫 textfile false-green metric 會誤導告警 補 exporter owner、metric freshness SLO、失敗通知與 guard

5. 固定 0 / false 邊界

以下旗標必須維持 false

runtime_execution_authorized=false
host_write_authorized=false
backup_run_authorized=false
restore_run_authorized=false
restore_drill_authorized=false
offsite_sync_authorized=false
offsite_remote_delete_authorized=false
credential_escrow_marker_write_authorized=false
retention_change_authorized=false
restic_prune_authorized=false
rclone_config_authorized=false
velero_restore_authorized=false
velero_backup_authorized=false
kubectl_action_authorized=false
ssh_read_authorized=false
ssh_write_authorized=false
secret_value_collection_allowed=false
active_scan_authorized=false
action_buttons_allowed=false

6. 下一階段優先順序

  1. P0整理 backup / restore / escrow owner response packet欄位包含 owner role / team、decision、decision reason、affected scope、redacted evidence refs、followup owner、rollback owner、maintenance window、validation plan。
  2. P0建立 credential escrow review package只允許 non-secret evidence id不寫 marker。
  3. P0針對 offsite sync 補 remote delete owner、runway、full sync window 與 verifier evidence驗收前不得執行 sync
  4. P0針對 restore drill 補隔離環境、observer、source backup refs、stop condition 與 rollback owner驗收前不得跑 restore。
  5. P1針對 Velero CronJob / ConfigMap script timestamp 差異建立 owner disposition不直接 apply。
  6. P1由 owner 提供最新 backup status / offsite / escrow / Velero metric redacted evidence本階段不主動 SSH 取得。
  7. P1將 P1-3 指標同步到 /zh-TW/iwooos,並做 desktop / mobile overflow 與 no action button 驗證。

7. 驗證指令

python3 scripts/security/backup-restore-escrow-inventory.py \
  --root . \
  --output /tmp/backup-restore-escrow-inventory-check.json

固定 committed snapshot 時間:

python3 scripts/security/backup-restore-escrow-inventory.py \
  --root . \
  --generated-at 2026-06-11T22:20:00+08:00 \
  --output docs/security/backup-restore-escrow-inventory.snapshot.json

8. 完成度

工作 完成度 說明
repo-only surface 註冊 100% 38 個 source surface 已納入
source existence / SHA256 100% 38 / 38 source 存在
schema / snapshot 100% backup_restore_escrow_inventory_v1 已建立
高價值配置成熟度 58% 52% 推進;只代表只讀框架
owner response 收件 / 接受 0% 尚未送件、收件或接受
live evidence collection 0% 未 SSH、未 rclone、未 kubectl、未 restore
restore / offsite / escrow / retention gate 0% 全部仍為 0 / false
owner request draft 100% 已新增 38 份 request draft、snapshot、文件與 guardrequest sent / received / accepted 仍為 0

9. 邊界

本清冊未執行 backup-all.sh、未執行任何 service backup、未執行 restic check、未執行 restic forget --prune、未執行 rclone sync、未讀遠端 offsite、未寫 escrow marker、未修改 rclone / B2 設定、未 apply Velero manifest、未跑 restore dry-run、未寫 Prometheus textfile、未 reload alert rules、未 SSH、未收 secret value、未新增任何前端執行按鈕。