Files
awoooi/docs/security/TELEGRAM-NOTIFICATION-EGRESS-INVENTORY.md
Your Name b191f8e9fe
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Failing after 2m6s
CD Pipeline / build-and-deploy (push) Has been skipped
CD Pipeline / post-deploy-checks (push) Has been skipped
fix(telegram): close ops direct sender gaps
2026-07-02 19:32:36 +08:00

110 lines
6.3 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.
# Telegram 通知出口治理清冊
| 項目 | 內容 |
|------|------|
| 日期 | 2026-06-18 |
| 狀態 | `inventory_ready_no_runtime_action` |
| 工具 | `scripts/security/telegram-notification-egress-inventory.py` |
| Snapshot | `docs/security/telegram-notification-egress-inventory.snapshot.json` |
| 模式 | repo-only scan不讀 secret、不送 Telegram、不改 workflow / script |
| runtime gate | `0` |
## 1. 目的
TelegramGateway 已經把 `send_alert_notification()``send_text()``_send_request("sendMessage", ...)` 收斂到最後出口 formatter能把主機資源壓力、Wazuh、Kali、Nginx drift、Backup / Restore / Escrow、Provider freshness 與 supply-chain drift 轉成 `ai_automation_alert_card_v1`
目前 repo source 已讀回 `0` 個 direct Telegram Bot API `sendMessage` call site。這份清冊保留為防回歸 evidence若 workflow、ops script 或 API path 再直接呼叫 Bot API會被視為可能繞過 TelegramGateway formatter、dedup、outbound mirror、KM / PlayBook / Verifier 沉澱與 no-false-green gate 的治理 surface。
此清冊只建立 metadata-only evidence不代表允許 live Telegram send、workflow 修改、script 修改、secret 讀取或 production write。
## 2. 固定數字
| 指標 | 數值 | 解讀 |
|------|------|------|
| `scanned_file_count` | `637` | 掃描 `.gitea/workflows``scripts/ops``scripts/ci``apps/api/src` |
| `direct_bot_api_file_count` | `0` | 目前沒有檔案直接呼叫 Bot API |
| `direct_bot_api_call_count` | `0` | 直接 `sendMessage` call site 總數 |
| `workflow_direct_bot_api_call_count` | `0` | Gitea workflow 直送 Telegram |
| `ops_script_direct_bot_api_call_count` | `0` | ops script 直送 Telegram fallback |
| `api_direct_bot_api_call_count` | `0` | API direct path 直送 Telegram |
| `gateway_normalized_callsite_count` | `57` | 已進入 TelegramGateway / final-exit formatter 的 call site |
| `gateway_final_exit_formatter_present_count` | `1` | `normalize_telegram_send_message_payload()` 已存在 |
| `required_owner_field_count` | `18` | 收斂前需要 owner 補齊的欄位 |
| `reviewer_check_count` | `14` | reviewer 必檢規則 |
| `outcome_lane_count` | `9` | 收件結果分流 |
| `blocked_action_count` | `22` | 清冊階段明確禁止動作 |
所有 `owner_response_received / accepted`、formatter convergence accepted、delivery receipt accepted、Telegram send、Bot API call、workflow modification、script modification、secret collection、raw payload storage、production write、runtime gate 與 action button 都維持 `0 / false`
## 3. 目前 direct Bot API surface
| 類別 | Call count | 代表路徑 |
|------|------------|----------|
| Gitea workflow | `0` | 無 |
| Ops script | `0` | 無 |
| API direct path | `0` | 無 |
若未來任何路徑直接呼叫 Bot API `sendMessage`,就必須被視為通知出口治理 surface需有 owner、訊息形狀、redaction、formatter convergence、delivery receipt 與 no-false-green 驗收,並優先回到 AWOOI Alertmanager webhook 或 TelegramGateway final-exit formatter。
## 4. Owner 必填欄位
每個 direct Bot API surface 收斂前至少需要:
1. `egress_surface_id`
2. `owner_role_or_team`
3. `routing_purpose`
4. `current_sender`
5. `target_chat_route`
6. `message_shape_contract`
7. `redaction_contract`
8. `formatter_convergence_plan`
9. `delivery_receipt_ref`
10. `dedup_or_fingerprint_plan`
11. `fallback_or_degraded_mode`
12. `migration_or_exception_reason`
13. `maintenance_window`
14. `rollback_owner`
15. `postcheck_evidence_ref`
16. `no_secret_value_attestation`
17. `no_raw_payload_attestation`
18. `no_false_green_attestation`
所有 evidence 只能是脫敏 ref、commit、run id、job id、artifact pointer 或收件編號;不得貼 Bot token、chat secret、secret hash、partial token、原始訊息 payload、未脫敏 workflow log 或工作視窗內容。
## 5. Reviewer checks
Reviewer 必須確認:
- direct Bot API surface 已列入 snapshot不能只靠 `rg` 手工看過。
- owner role / target route / routing purpose 明確。
- 訊息形狀要收斂成 `ai_automation_alert_card_v1` 或有明確例外理由。
- redaction contract、formatter convergence path 與 delivery receipt metadata 存在。
- fallback mode 不會把 raw payload、完整路徑、內網 IP、secret、工作視窗內容或個人 namespace 送出去。
- workflow / script / API 修改需另走 owner approval 與維護窗口。
- 清冊本身沒有送 Telegram、沒有 dispatch workflow、沒有讀 secret。
- 不把 route `200`、CD success、UI 可見或 Telegram 送達當成 AI 自動化閉環完成。
## 6. Outcome lanes
| Lane | 說明 |
|------|------|
| `waiting_owner_response` | 尚未收到 owner 回覆;所有 accepted / runtime count 維持 0 |
| `request_owner_route_supplement` | 缺 owner、target route 或 routing purpose |
| `request_formatter_convergence_plan` | 缺 formatter convergence 或例外理由 |
| `request_redaction_contract` | 缺 redaction / no-raw-payload attestation |
| `request_delivery_receipt_metadata` | 缺 delivery receipt metadata 或 dedup / fingerprint plan |
| `quarantine_secret_or_raw_payload` | 收到 secret value、raw payload、raw log 或未脫敏截圖時隔離 |
| `reject_false_green_claim` | 把 route 200、CD success、UI 可見或 Telegram 送達當驗收時拒收 |
| `ready_for_notification_egress_review` | metadata 合格後進 reviewer review |
| `waiting_runtime_gate` | 即使 reviewer acceptedruntime send / workflow modification 仍需獨立批准 |
## 7. 禁止動作
此清冊階段明確禁止 Telegram 實發、Bot API call、workflow 修改、未批准 script 修改、secret value / hash / partial token / chat id 收集、保存 raw message payload、保存未脫敏 workflow log、改 chat route、改 Bot token、rotate secret、workflow dispatch、production deploy、把 route 200 / CD success / UI 可見當通知驗收、跳過 formatter convergence、跳過 redaction review、開 runtime gate 或新增 action button。
## 8. 下一步
1. 維持 no-new-bypass guard確保 direct egress baseline 保持 `0`
2. 把 TelegramGateway / AwoooP outbound receipt 接到 KM / PlayBook learning writeback readback。
3. 若未來新增 direct endpoint必須先進 owner request、migration plan、acceptance ledger 與 post-check不得用本清冊直接改 workflow 或送 Telegram。