8.2 KiB
CD / Runner / Secret injection 事故後回讀只讀計畫
| 項目 | 內容 |
|---|---|
| 日期 | 2026-06-16 |
| 狀態 | post_incident_readback_plan_ready_no_runtime_action |
| 工具 | scripts/security/cd-runner-secret-injection-post-incident-readback-plan.py |
| Snapshot | docs/security/cd-runner-secret-injection-post-incident-readback-plan.snapshot.json |
| Source evidence | docs/security/cd-runner-secret-injection-change-evidence-acceptance.snapshot.json |
| runtime gate | 0 |
1. 目的
此計畫補在 CD / runner / secret injection change evidence acceptance 之後,專門處理事故後回讀:workflow / runner / secret injection 相關異常或變更後,owner 必須回讀 actor、時間窗、workflow diff state、runner attestation、secret name parity、secret injection route、step-env secret guard、log redaction、deploy marker、Gitea run、webhook / notification receipt、before / after deploy state、rollback、post-check 與防再發。
它只處理 metadata-only evidence ref,不呼叫 Gitea / GitHub API、不讀 secret store、不讀 secret value、不修改 workflow、不啟用 runner、不 rotate secret、不 dispatch workflow、不觸發部署,也不把 CD success、deploy marker、workflow success、route 200、runner online、AwoooP approval 或 UI 可見狀態當成 runtime 授權。
2. 固定範圍
| 指標 | 數值 | 解讀 |
|---|---|---|
readback_candidate_count |
5 |
CD pipeline、Code Review、Deploy alerts、Runner attestation、Secret parity / injection owner 五類候選 |
c0_readback_candidate_count |
4 |
CD、Code Review、Runner、Secret parity 為 C0 |
c1_readback_candidate_count |
1 |
Deploy alerts / monitoring route 為 C1 |
write_capable_readback_candidate_count |
5 |
五類都可能影響 workflow、runner、secret injection、通知或部署路徑 |
secret_sensitive_readback_candidate_count |
5 |
五類都必須檢查 secret value / hash / partial token / runner token 不可出現 |
runner_or_workflow_readback_candidate_count |
5 |
五類都必須回讀 workflow / runner 邊界 |
deploy_or_run_readback_required_candidate_count |
5 |
五類都需要 deploy marker 或 Gitea run readback / 不適用理由 |
required_readback_field_count |
33 |
事故後回讀必填欄位 |
reviewer_check_count |
30 |
reviewer 必檢規則 |
outcome_lane_count |
11 |
收件結果分流 |
blocked_action_count |
52 |
明確禁止動作 |
3. 必填事故後回讀欄位
每筆事故後回讀至少需要:
incident_or_change_refactor_attribution_refchange_time_window_refchange_intent_or_break_glass_refworkflow_diff_state_refrunner_attestation_state_refrunner_executor_host_readback_refrunner_workspace_cleanup_readback_refrunner_permission_scope_refsecret_name_parity_state_refsecret_injection_route_state_refstep_env_secret_guard_result_reflog_redaction_readback_refdeploy_marker_readback_refgitea_action_run_readback_refwebhook_delivery_state_refdeploy_key_branch_protection_codeowners_refnotification_delivery_receipt_refbefore_after_deploy_state_refaffected_route_or_service_state_refcross_project_sync_refrollback_validation_refpostcheck_evidence_refpost_change_monitoring_refrecurrence_guard_refmaintenance_windowrollback_ownerfollowup_ownerredacted_evidence_refsno_secret_value_attestationno_raw_workflow_payload_attestationno_unredacted_log_attestationno_false_green_attestation
以上欄位都只能保存脫敏 ref、commit、artifact pointer、run id、job id、ticket 或 hash。不得貼 secret value、secret hash、masked token、partial token、runner token、webhook secret、private key、deploy key private material、cookie、authorization header、完整 credential URL、未脫敏 action log 或未脫敏截圖。
4. Reviewer checks
Reviewer 必須確認:
- 來源 change evidence acceptance snapshot 是目前版本。
- incident / change ref、actor、時間窗、intent / break-glass reason 都存在。
- workflow diff state 只以 ref 呈現,不保存 raw workflow payload。
- runner label、executor、host alias、workspace cleanup、permission scope 與 hosted runner 風險可追溯。
- secret name parity、secret injection route、step-env secret guard 與 log redaction readback 完整。
- deploy marker 與 Gitea run readback 只能作證據,不代表 runtime approval。
- webhook delivery、deploy key、branch protection、CODEOWNERS、notification receipt 與跨專案同步影響已標示。
- rollback validation、post-check、post-change monitoring 與 recurrence guard 已明確列出。
- 不把 CD success、deploy marker、workflow success、route
200、runner online、UI 可見或 AwoooP approval 當驗收。
5. Outcome lanes
| Lane | 說明 |
|---|---|
waiting_post_incident_readback |
尚未收到事故後回讀包 |
request_actor_or_time_supplement |
缺 actor、時間窗、intent 或 break-glass reason |
request_workflow_runner_supplement |
缺 workflow diff、runner attestation、executor / host、workspace cleanup 或 permission scope |
request_secret_injection_supplement |
缺 secret name parity、injection route、step-env guard 或 log redaction readback |
request_deploy_run_supplement |
缺 deploy marker、Gitea run readback、before / after deploy state 或 post-check |
request_webhook_notification_supplement |
缺 webhook delivery、notification receipt、SRE route owner 或 cross-project sync |
quarantine_sensitive_payload |
收到敏感值、runner token、webhook secret、private key、未脫敏 log 或截圖時隔離 |
reject_false_green_claim |
把 CD success、deploy marker、workflow success、route 200、runner online、UI 可見或 AwoooP approval 當驗收時拒收 |
ready_for_cd_runner_secret_post_incident_review |
metadata 合格後進 reviewer review |
recurrence_guard_backfill_required |
需補防再發 guard、owner review、change freeze、automation block 或 runner isolation plan |
waiting_runtime_gate |
即使 readback accepted,runtime gate 仍需獨立人工批准 |
6. 禁止動作
此計畫明確禁止修改 workflow、未批准 dispatch workflow、啟用 / 安裝 / 重啟 runner、修改 runner label、使用 runner admin token、啟用 GitHub hosted runner、收集 secret value / hash / partial token / runner token / webhook secret / deploy key private material、保存 raw workflow payload / 未脫敏 action log、建立 / 更新 / rotate / 刪除 repo secret、讀 secret store、修改 secret injection path、修改 webhook、修改 deploy key、修改 branch protection、修改 CODEOWNERS、sync refs、force push、切 GitHub primary、停用 Gitea、把 CD pipeline 當 action 執行、注入 K8s secret、ArgoCD sync、production deploy、新增 action button 或開 runtime gate。
7. 完成度與邊界
| 工作 | 完成度 | 邊界 |
|---|---|---|
| CD / Runner / Secret injection post-incident readback plan | 100% |
只讀計畫與 snapshot 已建立 |
| Secret metadata 只讀治理成熟度 | 68% -> 70% |
只代表事故後回讀欄位補齊,不代表可讀或可改 secret |
| Gitea workflow / runner source-control 只讀治理成熟度 | 72% -> 74% |
只代表 workflow / runner 事故後回讀欄位補齊,不代表 workflow / runner 可修改 |
| post-incident readback received / accepted | 0% |
尚未收到或接受任何事故後回讀 |
| runtime gate | 0 |
不開 workflow、runner、secret、deploy、ArgoCD 或 production action |
8. 下一步
- 要求 owner 只提供事故後 readback ref:workflow diff state、runner attestation、secret name parity、secret injection route、Gitea run readback、guard result、deploy marker、notification receipt、rollback owner 與 post-check evidence。
- reviewer 只檢查 metadata 完整性、no-secret-value、log redaction 與 no-false-green,不保存 raw workflow payload、raw action log 或 credential material。
- 若未來要進 runtime approval package,必須另開維護窗口、rollback owner、跨專案同步與 production post-check gate。