Guidant AI 資安檢視總報告 · 系統資料流(DFD)

系統層級資料流圖(DFD Level 0):誰連誰、走什麼、傳什麼

把整套產品當一個系統,畫出運作時所有會發生連線的地方——誰發起、連到誰、什麼協定與埠、傳的是什麼資料、怎麼驗身分。這是後續各模組細部 DFD 與威脅建模(STRIDE)的底圖;程式架構本身見架構手冊。依 2026-10-02 在 STG(188 安裝版 stack)實際查到的服務、埠、設定與連線畫,不是依文件推。

怎麼讀:方框是處理程序(我們跑的服務),虛框圓角是外部實體(我們不控制的人或系統),圓柱是資料儲存。每條線寫「協定/埠 · 傳什麼」。虛線是依設定才存在或待驗的連線。

事實來源:docker ps/docker inspect 的服務與環境變數、容器內 /proc/net/tcp 的即時連線、FE 容器的 nginx 設定、stack DB 的 system_configs/log_forwarding_settings/tenant_detection_tool_configs、agent 安裝包的 compose。查法與原始輸出見本頁末段。

§1

一、全系統資料流圖

一張圖塞 27 條線會糊成一團,拆成四張閱讀版:邊界圖(誰從外面進來)→ 內部圖(stack 裡的服務怎麼接)→ 對外整合圖兩張(依設定才存在的那些);最後一張是全貌版,只看形狀用。

圖 1 — 邊界:兩種「外面的東西」怎麼碰到系統

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#E2F0F1','primaryTextColor':'#14201F','primaryBorderColor':'#0E7C86','secondaryColor':'#EEF2F3','secondaryTextColor':'#14201F','tertiaryColor':'#FBFCFC','tertiaryTextColor':'#14201F','lineColor':'#4A5A5C','textColor':'#14201F','mainBkg':'#E2F0F1','nodeBorder':'#0E7C86','nodeTextColor':'#14201F','edgeLabelBackground':'#FBFCFC','titleColor':'#14201F','clusterBkg':'#FBFCFC','clusterBorder':'#E4EAEB'}}}%%
flowchart LR
    U(["👤 使用者<br/>瀏覽器"])
    subgraph AGENTBOX["🏢 客戶機房(每台一套)"]
        direction TB
        AG["evidence-agent"]
        ASW[("agent-seaweedfs<br/>證據暫存 S3 :8333")]
        ENG["檢測引擎<br/>(本機程序)"]
        AG -- "S3 :8333" --> ASW
        AG -- "本機" --> ENG
    end
    CUSTHOST(["🖥 客戶受檢主機"])
    subgraph MAIN["🏠 主系統 stack"]
        direction TB
        FE["guidant-fe<br/>nginx 前門 :443"]
        API["guidant-api :8000"]
        SIO["guidant-socketio :8002"]
        FE -- "/api/1.0" --> API
        FE -- "/socket.io" --> SIO
    end

    U -- "HTTPS :443 · 頁面+API · JWT" --> FE
    AG -- "HTTPS :443 · 報到/心跳/領工作/回報<br/>mTLS+簽章通行證,每請求查撤銷" --> FE
    API -- "HTTPS :8443 · 資料面 mTLS+JWT<br/>探測工具、取消、取證據檔" --> AG
    AG -- "SSH :22/WinRM · 客戶維運帳密" --> CUSTHOST
    ENG -- "網路掃描" --> CUSTHOST

    classDef ext fill:#FBFCFC,stroke:#9AA8AA,stroke-dasharray:3 2
    class U,CUSTHOST ext
圖 1 — 進入系統的兩個入口(瀏覽器、代理程式)與各自的驗身分方式;主系統反向連代理程式的資料面 :8443 也在這裡。

