跳轉到

第三方元件風險:檢測工具入口(Detection Tool Entry)

功能群:第三方元件風險|兩個入口的差異先讀 功能群總覽 §3

事實基準:2026-10-11 從 FE src/components/grc/planning/ServerSideToolParams.vue、AoTaskForm.vue、src/components/grc/JobExecutionDrawer.vue、src/components/detection-tools/ServerSideToolCard.vue、jedi-detection server_side_dispatch.py/server_side_result.py、jedi-source-scan detection_dispatch_handler.py/detection_result_forwarder.py、DEV config.detection_tools(code='sbom-scan')實查掃出

變更紀錄

日期 FR 變更
2026-10-14 FR-137 任務可設週期與自動執行:到期由系統開掃、沿用上次上傳的檔案;掃完與上一次比對,新出現 CRITICAL/HIGH 寄給額外通知對象(見 UC-STE-02 末段)
2026-10-11 FR-134 新頁:「第三方元件弱點掃描」作為檢測工具——不派 Agent、任務抽屜上傳檔案後執行、結果與產物轉任務證據、抽屜「看完整結果」連結果頁

1. 功能描述

本頁不是一條獨立路由,而是第三方元件風險在檢測工具流程裡的那一段:專案規劃時把「第三方元件弱點掃描」綁到任務上,執行人在任務抽屜上傳檔案並執行,掃描結果(報告 PDF、SBOM、各工具原始結果)自動成為該任務的證據。

與其他檢測工具最大的不同:這個工具不派 Agent。它不連任何主機,掃的是使用者上傳的檔案,所以沒有 Agent 指派、沒有目標主機、沒有排程。工程端以 config.detection_tools.execution_target='server' 區分,畫面上不顯示這個區分、不另取名——這個資訊對使用者沒有可操作的東西(Agent 工具顯示 Agent 名稱是因為換一台就通、要靠它排錯;本工具沒有可換的對象)。

主要使用者:專案管理者(綁工具)、任務執行人(上傳與執行)、稽核員(看證據)。

角色速覽

角色 一句話
專案管理者 在任務配置選工具、設掃描模式與工具
任務被指派人或專案 manager 在任務抽屜上傳檔案、執行、重新執行
持 detection.source-scan.read 抽屜多一顆「看完整結果」

1.1 功能總覽

# 功能 說明 位置 詳述
1 工具卡 「第三方元件弱點掃描」只顯示名稱與說明;沒有設定、測試連線、啟用停用(是否可用由授權決定) 檢測工具管理 檢測工具管理
2 任務參數 選這個工具後 Agent 指派區塊不出現,改顯示本工具參數與提示句 任務配置 UC-STE-01
3 上傳檔案 任務抽屜出現檔案槽:原始碼封存檔或 SBOM 文件(依掃描模式) 任務抽屜 UC-STE-02
4 執行/重新執行 建一次執行並發起掃描;重新執行沿用任務設定的工具與參數 任務抽屜 UC-STE-02
5 結果轉證據 報告 PDF、各格式 SBOM、各工具原始結果寫進任務證據 任務抽屜證據區 UC-STE-03
6 看完整結果 執行列上的按鈕,開該次掃描的結果頁 任務抽屜執行列 掃描結果頁
7 模組清單可見 這類掃描列在「第三方元件風險 → 任務發起的掃描」頁籤 模組清單 受評系統清單 §5.3

2. Use Case

UC-STE-01 在任務上綁定工具

項目 內容
角色 專案管理者(任務配置權限見任務配置頁)
前置條件 授權含檢測工具包
產出 / 後置條件 任務綁定 sbom-scan,參數落在任務層 tool_params,分派列為空

選定工具後顯示提示「選用此工具不需指派 Agent,待掃描的原始碼封存檔或 SBOM 於任務執行時上傳。」與三個參數:

參數 型別 預設 說明
掃描模式 scan_mode 單選,必填 upload 上傳原始碼封存檔(由平台產製 SBOM 後比對)/上傳 SBOM 文件(直接比對弱點)
SBOM 格式 sbom_formats 複選 CycloneDX JSON 1.6、SPDX JSON 2.3 產出哪幾種 SBOM
弱點掃描工具 tools 複選 Trivy、Grype、OSV-Scanner 跑哪幾家

後端存檔時對這類工具一律清空 Agent 分派列(detection_job_binding_handler.py::_is_server_side_tool)。

UC-STE-02 上傳檔案並執行

項目 內容
角色 任務被指派人或專案 manager
前置條件 任務狀態為進行中;任務已綁定本工具
產出 / 後置條件 一個執行群組+一列執行(無 agent_task);一筆 source_scans(target_uid 空、detection_execution_uid 指向該執行);背景工作

