CI/CD - 於 GitHub 上建立自動生成 SBOM 及漏洞掃描
使用 GitHub 平台所提供的 CI/CD 工具 GitHub Actions 設定每次程式碼更新自動觸發自動化的生成 SBOM 文件及透過 OSV 工具自動化流程。以下範例將以 petsard 專案為例。
名詞介紹
GitHub Actions
GitHub Actions 是 GitHub 提供的一項持續整合和持續交付(CI/CD)服務。此工具允許使用者於 git repository 中客製化的 workflow ,以便在特定事件發生時自動執行任務。以下簡介 GitHub Actions 功能介紹:
- Workflow
- workflow 是一系列定義的自動化步驟,由 YAML 格式文件所紀錄,通常存放在
.github/workflows/目錄下。 - 每個 workflow 由 Event、Job 和 Step 所組成。
- workflow 是一系列定義的自動化步驟,由 YAML 格式文件所紀錄,通常存放在
- Event
- Event 是指觸發 workflow 的事件。這些事件可以是推送程式碼、pull request、release 等。例如,當有人將程式碼推送到 main branch 時,可以觸發一個 workflow 來進行測試和部署。
- Job
- Job 是 workflow 中的一個執行單位,包含一系列的 steps。每個 step 是一個可執行的 Shell 腳本,或是一個可執行的 Actions。
- Job 可 以在不同的 runner 上執行,這些 runner 由 GitHub 提供的或是 self-hosted runner
- Actions:
- GitHub Actions 平台上的自定義應用程式,用於執行複雜但經常重複的任務。
- GitHub Marketplace 提供了大量預設的 Actions,也可以自行開發定義的 Actions 來滿足特定需求。
- Runner
- Runner 是一個在工作流程觸發時運行你的工作流程的伺服器。每個 Runner 一次只能運行一個作業。GitHub 提供 Ubuntu Linux、Microsoft Windows 和 macOS Runner 來運行你的工作流程
相關 GitHub Actions 介紹
osv-scanner-action
osv-scanner-action 會將專案元件與由 Google 維護的開源漏洞(Open Source Vulnerability,OSV)資料庫進行查詢比對,評估專案的依賴關係並揭示專案的漏洞元件。開發人員可以快速查詢其軟體組件是否存在已知的安全問題。
trivy-action
trivy-action 是由 Aqua Co. 開發的工具,效果與 osv-scanner-action 相似。也可用於生成專案或 container image 的 SBOM 檔案。優勢在於可同時生成 SBOM 與 漏洞元件掃描。
syft-action
syft-action 專注於生成 SBOM,支援較多種語言。
注意:syft 在某些情況中較 trivy 生成的 SBOM 完整,建議使用者可在自己的專案分別測試過後再決定使用何者效果較佳。
三者支援的語言
最後更新於 2025/06/05
| osv-scanner | trivy | syft |
|---|---|---|
| .NET | .NET | .NET |
| C/C++ | C/C++ | C/C++ |
| Dart | Dart | Dart |
| Elixir | Elixir | Elixir |
| Go | Go | Go |
| Java | Java | Java |
| JavaScript | JavaScript | JavaScript |
| PHP | PHP | PHP |
| Python | Python | Python |
| Ruby | Ruby | Ruby |
| Rust | Rust | Rust |
| Haskell | Julia | Haskell |
| R | Swift | Swift |
| N/A | N/A | Bitnami packages |
| N/A | N/A | Erlang |
| N/A | N/A | Jenkins Plugins |
| N/A | N/A | Nix |
| N/A | N/A | Objective-C |
| N/A | N/A | WordPress plugins |
| N/A | N/A | Terraform providers |
以 petsard 專案為例
petsard GitHub Actions 相關檔案結構如下:
.github/
├── workflows/
│ ├── trivy-sbom-gen.yml
│ └── trivy-vuln-scan.yml
└── dependabot.yml