圖 2 — 主系統內部:stack 裡的服務怎麼接

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#E2F0F1','primaryTextColor':'#14201F','primaryBorderColor':'#0E7C86','secondaryColor':'#EEF2F3','secondaryTextColor':'#14201F','tertiaryColor':'#FBFCFC','tertiaryTextColor':'#14201F','lineColor':'#4A5A5C','textColor':'#14201F','mainBkg':'#E2F0F1','nodeBorder':'#0E7C86','nodeTextColor':'#14201F','edgeLabelBackground':'#FBFCFC','titleColor':'#14201F','clusterBkg':'#FBFCFC','clusterBorder':'#E4EAEB'}}}%%
flowchart LR
    FE["guidant-fe<br/>:80→301 :443"]
    API["guidant-api<br/>REST :8000"]
    SIO["guidant-socketio<br/>:8002"]
    WK["guidant-worker<br/>背景工作"]
    subgraph ISO["隔離網路 guidant_guidant-sandbox"]
        SB["guidant-sandbox<br/>檔案拆解+Prompt Guard :8080<br/>無 AI 金鑰、不出網"]
    end
    DB[("guidant-db<br/>PostgreSQL :5432<br/>RLS 隔租戶")]
    RD[("guidant-redis<br/>:6379")]
    SW[("檔案儲存(三選一)<br/>內建 SeaweedFS S3 :8333(出廠)<br/>或客戶 MinIO S3 / 本機磁碟")]

    FE -- "HTTP :8000" --> API
    FE -- "HTTP :8002" --> SIO
    API -- ":5432 · 業務資料" --> DB
    SIO -- ":5432" --> DB
    WK -- ":5432 · 撿 background_jobs" --> DB
    API -- ":6379 · session/快取" --> RD
    SIO -- ":6379 · 訊息佇列" --> RD
    WK -- ":6379" --> RD
    API -- "S3 :8333 或本機路徑 · 檔案" --> SW
    WK -- "S3 :8333" --> SW
    WK -- "HTTP :8080 · 送檔拆解、問注入分數" --> SB
    API -. "入列(寫 DB),不直連" .-> WK
圖 2 — 主系統 stack 內部(docker 網路 guidant_default,不對外開埠)。api/socketio/worker 三個行程實測都只持有 DB 與 Redis 連線;sandbox 在獨立網路、只有 worker 連得到。

圖 3 — 對外整合(上):身分、通知、稽核與維運

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#E2F0F1','primaryTextColor':'#14201F','primaryBorderColor':'#0E7C86','secondaryColor':'#EEF2F3','secondaryTextColor':'#14201F','tertiaryColor':'#FBFCFC','tertiaryTextColor':'#14201F','lineColor':'#4A5A5C','textColor':'#14201F','mainBkg':'#E2F0F1','nodeBorder':'#0E7C86','nodeTextColor':'#14201F','edgeLabelBackground':'#FBFCFC','titleColor':'#14201F','clusterBkg':'#FBFCFC','clusterBorder':'#E4EAEB'}}}%%
flowchart LR
    API["guidant-api"]
    LDAP(["🗂 LDAP/AD<br/>LDAPS :636<br/>(192.168.50.160)"])
    SMTP(["✉️ SMTP<br/>STARTTLS :587<br/>(smtp.gmail.com)"])
    CHAT(["💬 Discord/Telegram<br/>HTTPS webhook"])
    SIEM(["📡 客戶 SIEM<br/>UDP :5140 syslog<br/>(192.168.50.150,明文)"])
    ISSUE(["🐛 GitHub/GitLab<br/>HTTPS(gitlab.com)"])
    LC(["🔑 License Center<br/>HTTPS"])

    API -. "帳密驗證<br/>(驗憑證預設不勾)" .-> LDAP
    API -. "通知信、驗證碼<br/>(驗憑證預設不勾)" .-> SMTP
    API -. "通知推播" .-> CHAT
    API -. "操作日誌轉送" .-> SIEM
    API -. "意見回饋轉問題單" .-> ISSUE
    API -. "授權啟用" .-> LC

    classDef ext fill:#FBFCFC,stroke:#9AA8AA,stroke-dasharray:3 2
    class LDAP,SMTP,CHAT,SIEM,ISSUE,LC ext