UC-STE-02 上傳並執行

  • 檔案沿用:本次有上傳就用新檔並記住;沒上傳就沿用上次那份。從未上傳過 → 400。
  • 同一任務同時只能有一輪:已有執行中的群組 → 409 DETECTION_TOOLS_409003。掃描是背景工作、不能中途取消,重新執行也不能疊出第二輪。
  • 重新執行沿用任務設定:已執行過的任務,說明文字下方多一行「將沿用此任務設定的掃描工具與參數;要變更請至專案規劃修改任務設定。」——工具勾選是建任務時存下的參數(例如建任務時只勾兩家),重新執行照同一組參數跑,歷次結果才可比。要改工具請回專案規劃改任務設定。Agent 型工具不顯示這行。
  • 處理函式失敗時整筆回滾,執行列與群組不留殘缺紀錄。
  • 週期自動執行(FR-137):任務設了週期且開「自動執行」時,時間到由系統以 system 身分走同一條派工路徑,不帶新檔=沿用上次那份;從沒上傳過就派不出去(照上面「從未上傳過 → 400」),只記 warning、仍寄信請執行人手動執行。抽屜執行紀錄上這筆標「自動執行」。週期設定見任務配置「任務週期」。
  • 門檻通知(FR-137):掃描完成後與同一筆任務上一次成功的掃描比對,有新出現的 CRITICAL/HIGH 就寄給任務設定的額外通知對象(首掃全部算新出現),紀錄在通知紀錄。

UC-STE-03 結果轉任務證據

項目 內容
角色 系統(背景工作)
前置條件 掃描結束
產出 / 後置條件 成功:證據寫入、執行列 succeeded、群組收口;失敗:執行列 failed 帶錯誤訊息
  • 成功時轉成證據的檔案:報告 PDF 排第一(成為執行列的代表報告),接著各格式 SBOM、各工具原始結果。報告是完整版,含全部弱點列表。
  • 檔名規則同總覽 §8 第 1 條:任務掃描沒有受評系統,名稱取任務名(沒有就專案名),例如 Evidence upload_弱點掃描報告_20261011-1403.pdf。
  • 證據落地、群組收口、completion_mode=auto 的自動完成判斷,與 Agent 型工具走同一套(server_side_result.complete),不另寫一份。
  • 執行列的 summary 帶統計,抽屜依中文對照表顯示嚴重度、KEV、EPSS、可修補、涵蓋度、元件數。

3. 權限矩陣

操作 FE 判定 BE 強制 BE 檢查位置
綁定工具 任務配置頁既有守門 任務配置既有守門 見任務配置頁 §3
執行/重新執行 抽屜既有守門(canEdit) 任務被指派人或專案 manager(assert_job_operator);任務須進行中 detection_orchestration_service.py::start_execution
看完整結果 v-can=detection.source-scan.read detection.source-scan.read SourceScanDetailRoute.get
工具可見 依授權過濾工具清單 GET /detection-tools 依 license 過濾 jedi-detection routing

任務操作守的是任務權限(grc.job.*),不是 detection.source-scan.*——見系統管理總覽「A 任務情境看任務權限」。

4. 狀態機與前置條件

條件 效果 出處
任務不是進行中 409 DETECTION_TOOLS_409002 start_execution
任務未綁定工具 400 DETECTION_TOOLS_400003 同上
已有執行中的群組 409 DETECTION_TOOLS_409003 server_side_dispatch.dispatch
沒有本次上傳、也沒有上次那份 400 SOURCE_SCAN_400002 detection_dispatch_handler.py
指名的檔案不存在 404 DETECTION_TOOLS_404003 server_side_dispatch._resolve_input_files
工具沒有登記處理函式(系統設定壞掉) 412 DETECTION_TOOLS_412003 server_side_dispatch.dispatch
掃描模式不是 upload/sbom 400 SOURCE_SCAN_400001 detection_dispatch_handler.py

5. UI 設計

畫面 本工具的呈現
檢測工具管理 工具卡只有名稱與說明,沒有徽章、按鈕、選單
任務配置 不顯示 Agent 指派、目標主機、排程;顯示提示句與三個參數(掃描模式、SBOM 格式、弱點掃描工具),格式與工具收在「進階參數」
任務抽屜 執行區 檔案槽(依掃描模式限定副檔名);執行群組列與執行紀錄列不顯示 Agent 名稱那一格;已執行過時多一行沿用參數提示
任務抽屜 執行列 「看完整結果」(有 read 權限才出現)、下載報告
任務抽屜 執行詳情 開始/結束時間 YYYY-MM-DD HH:mm:ss;掃描報告清單點檔名或眼睛鈕可預覽(PDF 進預覽框、JSON 走文字預覽),旁邊保留下載

