Files
awoooi/docs/security/CREDENTIAL-ESCROW-EVIDENCE-OWNER-REQUEST.md

7.2 KiB
Raw Blame History

Credential Escrow Evidence Owner Request

狀態時間2026-06-13 13:10 Asia/Taipei 範圍DR credential escrow evidence marker 補齊 原則:只收非敏感 evidence-id禁止收集、張貼、提交或保存任何密碼、token、金鑰、recovery code、secret value、hash、prefix/suffix 或 partial token。


1. 目前判定

項目 狀態 完成度 說明
備份核心 GREEN 100% 2026-06-26 07:18 readback110 13/13 fresh failed=0、188 2/2 fresh failed=0、offsite / rclone fresh、latest-only verifier 與 full cold-start 目前皆為綠燈。
Escrow script / offsite readiness READY 100% SCRIPT_MISSING_COUNT=0OFFSITE_CONFIGURED=1RCLONE_CONFIGURED=1READINESS_REQUIRE_CONFIGURED_BLOCKED=0
Credential escrow owner request package READY_TO_DISPATCH 80% 本文件定義 owner 需要提供的非敏感 evidence-id、禁止內容、dry-run 與驗收流程。
Credential escrow marker BLOCKED_WAITING_OWNER_EVIDENCE 0% 五個 marker 仍未寫入;不得用 placeholder 或 secret 補齊。
DR scorecard closeout BLOCKED 90% 服務可用性已綠DR 完成仍等 ESCROW_MISSING_COUNT=0

這不是服務 outage。這是 DR 復原治理 gate必須證明關鍵復原憑證可由指定 owner 在災難時取回,但證明本身不能洩漏憑證。


2. Live Evidence

2026-06-26 07:18 在 110 只讀檢查:

每日備份心跳核心正常但 DR 未完成
110備份=13/13 fresh failed=0
188備份=2/2 fresh failed=0
integrity_stale=0
offsite_configured=1
offsite_fresh=1
rclone_gdrive_configured=1
rclone_gdrive_fresh=1
escrow_missing=5
last_backup_all=2026-06-26 02:31:02
core_blockers=0
dr_warnings=5

2026-06-13 13:10 在 110 只讀檢查仍保留為原始缺口基準:

missing: restic_repository_password
missing: offsite_provider_credentials
missing: break_glass_admin_credentials
missing: dns_registrar_recovery
missing: oauth_ai_provider_recovery

SCRIPT_MISSING_COUNT=0
OFFSITE_CONFIGURED=1
RCLONE_CONFIGURED=1
B2_CONFIGURED=0
READINESS_REQUIRE_CONFIGURED_BLOCKED=0
ESCROW_MISSING_COUNT=5
PARTIAL_MARKER_PRESENT=1
FULL_MARKER_PRESENT=1
SUMMARY PASS=8 WARN=5 BLOCKED=0

B2_CONFIGURED=0 是 legacy B2 未配置;目前 Google Drive / rclone provider 已配置,所以不是本輪 blocker。


3. Owner Request Matrix

Item Owner 要確認的復原能力 可接受的非敏感 evidence-id 禁止內容
restic_repository_password 能在災難時取回 restic repository password。 Password manager item ID、sealed envelope ID、recovery checklist ID。 Restic password、recovery code、secret URL、截圖中的密碼。
offsite_provider_credentials 能在災難時取回 Google Drive / rclone 或 offsite provider 憑證。 Vault item ID、provider credential record ID、offsite access checklist ID。 OAuth token、refresh token、application key、client secret、cookie。
break_glass_admin_credentials 能在災難時取得 break-glass admin 登入或替代復原路徑。 Break-glass credential record ID、sealed envelope ID、emergency access checklist ID。 Admin password、SSH private key、OTP seed、recovery code。
dns_registrar_recovery 能在災難時恢復 DNS registrar / domain control。 Registrar recovery checklist ID、vault item ID、domain recovery record ID。 Registrar password、recovery code、unredacted registrar session。
oauth_ai_provider_recovery 能在災難時恢復 AI provider / OAuth provider 管理權。 Provider recovery checklist ID、vault item ID、provider account recovery record ID。 API key、token、client secret、OAuth refresh token。

