再堅固的城牆,也擋不住你自己把有毒的補給車推進來。
前幾天我們從 程式碼、依賴、Secrets 三個角度逐步加上安全檢查。這些檢查都鎖定「開發層級」:你寫了什麼、你裝了什麼、你是不是不小心洩漏了鑰匙。
但 DevSecOps 的工作不會停在程式碼,而是會進一步把應用打包成容器,再丟到雲端或叢集裡跑。這時候風險也跟著轉移——容器映像檔本身就可能帶著漏洞。
這就是 Trivy 要解決的問題。它不是看你寫的程式碼,而是檢查整台「補給車」——基底 OS、系統套件、安裝的依賴,裡面是不是藏了暗雷。
基底映像檔不是你自己維護的
大家常用的 python:3.10、ubuntu:20.04 都來自社群或官方團隊。看似可靠,但其實可能累積了數十個已知漏洞。
漏洞藏在更底層
就算應用程式安全,openssl、glibc、curl 這些系統套件若出問題,整個容器還是暴露在攻擊面下。
部署規模放大風險
容器不像單一程式,是會被大量複製、佈署的。如果基底映像檔帶著漏洞,你等於把一台危險補給車複製上百份,推進每個城門口。
安裝:
一樣 windows 到 github 下載( Trivy )
這邊示範掃描官方映像檔
trivy image python:3.10
結果會列出漏洞數量,並依嚴重性分級,例如:
Total: 42 (CRITICAL: 2, HIGH: 8, MEDIUM: 20, LOW: 10)
Trivy 會交叉比對「你的映像檔 → OS 套件 → 已知漏洞資料庫 (CVE)」,把問題逐層列出來。
Critical / High:必須立即處理(換基底、升級套件)。
Medium / Low:可以列入技術債,或等官方基底更新後再同步。
建立一個簡單 Dockerfile:
FROM python:3.10-slim
WORKDIR /app
COPY . /app
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
Build:
docker build -t myapp:latest .
用 Trivy 掃:
trivy image myapp:latest
這時候 Trivy 不只會掃基底 OS,還會掃你安裝的 Python 套件,可跟 Day.9 的 pip-audit 配合使用
在 .github/workflows/ci.yml 裡加入:
- name: Build Docker image
run: docker build -t myapp:latest .
- name: Scan Docker image with Trivy
uses: aquasecurity/trivy-action@0.13.0
with:
image-ref: myapp:latest
format: 'table'
exit-code: '0'
ignore-unfixed: true
初期只產出報告,不阻擋流程。等團隊熟悉後,再設定「Critical 漏洞 → fail」。
這樣既能讓大家習慣,也不會突然因為一堆高危漏洞卡住開發。
到今天為止,我們已經完成了 DevSecOps 的「四道防線」:
這四道防線涵蓋了大部分初學者最容易忽略、卻最常出事的環節。
到這裡,就是一個完整的安全入門循環。
Trivy 幫我們把檢查範圍延伸到容器,確保「推進城牆的補給車」不會暗藏危險。
到這裡,我們把程式碼、依賴、Secrets、容器四大面向都補齊了。
這不代表 DevSecOps 到此為止,而是 入門階段完成一輪循環。