6. API 規格

本入口沒有自己的 endpoint,走檢測工具既有端點:

Method + Path 說明
GET /detection-tools 工具清單,回應帶 execution_target
任務配置存檔端點 見任務配置頁 §6
任務抽屜執行端點 body 帶 source_files(每項只送 uid,檔名等由後端從 upload_files 權威取回)
GET /source-scan/scans/{uid} 「看完整結果」

派工結果回傳一列 executions[0],帶 source_scan_uid;抽屜據此顯示「看完整結果」。

7. 前端檔案地圖(compliance-manager-fe/)

檔案 角色
src/utils/detectionExecutionTarget.js isServerSideTool:判斷一律看 execution_target,不看 connection_type(本工具的 connection_type 是 null)
src/composables/useServerSideExecutionDisplay.js 抽屜用的判斷
src/components/detection-tools/ServerSideToolCard.vue 工具卡
src/components/grc/planning/ServerSideToolParams.vue、AoTaskForm.vue 任務參數區
src/components/grc/job-drawer/DetectionSourceFileUpload.vue 抽屜檔案槽
src/components/grc/JobExecutionDrawer.vue 抽屜:執行、沿用參數提示、看完整結果(超標檔,新邏輯一律另開檔)
src/components/grc/job-execution/ExecutionInfoDialog.vue 執行詳情:時間格式、報告預覽

8. 後端檔案地圖

鏈路 檔案
派工分岔 jedi-detection detection_orchestration_service.py::start_execution(一行分岔)→ server_side_dispatch.py::dispatch
本工具處理函式 jedi-source-scan detection_dispatch_handler.py::dispatch_sbom_scan(@register_server_side_handler('sbom-scan'))
結果回收 jedi-source-scan detection_result_forwarder.py → jedi-detection server_side_result.py::complete/fail
綁定存檔 jedi-detection detection_job_binding_handler.py::_is_server_side_tool
工具目錄 seed jedi-detection migrations(新客戶)+BE scripts/sql/2026-10-10-fr134-h1-sbom-scan-tool.sql(既有庫升級)

9. DB

表 讀/寫 說明
config.detection_tools 讀 code='sbom-scan'、execution_target='server'、requires_target_host=false、requires_credentials=false
config.detection_tool_param_schemas 讀 三個參數
compliance.detection_execution_groups/detection_executions 寫 一群組一執行列,agent_task_uid 為 NULL
compliance.source_scans 寫 target_uid NULL、detection_execution_uid 指向執行列
job_evidences 寫 結果檔

config.detection_tools.code='sbom-scan' 是資料值:改了那一列的 code,處理函式就找不到(412)。

10. 頁面邏輯與資料對應

  • 判斷是否本類工具:FE 讀工具清單的 execution_target;BE 讀同一欄位。兩端同一判準,查不到工具時當 Agent 型。
  • 任務被刪除後,該任務的掃描不再列在模組的「任務發起的掃描」頁籤。

11. 背景行為與外部依賴

類型 內容
背景工作 同獨立模組:sbom_scan,worker 執行
稽核事件 派工記 DETECTION_SCAN_STARTED(6123,與 Agent 型同一支)
jedi-* 套件 jedi-detection(派工分岔、結果回收)、jedi-source-scan(處理函式、核心)

12. 邊界情況與已知坑

  1. 重新執行不會自動加新工具:任務建立時勾的工具清單是快照;系統新增第三家工具後,舊任務重新執行仍只跑任務設定裡的那幾家。
  2. 掃描不能取消:背景工作不支援取消,執行中只能等它結束或逾時(20 分鐘)。
  3. 任務掃描不從模組刪:跟著任務走;任務刪除後該掃描不在模組清單出現。
  4. 錯誤訊息 DETECTION_TOOLS_412003(工具沒有登記處理函式)描述的是實際部署位置:只在系統設定壞掉時給管理員看,不屬一般使用者畫面。

13. 開發與驗證

  • 驗收:專案規劃建一個檢測工具任務選「第三方元件弱點掃描」→ Agent 指派不出現 → 啟動任務 → 抽屜上傳封存檔 → 執行 → 證據區出現報告 PDF、SBOM、原始結果(檔名以任務名開頭)→「看完整結果」開結果頁 → 模組「任務發起的掃描」頁籤看得到這筆
  • 相關:檢測工具管理、任務配置頁、我的任務