Files
awoooi/docs/security/SECURITY-MIRROR-STATUS-ROLLUP.md

129 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 資安鏡像狀態彙整契約
| 項目 | 內容 |
|------|------|
| 日期 | 2026-05-17 |
| 狀態 | 草案 |
| Schema | `docs/schemas/security_mirror_status_rollup_v1.schema.json` |
| Snapshot | `docs/security/security-mirror-status-rollup.snapshot.json` |
| 模式 | `mirror_only` |
| runtime 執行授權 | `false` |
## 0. 核心結論
`security_mirror_status_rollup_v1` 是 AwoooP 與 Security Supply Chain Session 的共同狀態入口。
它只彙整目前框架、鏡像契約、approval queue 與下一個安全 gate不授權任何 scan、execute、repo、refs、deploy 或 secret 類動作。
## 1. 目前狀態
| 類型 | 狀態 |
|------|------|
| 整體進度估算 | 約 58%;框架 / 治理 / 文件 / schema / read-only evidence 約 80-85%runtime ingestion / owner response / GitHub primary / AwoooP production landing 約 35-40% |
| Contract manifest | 35 個 contracts |
| Mirror readiness | 32 ready、2 partial、1 contract-only、0 blocked |
| Approval queue | 8 items7 pending approval、1 block candidate |
| Approval gate | S3.0 已建立0 approved、7 pending、1 block candidate |
| Decision records | S3.1 已建立;目前 0 筆決策紀錄 |
| Review packets | S3.2 已建立8 packets、7 ready for human review、1 block candidate |
| State transitions | S3.3 已建立5 個 decision options 都有 next state且都不授權執行 |
| Follow-up runtime gate templates | S3.4 已建立8 個 templates、0 個 active runtime gates |
| GitHub primary readiness gate | S4.0 已建立8 個 candidate repos、7 個 in-scope blocked、0 個 primary readyS4.10 已補 GitHub target owner decision response request packet、7 個 template statuses、3 個 audit event templates、5 個 redaction examples、6 個 collection checks、6 個 intake preflight checks 與收件包7 個 response templates、owner response 0 筆S4.11 已補 refs truth owner response request packet、5 個 template statuses、3 個 audit event templates、5 個 redaction examples、6 個 collection checks、6 個 intake preflight checks 與收件包5 個 response templates、owner response 0 筆、audit events emitted 0 筆S4.12 已補 workflow / secret 名稱 owner response request packet、5 個 template statuses、3 個 audit event templates、5 個 redaction examples、6 個 collection checks、6 個 intake preflight checks 與收件包5 個 response templates、owner response 0 筆、audit events emitted 0 筆S4.13 已補四包 owner response validation rollup、6 條 evidence routing rules、8 個 display sections 與 7 條 state transition rules22 個 templates、received / accepted / rejected 皆為 0 |
| GitHub primary rollback ADR | S4.4 已建立7 個 in-scope rollback drafts、0 個 owner approved、0 個 dry-run completed、0 個 active cutover |
| Gitea inventory | S4.5 已補認證清冊匯出請求S4.6 已補匯入驗收契約S4.7 已補 owner coverage attestationS4.8 已把既有 Gitea queue/gate/review packet/follow-up gate 對齊 attestation 先行S4.9 已補 owner response request packet、5 個 template statuses、3 個 audit event templates、5 個 redaction examples、8 個 display sections、6 個 collection checks、owner response 收件包、6 個 intake preflight checks 與 5 個 outcome lanes目前 status=`partial_waiting_authenticated_inventory`、未認證公開範圍 repos 2 個、本機可見 Gitea unique repos 4 個、匯出來源選項 2 類、匯入驗收 payload 0 筆、owner attestation items 5 個、收到 attestation 0 筆、owner response 0 筆、audit events emitted 0 筆、敏感 payload 必須隔離、允許收集 token value=false |
| Workflow / secret name inventory | S4.1 已建立S4.2 補 4 個 repos、31 個 workflow files、43 個 referenced secret names 的 local evidenceS4.3 補 7 個 repos、5 類 lanes 的 redacted export requestS4.12 補 1 個 owner response request packet、5 個 template statuses、3 個 audit event templates、5 個 redaction examples、6 個 collection checks、6 個 intake preflight checks 與 5 個 owner response templates0 個 inventory complete、audit events emitted 0 筆、禁止收集 secret value、禁止 write token |
| Owner response validation | S4.13 已建立;四包 owner response 目前 received/accepted 皆為 04 條 missing response lanes、4 步 collection order、next collection candidate、6 條 evidence routing rules、8 個 display sections 與 7 條 state transition rules 可供 AwoooP 直接顯示;下一個建議收件為 S4.9 Gitea owner attestationlatest local validation 為 `SOURCE_CONTROL_OWNER_RESPONSE_GUARD_OK`,不代表 owner response 已收到或任何執行授權 |
| Dry-run | `contract_defined_not_executed`;已納入 `CHECK_PROGRESS_GUARD``CHECK_OWNER_RESPONSE_GUARD`latest local validation 為 `repo_snapshot_guard_pass`,仍不代表 production ingestion |
| Runtime actions | `false` |
| Payload ingestion | `false` |
## 1.1 進度判讀
目前進度不是以「強制防護開了多少」計算,而是以統帥指定的低摩擦路線拆成兩層:
1. 框架期約 80-85%35 個主要 contract 已有 32 個 ready、2 個 partial、1 個 contract-only、0 blocked表示治理骨架、只讀 evidence、人工批准語義與 AwoooP mirror-only 接口已接近完整。
2. 落地期約 35-40%owner responses 仍為 0、active runtime gate 為 0、payload ingestion 為 false、GitHub primary ready 為 0、AwoooP production ingestion 尚未啟用。
因此跨 Session 採用 **58%** 作為目前整體進度。這代表「框架健康、尚未過度收緊」,不是 runtime enforcement 或 primary cutover 授權。
## 1.2 為什麼 58% 看起來沒動
58% 是 headline progress只在高層 gate 真正改變時調整。最近幾輪 S4.10、S4.11、S4.12 與 S4.13 的工作確實有前進,但屬於框架細節、顯示順序與收件安全,不會直接推高 headline。
| 最近完成 | 進度軸 | headline delta | 為什麼整體百分比不變 |
|----------|--------|----------------|----------------------|
| S4.10 request packet | framework detail | 0 | 只顯示 owner 要回覆什麼,不代表 request sent、response received 或 approval |
| S4.10 template status ledger | framework detail | 0 | 只逐項顯示 7 個 target 仍為 waitingreceived / accepted 仍為 0 |
| S4.10 audit event templates | framework detail | 0 | event templates 仍為 `template_only_not_emitted`production ingestion 尚未啟用 |
| S4.10 redaction examples | framework detail | 0 | 只示範安全 metadata shape不代表 owner response 已收到或可執行 repo / refs / primary 動作 |
| S4.10 collection checks | framework detail | 0 | 只維持 request / received / accepted 狀態分離,不代表 owner response 已收到或已接受 |
| S4.10 intake preflight checks | framework detail | 0 | 只分類可收、補證、隔離或拒收,不代表 owner response accepted 或可執行 repo / refs / primary 動作 |
| S4.11 request packet | framework detail | 0 | 只顯示 owner 要回覆哪 5 類 refs truth 問題,不代表 request sent、response received、accepted 或 refs sync/delete/force push 授權 |
| S4.11 template status ledger | framework detail | 0 | 只逐項顯示 5 類 refs truth response 仍為 waitingreceived / accepted 仍為 0不代表 refs sync/delete/force push 授權 |
| S4.11 audit event templates | framework detail | 0 | event templates 仍為 `template_only_not_emitted`emitted 仍為 0不代表 production ingestion 或 refs sync/delete/force push 授權 |
| S4.11 redaction examples | framework detail | 0 | 只示範安全 metadata shape不代表 owner response received / accepted 或 refs sync/delete/force push 授權 |
| S4.11 collection checks | framework detail | 0 | 只維持 request / received / accepted 狀態分離,不代表 owner response received / accepted 或 refs sync/delete/force push 授權 |
| S4.11 intake preflight checks | framework detail | 0 | 只分類可審、補證、隔離、拒收或等待,不代表 owner response accepted 或 refs sync/delete/force push 授權 |
| S4.12 request packet | framework detail | 0 | 只顯示 owner 要回覆哪 5 類 workflow / secret 名稱問題,不代表 request sent、response received、secret value collection、workflow 修改、runner 啟用或 primary 授權 |
| S4.12 template status ledger | framework detail | 0 | 只逐項顯示 5 類 workflow / secret 名稱 response 仍為 waitingreceived / accepted 仍為 0不代表 secret value collection、workflow 修改、runner 啟用或 primary 授權 |
| S4.12 audit event templates | framework detail | 0 | event templates 仍為 `template_only_not_emitted`emitted 仍為 0不代表 production ingestion、secret value collection、workflow 修改、runner 啟用或 primary 授權 |
| S4.12 redaction examples | framework detail | 0 | 只示範安全 metadata shape不代表 owner response received / accepted 或 secret value collection、workflow 修改、runner 啟用授權 |
| S4.12 collection checks | framework detail | 0 | 只維持 request / received / accepted 狀態分離,不代表 owner response received / accepted、secret value collection、workflow 修改、runner 啟用或 primary 授權 |
| S4.12 intake preflight checks | framework detail | 0 | 只分類可審、補證、隔離或拒收,不代表 owner response accepted、secret 建立、workflow 修改、runner 啟用或 primary 授權 |
| S4.13 evidence routing rules | framework detail | 0 | 只決定 owner evidence pointer 應補證、隔離、拒收、進跨包 review 或只讀更新,不代表 owner response received / accepted、approval、runtime gate 或 execution authorization |
| S4.13 display sections | framework detail | 0 | 只固定 AwoooP Operator Console 的 read-only 呈現順序,不代表 owner response received / accepted、approval、runtime gate、execution queue 或 action button |
| S4.13 state transition rules | framework detail | 0 | 只固定 owner response validation 的 read-only 狀態語義,不代表 owner response received / accepted、approval、runtime gate、execution queue 或 action button |
headline 進度要再往上,至少需要下列任一高層 gate 有實質 evidence
1. S4.9 Gitea owner attestation response 收到並接受脫敏 evidence。
2. S4.10 GitHub target owner / visibility / canonical response 收到並接受脫敏 evidence。
3. S4.11 refs truth owner response 收到並接受脫敏 evidence。
4. S4.12 workflow / secret name owner response 收到並接受脫敏 evidence。
5. redacted payload ingestion 或 active runtime gate 在人工批准後啟用。
6. GitHub primary readiness gate 的 `primary_ready_count` 大於 0。
因此現在不是停住,而是進入「避免灌水」的區段:框架小步有累積,但 headline 需要 owner response / runtime gate / primary readiness 這類真正落地訊號才會跳。
只讀驗證:
```text
python3 scripts/security/security-mirror-progress-guard.py
```
## 2. AwoooP 可做
1. 顯示 S0 到 S4 的階段狀態。
2. 顯示 contract readiness、approval queue summary、approval gate summary 與下一個 gate。
3. 將彙整結果寫入 Audit evidence。
4. 低噪音通知階段完成、blocked reason 或人工批准必要事件。
5. 把下一步限制在 `observe` / `approval_required` / `block_candidate`
## 3. AwoooP 不可做
1. 不把 rollup 當成 runtime authorization。
2. 不新增 scan、execute、repo、refs、deploy、secret 類 action button。
3. 不把 LOW / MEDIUM observation 變成 blocking gate。
4. 不把 approval queue 接成 runner。
5. 不把 GitHub primary、refs sync 或 Kali `/execute` 當成已批准。
## 4. 下一個安全 gate
下一步仍不是 runtime enforcement。
建議先讓 AwoooP 主線只讀消費本 rollup、`security_approval_gate_v1``security_approval_decision_record_v1``security_approval_review_packet_v1``security_approval_state_transition_v1``security_followup_runtime_gate_v1``source_control_primary_readiness_gate_v1``source_control_primary_rollback_adr_v1``source_control_workflow_secret_name_inventory_v1`,並由人工依序 review
1. redacted finding ingestion adapter。
2. safe web crawl scope。
3. Gitea private/internal read-only inventory先依 S4.9 收到並驗收 S4.7 owner coverage attestation response且 S4.8 已把這個先行條件接到既有 approval queue / gate / review packet / follow-up runtime gate再依 S4.5 認證匯出請求補全量清冊;收到脫敏 payload 後先依 S4.6 驗收 / 拒收 / 隔離;目前未認證公開範圍 2 個、本機可見 Gitea unique 4 個、覆蓋缺口 2 個、attestation items 5 個、owner response 0 筆,不保存 token value。
4. GitHub target / owner / visibility / canonical先依 S4.10 request packet、template status ledger、audit event templates、redaction examples、collection checks 與 intake preflight checks 收到並驗收 7 個 owner decision response templatesreceived / accepted response 目前皆為 0不得把 request packet、template status ledger、audit event templates、redaction examples、collection checks、intake preflight checks 或 response packet 當成 repo creation、visibility change、refs sync 或 primary approval。
5. Kali `/execute` 維持 block candidate。
6. Refs truth owner response先依 S4.11 request packet、template status ledger、audit event templates、redaction examples、collection checks 與 intake preflight checks 顯示 main/dev truth、deprecated drift、release tag、GitHub-only refs 的 5 個 response templatesreceived / accepted response 目前皆為 0audit events emitted 仍為 0不得把 request packet、template status ledger、audit event templates、redaction examples、collection checks、intake preflight checks 或 response packet 當成 refs sync、delete、force push 或 primary approval。
7. Workflow / secret 名稱 owner response先依 S4.12 request packet、template status ledger、audit event templates、redaction examples、collection checks 與 intake preflight checks 顯示 webhook、runner、deploy key、branch protection / CODEOWNERS、repository secret name parity 的 5 個 response templatesreceived / accepted response 目前皆為 0audit events emitted 仍為 0不得把 request packet、template status ledger、audit event templates、redaction examples、collection checks、intake preflight checks 或 response packet 當成 secret value 收集、workflow 修改、GitHub hosted runner 啟用或 primary approval。
8. Owner response validation rollup先依 S4.13 顯示 S4.9/S4.10/S4.11/S4.12 四包 response packets、22 個 templates、10 個 cross-packet checks、6 條 evidence routing rules、8 個 display sections、7 條 state transition rules 與 quarantine rules不得把 rollup、routing、display sections 或 state transition rules 當成 approval、runtime gate 或 execution authorization。
9. GitHub primary readiness blockers 與 rollback ADR 缺口。
10. S4.4 GitHub primary rollback ADR 草案:先顯示 7 個 repo 的 rollback owner、validation window 與 triggersowner approval 前不可執行。
11. workflow / webhook / runner / deploy key / branch protection / CODEOWNERS / secret 名稱 inventory 缺口,先看 S4.2 local evidence再依 S4.3 redacted export request 與 S4.12 owner response request packet / template status ledger / audit event templates / redaction examples / collection checks / intake preflight checks / 收件包補 webhook / runner / deploy key / branch protection / repository secret parity只保存名稱與 owner不保存 value不使用 write token。
任何批准後的執行仍需下一階段 runtime gate 與獨立 evidence不得由本 rollup 自動觸發。