Skip to content

Security and Operations

Mofesto edited this page Aug 7, 2026 · 1 revision

安全與營運

本專案可連接真實券商帳戶,安全邊界必須同時涵蓋 secrets、MCP Host、網路、工具授權、交易回讀與資料保存。

Secrets

不得提交或公開:

  • .env
  • 登入密碼、API Key
  • PFX 與憑證密碼
  • 完整帳戶資料
  • 含敏感 payload 的 log、cache、截圖或測試 fixture

.env.example 只放 placeholders。正式環境使用 secret manager,讓 server process 在啟動時取得必要值。

最小權限與工具分層

建議 MCP Host 建立兩種 policy:

Lane 允許工具 預設
Read-only market、account、reports、analysis、委託查詢 可在已授權資料範圍使用
Trading write 13 個 WRITE tools 預設拒絕,逐次人工確認

單純允許 MCP server 不代表允許所有 tools。Prompt 也不能提升工具權限。

寫入控制

每次正式寫入前:

  1. 取得明確帳戶、商品、買賣別、數量、價格/價別與有效期間。
  2. 顯示即將執行的完整交易摘要。
  3. 檢查市場時段、庫存/餘額、單筆與單日限額。
  4. 送出一次並保存 correlation ID。
  5. 以券商委託與成交 API 回讀。

若 timeout 或連線中斷,狀態是 outcome_unknown;不得盲目 resend。

網路

  • stdio 是本機桌面 Host 的首選。
  • Streamable HTTP 預設只監聽 127.0.0.1
  • 跨機部署需在 server 外層加 TLS、authentication、authorization、rate limit、network ACL 與 audit logging。
  • stateless 不等於無須身分驗證,也不等於可公開暴露。

資料與 log

  • FUBON_DATA_DIR 應使用受限 ACL。
  • SQLite cache 是行情資料,不是完整交易稽核資料庫。
  • callback buffer 可能包含帳戶與委託資訊;debug output 不應直接公開。
  • 生產 log 應遮罩帳戶與 identifiers,並設定 retention。
  • GitHub Issue 只附最小化、去識別化的錯誤訊息。

依賴與供應鏈

  • 只安裝與平台相符、來源可信的 fubon_neo wheel。
  • 驗證 Python package build,不把 local artifacts 打入 wheel。
  • 定期執行 dependency/security checks,例如 Bandit 與適用的漏洞掃描。
  • MCP 與 SDK 升級時,以官方文件、installed runtime interfaces 與 contract tests 共同驗證。

營運監控

最低限度監控:

  • process 啟停與登入結果。
  • realtime 初始化與 event callback。
  • tool business status 分布與 latency。
  • upstream flow-control、timeout 與 error rate。
  • 寫入工具呼叫數、未知結果、最終 active/filled 狀態。
  • SQLite 路徑、磁碟容量與更新日期。

監控資料本身也可能含金融敏感資訊,需依最小揭露原則保存。

事件處理

發現憑證或 key 洩漏時:

  1. 停止相關 server process。
  2. 立即撤銷/輪換 key 與憑證。
  3. 檢查目前委託、成交與條件單。
  4. 清理 workspace、log、cache、CI artifacts 與 Git history 中的敏感內容。
  5. 確認外部平台已完成撤銷,而不只刪除本機文字。

安全問題請依儲存庫 SECURITY.md 的管道回報,不要建立公開 Issue 揭露秘密。

Clone this wiki locally