Evidence-id 必須是「外部系統中可查核的記錄代號」,例如 password manager item ID、sealed envelope 編號、內部 recovery checklist 編號。它不能是憑證本身,也不能足以推導出憑證。


4. 禁止提交的資料

以下內容不得出現在 repo、聊天、issue、PR、LOGBOOK、snapshot、terminal output 貼文或 marker note

  • 密碼、token、API key、private key、SSH key、cookie、session。
  • OAuth client secret、refresh token、authorization header。
  • OTP seed、recovery code、backup code。
  • PostgreSQL / Redis / Sentry / provider connection URL 中含帳密的字串。
  • secret hash、prefix、suffix、partial token、可逆遮罩值。
  • 未遮罩截圖、未遮罩 password manager 畫面。
  • placeholder例如 EVIDENCE_ID_FOR_*VAULT-ITEM-IDTODOTBD

5. Safe Execution Flow

以下命令只能在 owner 已於 repo / chat 外部確認復原資料存在後執行。<NON_SECRET_EVIDENCE_ID> 必須換成真實但非敏感的外部記錄代號。

# 1. 讀取目前 marker 狀態;此步不暴露 secret。
/backup/scripts/mark-credential-escrow-verified.sh --status

# 2. 先 dry-run 驗證 evidence-id 格式與 item 合法性;此步不寫入 marker。
/backup/scripts/mark-credential-escrow-verified.sh \
  --item <item> \
  --evidence-id <NON_SECRET_EVIDENCE_ID> \
  --dry-run

# 3. dry-run OK 且 owner 明確批准後,才寫入 marker。
/backup/scripts/mark-credential-escrow-verified.sh \
  --item <item> \
  --evidence-id <NON_SECRET_EVIDENCE_ID> \
  --note <SHORT_NON_SECRET_NOTE>

# 4. 寫入後重新產生 escrow / backup / cold-start 證據。
/backup/scripts/offsite-escrow-evidence-report.sh --no-color
/backup/scripts/backup-status.sh --no-notify --no-refresh
/home/wooo/scripts/full-stack-cold-start-check.sh --monitor-read-only --no-color --watch --interval 1 --max-attempts 1

若 dry-run 拒絕 placeholder、過短值、疑似 secret 或不合法 item必須停止回到 owner 重新提供非敏感 evidence-id。


6. 驗收條件

Gate 必須看到
Escrow marker 五個 item 都不再顯示 missing。
Escrow report ESCROW_MISSING_COUNT=0
Prometheus textfile awoooi_backup_dr_credential_escrow_missing_count 0
Backup status escrow_missing=0,且 core_blockers=0 維持不變。
Alertmanager BackupCredentialEscrowEvidenceMissing 不再 firing。
Cold-start WARN=0 BLOCKED=0 維持 green。

只有以上全部成立,才可以把 DR scorecard 從 BLOCKED 改為 COMPLETE


7. 工作推進百分比

Lane 目前完成度 下一步
Owner request package 80% 指定 owner role / team交付本文件與五個 item 清單。
Owner external verification 0% Owner 在 password manager、sealed envelope、registrar/provider account 外部完成查核。
Dry-run validation 0% 五個 item 都以非敏感 evidence-id 通過 --dry-run
Marker write 0% 五個 marker 寫入成功。
DR closeout verification 0% escrow report、backup status、Alertmanager、cold-start 全部重跑且綠燈。

8. 目前不可宣稱

  • 不可宣稱 DR scorecard complete。
  • 不可宣稱 credential escrow 已補齊。
  • 不可把備份 / offsite / cold-start green 等同 credential escrow green。
  • 不可用 placeholder、測試 ID 或秘密值補 marker。
  • 不可消音 BackupCredentialEscrowEvidenceMissing,它目前是正確紅燈。