圖 3 — 主系統連出去的外部服務(身分/通知/稽核維運)。全部依系統設定才建立;括號內是 STG 現在實際設的值。

圖 4 — 對外整合(下):AI、檔案、弱點檢測

八種檢測工具全部由代理程式在客戶機房發動,主系統不直接碰任何工具(主系統在雲端或 DMZ,連不到客戶內網的工具伺服器)。差別只在工具在哪裡跑:伺服器型是 agent 連客戶自架的工具伺服器;主機型是 agent 直接連受檢主機、在上面跑;本機型是 agent 自己跑掃描程式。「測試連線」按鈕也是主系統經資料面叫 agent 就近去探。

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#E2F0F1','primaryTextColor':'#14201F','primaryBorderColor':'#0E7C86','secondaryColor':'#EEF2F3','secondaryTextColor':'#14201F','tertiaryColor':'#FBFCFC','tertiaryTextColor':'#14201F','lineColor':'#4A5A5C','textColor':'#14201F','mainBkg':'#E2F0F1','nodeBorder':'#0E7C86','nodeTextColor':'#14201F','edgeLabelBackground':'#FBFCFC','titleColor':'#14201F','clusterBkg':'#FBFCFC','clusterBorder':'#E4EAEB'}}}%%
flowchart LR
    API["guidant-api"]
    WK["guidant-worker"]
    AG["evidence-agent<br/>(客戶機房)"]
    AIEXT(["🤖 外部 AI<br/>HTTPS · OpenAI/Anthropic<br/>(經 LiteLLM,STG 設 openai)"])
    GDRIVE(["☁️ Google Drive<br/>HTTPS ⇄ webhook"])
    subgraph SRVTOOLS["伺服器型:agent → 客戶自架的工具伺服器"]
        direction TB
        OPENVAS(["OpenVAS<br/>GMP over TLS :9390"])
        ZAP(["ZAP<br/>HTTP API(當 proxy):8080"])
        SONAR(["SonarQube Server<br/>HTTPS · 收 sonar-scanner 結果"])
        NESSUS(["Nessus<br/>(即將推出)"])
    end
    subgraph HOSTTOOLS["主機型:agent → 受檢主機,在上面跑"]
        direction TB
        INSPEC(["CINC Auditor/GCB<br/>Linux:SSH :22<br/>Windows:WinRM :5985/5986"])
        OSCAP(["OpenSCAP<br/>SSH :22(Linux 限定)"])
    end
    subgraph LOCALTOOLS["本機型:agent 自己跑"]
        direction TB
        NMAP(["Nmap<br/>本機程序,掃目標網段"])
        SCANNER(["sonar-scanner<br/>本機程序,掃源碼"])
    end
    PROFURL(["🌐 規則包網址<br/>HTTPS(只收 https)"])

    WK -. "證據分類<br/>(經 AI 閘道規則遮罩)" .-> AIEXT
    API -. "儀表板生成" .-> AIEXT
    API -. "同步證據檔" .-> GDRIVE
    GDRIVE -. "檔案變更通知(webhook 進來)" .-> API
    API -- "HTTPS :8443 · 資料面 mTLS+JWT<br/>測試連線(probe)、取消、取檔" --> AG
    AG -. "GMP/HTTP · 客戶填的位址與金鑰" .-> SRVTOOLS
    AG -- "SSH/WinRM · 客戶維運帳密" --> HOSTTOOLS
    AG -- "本機執行" --> LOCALTOOLS
    SCANNER -. "HTTPS · 上傳結果" .-> SONAR
    API -. "第一次抽取、算指紋" .-> PROFURL
    AG -. "下載規則包(尚未比對指紋,CM-2402)" .-> PROFURL

    classDef ext fill:#FBFCFC,stroke:#9AA8AA,stroke-dasharray:3 2
    class AIEXT,GDRIVE,OPENVAS,ZAP,SONAR,NESSUS,INSPEC,OSCAP,NMAP,SCANNER,PROFURL ext
圖 4 — AI/檔案/檢測。AI 連線由主系統發起(OpenAI 與 Anthropic 兩家可選);八種檢測工具全部由代理程式發起,主系統只經 :8443 資料面請它探測或取檔。

圖 5 — 全貌(四張合一)

上面四張是閱讀版;這張把全部 27 條線放在同一張,看整體形狀用,細節請回上面四張。

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#E2F0F1','primaryTextColor':'#14201F','primaryBorderColor':'#0E7C86','secondaryColor':'#EEF2F3','secondaryTextColor':'#14201F','tertiaryColor':'#FBFCFC','tertiaryTextColor':'#14201F','lineColor':'#4A5A5C','textColor':'#14201F','mainBkg':'#E2F0F1','nodeBorder':'#0E7C86','nodeTextColor':'#14201F','edgeLabelBackground':'#FBFCFC','titleColor':'#14201F','clusterBkg':'#FBFCFC','clusterBorder':'#E4EAEB'}}}%%
flowchart TB
    U(["👤 使用者"])
    subgraph MAIN["🏠 主系統 stack"]
        FE["guidant-fe :443"]
        API["guidant-api :8000"]
        SIO["guidant-socketio :8002"]
        WK["guidant-worker"]
        SB["guidant-sandbox :8080"]
        DB[("PostgreSQL :5432")]
        RD[("Redis :6379")]
        SW[("檔案儲存<br/>SeaweedFS/MinIO/本機")]
    end
    subgraph AGENTBOX["🏢 客戶機房"]
        AG["evidence-agent"]
        ASW[("agent-seaweedfs")]
        ENG["檢測引擎"]
        CUSTHOST(["🖥 受檢主機"])
        TOOLSRV(["工具伺服器<br/>OpenVAS/ZAP/SonarQube"])
    end
    subgraph EXT["依設定的外部服務"]
        LDAP(["LDAP/AD"]); SMTP(["SMTP"]); CHAT(["Discord/Telegram"]); SIEM(["SIEM"]); ISSUE(["GitHub/GitLab"]); LC(["License Center"]); AIEXT(["外部 AI"]); GDRIVE(["Google Drive"]); PROFURL(["規則包網址"])
    end

    U -- "HTTPS" --> FE
    FE --> API
    FE --> SIO
    API --> DB
    SIO --> DB
    WK --> DB
    API --> RD
    SIO --> RD
    WK --> RD
    API --> SW
    WK --> SW
    WK --> SB
    AG -- "HTTPS mTLS+通行證" --> FE
    API -- "HTTPS :8443 mTLS" --> AG
    AG --> ASW
    AG --> ENG
    AG -- "SSH/WinRM" --> CUSTHOST
    AG -. "GMP/HTTP" .-> TOOLSRV
    ENG --> CUSTHOST
    AG -.-> PROFURL
    API -.-> LDAP
    API -.-> SMTP
    API -.-> CHAT
    API -.-> SIEM
    API -.-> ISSUE
    API -.-> LC
    API -.-> AIEXT
    WK -.-> AIEXT
    API <-.-> GDRIVE
    API -.-> PROFURL

    classDef ext fill:#FBFCFC,stroke:#9AA8AA,stroke-dasharray:3 2
    class U,CUSTHOST,TOOLSRV,LDAP,SMTP,CHAT,SIEM,ISSUE,LC,AIEXT,GDRIVE,PROFURL ext
圖 5 — Level 0 全貌:所有外部實體、主系統服務、代理程式與資料儲存。
§2

二、連線清單(圖的表格版)

每條連線有固定編號 C01~C25(C23 再分 a/b),其他頁要指某條連線時用這個編號連過來(例如 dfd-level0.html#c20)。編號一旦給出不再改動,新增連線只往後加。

只列系統運作時會發生的連線;原廠裝機、升級、出包這類維運動作不在本圖範圍。同一張圖、逐條列出,方便對照與之後補「信任邊界」欄。「依設定」=客戶可在系統設定頁開關,沒設就不存在;「必有」=產品一跑起來就有。

2.1 使用者與前門

# 誰 → 誰 協定/埠 傳什麼 驗身分 存在條件
C01 瀏覽器 → guidant-fe HTTPS :443(:80 一律 301 轉) 前端頁面;自簽或客戶憑證 — 必有
C02 guidant-fe → guidant-api HTTP :8000,路徑 /api/1.0 所有業務 API JWT(Bearer) 必有
C03 guidant-fe → guidant-socketio HTTP :8002,路徑 /socket.io 即時推播、問卷協作房間 JWT 必有
C04 瀏覽器 → guidant-api HTTPS(經前門) Google Drive OAuth 授權回呼 state 綁瀏覽器 依設定(Drive)

2.2 主系統內部(docker 網路 guidant_default,不對外開埠)

# 誰 → 誰 協定/埠 傳什麼 驗身分 存在條件
C05 api/socketio/worker → guidant-db TCP :5432 全部業務資料;RLS 以 session 變數隔租戶 DB 帳密(cm_app,受 RLS) 必有(實測三個行程都持有連線)
C06 api/socketio/worker → guidant-redis TCP :6379 session、快取、socketio 訊息佇列 Redis 帳密(ACL 使用者 guidant) 必有(實測)
C07 api/worker → 檔案儲存 依 STORAGE_CONFIG.storage_type 三選一:SeaweedFS(出廠預設,stack 內建,S3 :8333)/MinIO(客戶自備 S3 端點)/本機磁碟(容器內路徑,無網路) 上傳檔、證據、匯出檔 S3 存取金鑰;本機無 必有。STG 現設 minio 型指向 188:8333、secure=false 明文(總表 #124 裁定接受)。詳 2.7
C08 worker/api → guidant-sandbox HTTP :8080(獨立網路 guidant_guidant-sandbox,只有 worker 與 sandbox 在裡面) 證據檔拆解、Prompt Guard 注入分數 無(靠網路隔離;sandbox 無 AI 金鑰、不出網) 必有(SANDBOX_MODE=remote)
C09 api → worker 不直連;經 DB background_jobs 表入列、worker 輪詢撿單 證據分類等 AI 工作 — 必有

2.3 主系統對外(依設定)

# 誰 → 誰 協定/埠 傳什麼 驗身分 存在條件
C10 api → 客戶 SMTP SMTP :587(STARTTLS)或 465 通知信、驗證碼、初始密碼信 SMTP 帳密;驗憑證預設不勾(CM-2239) SMTP 設定(STG 設 smtp.gmail.com)
C11 api → 客戶 LDAP/AD LDAPS :636 帳號密碼驗證、屬性 bind 帳密;驗憑證預設不勾 THIRD_PARTY_LOGIN(STG 設 192.168.50.160:636)
C12 api → 客戶 SIEM UDP :5140(或 TCP)syslog RFC5424/GELF 操作日誌 無;UDP 明文(TLS 選項 CM-2369 後有) log_forwarding_settings(STG 設 192.168.50.150:5140 UDP,enabled)
C13 worker/api → 外部 AI HTTPS(經 LiteLLM,明示官方位址) 證據內容片段(經 AI 閘道規則遮罩)、儀表板提示 原廠或客戶 API 金鑰(AI_PROVIDER_CONFIG) AI_PROVIDER_CONFIG。畫面可選 OpenAI、Anthropic 兩家;後端另認得 Google、Azure OpenAI、Ollama 但模型碼表未補、畫面先不開(STG 設 openai)
C14 api ⇄ Google Drive HTTPS;Drive 推變更通知進來 證據檔同步、資料夾建立;webhook 驗通行碼 OAuth token(DRIVE_TOKEN_ENCRYPTION_KEY 加密落庫) GOOGLE_DRIVE_APP_CONFIG
C15 api → GitHub/GitLab HTTPS 意見回饋轉問題單 PAT(ISSUE_INTEGRATE_CONFIG) 依設定(STG 設 gitlab.com)
C16 api → Discord/Telegram HTTPS webhook 通知推播 webhook URL/bot token(NOTIFY_CONFIG) 依設定
C17 api → 檢測工具 主系統不直連任何檢測工具;改為 api → agent 資料面(#21),由 agent 就近連工具(#23/#23a)。「測試連線」亦同 — — — 工具清單見 2.6
C18 api → License Center HTTPS 授權啟用、序號兌換 簽章授權檔 落地版啟用時
C19 api → 規則包網址 HTTPS(只收 https,CM-2057) 第一次抽取、算 sha256 無 url 型 profile

2.4 代理程式(客戶機房)

# 誰 → 誰 協定/埠 傳什麼 驗身分 存在條件
C20 agent → 主系統前門 HTTPS :443(AGENT_CLOUD_ENDPOINT) 報到、心跳/領工作、確認收到、回報結果 mTLS 客戶端憑證+控制面簽章通行證(CM-2052),每請求查撤銷 裝了 agent
C21 主系統 api → agent 資料面 HTTPS :8443(AGENT_BASE_URL) 測試連線(/detection/probe)、取消掃描、取回證據檔、源碼包下載 mTLS 客戶端憑證+綁 agent 身分的短效 JWT(agent_probe_client.py) 裝了 agent;需客戶開 8443 給主系統連入。STG 的 agent 容器實測只聽 :8000,8443 由 compose 對外映射——那台是舊版探測容器,非正式部署
C22 agent → agent-seaweedfs S3 HTTP :8333(同機 docker 網路) 證據暫存、WORM S3 金鑰(compose 必填,缺了匿名全開) 裝了 agent
C23 agent → 客戶受檢主機 Linux:SSH :22(paramiko)/Windows:WinRM :5985/5986(經 cinc-auditor 的 winrm transport) 在主機上跑主機型工具(CINC Auditor/GCB;OpenSCAP 只支援 Linux)、收結果 客戶維運帳密(平台加密下發,agent 用完即丟、密碼不進命令列) 派掃描時。工具清單見 2.6
C23a agent → 客戶自架的工具伺服器 OpenVAS:GMP over TLS :9390(python-gvm);ZAP:HTTP API :8080(ZAPv2,當 proxy 用);SonarQube:agent 本機跑 sonar-scanner 後 HTTPS 上傳到 SonarQube Server 建掃描、拉報告、送源碼分析結果 各工具帳密/API key(tenant_detection_tool_configs,平台加密下發) 依設定;位址客戶自填(總表 #4/#79 已擋內網)
C23b agent 本機程序 無網路(Nmap 掃描流量另算) Nmap 掃目標網段;sonar-scanner 掃源碼(源碼由 #21 自雲端取或 clone 公開 repo) — 派掃描時
C24 agent → 規則包網址 HTTPS 下載規則包交引擎(尚未比對指紋,CM-2402) 無 url 型 profile
C25 檢測引擎 → 受檢主機/網段 依工具(Nmap 等走原生掃描) 弱點掃描 — 派掃描時

2.6 產品內建的檢測工具(8 種)

依 config.detection_tools 列出。八種全部由代理程式在客戶機房發動——主系統從不直接連任何工具(它連不到客戶內網;OpenVAS 甚至不是 HTTP)。差別在工具跑在哪裡:

代號 工具 做什麼 怎麼呼叫(agent 發起) 支援 Windows 狀態
openvas OpenVAS 網路弱點掃描,比對 CVE/NVT GMP over TLS :9390(python-gvm)→ 客戶自架的 OpenVAS 伺服器 掃描目標不限 可用
zap ZAP 網頁應用程式動態檢測(DAST) HTTP API :8080(ZAPv2,ZAP 當 proxy)→ 客戶自架的 ZAP 掃描目標不限 可用
sonarqube SonarQube 原始碼安全檢測(SAST) agent 本機跑 sonar-scanner(源碼從雲端經 #21 取、或 clone 公開 repo)→ HTTPS 上傳結果到客戶的 SonarQube Server。Server 沒有觸發掃描的 API 與主機無關 可用
nessus Nessus 網路弱點掃描 (connector 未實作) — 即將推出
inspec CINC Auditor 組態合規檢測,Profile 與 InSpec 相容 agent shell out cinc-auditor,transport 依任務參數:ssh:// :22 或 winrm:// :5985/5986;密碼走設定檔不進命令列 是(WinRM) 可用
gcb 政府組態基準(GCB) 依 TWGCB 檢測主機組態 同 CINC Auditor 引擎、換一份 content(D7 決策,不另立引擎) 是(WinRM;TWGCB 有 Windows Server profile) 可用
openscap OpenSCAP Linux 安全組態,CIS/DISA STIG agent 用 SSH :22(paramiko)連主機跑 oscap 否(官方已放棄 Windows) 可用
nmap Nmap 網路埠與服務探測 agent 本機跑 nmap([sudo] nmap -oX …)掃目標;可選經 SSH 跳板 掃描目標不限 可用

STG 目前八種裡設定了七種(Nessus 未設)。主機型工具的規則包(profile)來源有兩種:平台上傳的檔案(走 #7 SeaweedFS、agent 經 #21 取)或客戶填的網址(#19/#24)。

2.7 檔案儲存後端(三選一)

產品把檔案存哪裡由系統設定 STORAGE_CONFIG 決定,jedi_file_upload 的 provider factory 實際只建這三種(S3/Azure/GCS 有型別代號但沒有實作,不算提供)。每個檔案在 upload_files.storage_type 記下它躺在哪種後端,讀取時據此借對應設定,所以切換後端不會搬舊檔(已知缺口,見 followup)。

storage_type 後端 連線 誰來的 出貨狀態
seaweedfs SeaweedFS(stack 內建 guidant-seaweedfs) S3 HTTP :8333,docker 內網 installer 一起裝 出廠預設(FACTORY_DEFAULT)
minio MinIO 或任何 S3 相容端點 S3 HTTP/HTTPS,位址客戶填 客戶自備 可選;FE 與 seaweedfs 共用同一組 S3 欄位
local 容器內本機磁碟 無網路,檔案路徑 — 可選;單機、無 HA

SeaweedFS 與 MinIO 走同一套 S3 協定、同一個 SDK,但給不同型別代號——同一套部署若兩種並存,讀取端才不會借錯端點(storage_type_code.py 的注意事項)。

§3

三、查到但要注意的事

  • 188 上有兩套 SeaweedFS:主系統 stack 的 guidant-seaweedfs 與 agent 安裝包的 guidant-agent-seaweedfs,互不相通。另外還有一組舊的 seaweedfs/seaweedfs-admin 對外開 8333/9333/23646,STG 的 STORAGE_CONFIG 指的是 192.168.50.188:8333,也就是這組舊的、對外開埠的,不是 stack 內那台。出貨版 installer 預設指哪一台要確認。
  • 主系統 → agent 資料面 :8443 確認存在:jedi_detection 的 agent_probe_client.py/agent_cancel_client.py 與檔案取回都走這條,mTLS+短效 JWT。STG 上那台 agent 容器只聽 :8000,是舊版探測容器不是正式部署,不代表產品沒這條。
  • SIEM 轉送是 UDP 明文:STG 實際設定 udp/192.168.50.150:5140。
  • sandbox 另有一條連到本機 :36029 的連線,來源未查(可能是模型載入或健康檢查),不影響本圖。
  • 老 postgres(:25432)、pgadmin4(:8086)是基線庫與管理工具,不屬產品。
§4

四、下一層

每個核心模組各畫一張 Level 1 DFD,展開該模組內的處理步驟與資料儲存: 檔案上傳下載/證據分類(AI 閘道+沙箱)/遠端代理程式/弱點檢測整合/登入與權限/雲端硬碟整合/日誌轉送/授權管理。


依據:2026-10-02 對 STG 192.168.50.188 的唯讀盤點(docker ps、docker inspect、容器內 /proc/net/tcp、FE nginx 設定、stack DB system_configs/log_forwarding_settings/tenant_detection_tool_configs、agent 安裝包 compose)。