iT邦幫忙

2025 iThome 鐵人賽

DAY 27
0
DevOps

DevOps 進化論:從全能型戰士到安全守門員系列 第 27

Day 27|容器安全檢查:讓 Image 成為可信任的交付物

  • 分享至 

  • xImage
  •  

● 前言

在現代軟體交付中,容器幾乎已經成為主流的部署方式。
然而,Image 本身往往隱含著安全風險,可能來自基底映像檔、應用程式套件,甚至是開發過程中未清理的殘留檔案。
因此,若沒有對映像檔進行安全檢查,CI/CD 交付到生產環境的成品可能就暗藏漏洞。


● 為什麼需要 Image 安全掃描?

1.基底映像檔漏洞
常見的 Ubuntu、Debian、Alpine 等 OS 基底映像檔,可能帶有已知漏洞。
2.應用層套件漏洞
Python、Node.js 等應用依賴套件若有安全問題,也會被一起打包進去。
3.映像檔肥大與未清理風險
沒有移除不必要的檔案、Cache,容易放大攻擊面,也讓鏡像不必要地龐大。


● 常見工具

目前社群常用的容器安全檢查工具包含:
1.Trivy:輕量、好上手,支援多種輸出格式。
2.Grype:由 Anchore 推出,專注於漏洞掃描。
3.Clair:CoreOS 推出的漏洞檢測工具,常見於 Harbor registry 中。
其中 Trivy 最容易入門,也適合直接整合到 CI/CD Pipeline。


● 實作範例:Trivy + GitHub Actions

🗂️專案目錄:

https://ithelp.ithome.com.tw/upload/images/20250909/201781563FQX48VSsE.png

📄main.py(以flask為例):

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello, Trivy Scan Demo!"

📄Dockerfile

FROM python:3.10-slim

# 設定工作目錄
WORKDIR /app

# 複製需求與程式
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 如果 main.py 在專案根目錄,直接複製整個專案
COPY . .

# 啟動應用
CMD ["python", "main.py"]

📄requirements.txt

flask==2.3.2
requests==2.28.1

📄/.github/workflows/ci.yml

以下範例示範如何在 CI/CD 中掃描 Docker Image:

name: CI with Trivy Scan

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build-and-scan:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repo
        uses: actions/checkout@v4

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Build Docker image
        run: docker build -t my-app:latest .

      - name: Run Trivy Scan
        uses: aquasecurity/trivy-action@master
        with:
          image-ref: my-app:latest
          format: table
          exit-code: 0

👉 說明:

🔹image-ref: 指定要掃描的映像檔。
🔹format: 設定輸出格式,可選 table, json, sarif。
🔹exit-code: 控制遇到漏洞時是否中斷流程(例如設成 1,就會讓 CI 失敗)。

1. 在 CI/CD 中加入這個步驟,就能確保每次交付前,映像檔都會被自動掃描。

https://ithelp.ithome.com.tw/upload/images/20250909/20178156xS1D2PMazN.png
💻展示 Trivy 掃描步驟在 CI pipeline 裡的流程位置(Run Trivy Scan step)。
👉說明:Trivy action 會在 Docker build 之後執行。

2.顯示 系統套件 (debian 基底) 的漏洞表格輸出

https://ithelp.ithome.com.tw/upload/images/20250909/201781567S3mqxPdS4.png
👉 說明:基底映像檔(OS 層)往往會有不少 LOW/MEDIUM 等級漏洞。

3.顯示 應用套件 (Python 套件) 的漏洞檢測結果

https://ithelp.ithome.com.tw/upload/images/20250909/20178156ZqI1q793Bt.png
👉 說明:應用程式依賴(例如 requests, urllib3, setuptools)也會被掃描,這是 Trivy 的優勢。


● 總結

Image 本身就是最終的交付物,若不進行安全檢查,就等於把不可信的黑箱丟到生產環境。
透過像 Trivy 這樣的工具,我們能在 CI/CD Pipeline 自動化地守住容器安全,確保交付物的可靠性與可信度。

👉 下一篇 Day 28|Secrets 管理進階:從 Kubernetes Secret 到加密存放


上一篇
Day 26|依賴與套件安全:守住軟體供應鏈的第一道防線
下一篇
Day 28|Secrets 管理進階:從 Kubernetes Secret 到加密存放
系列文
DevOps 進化論:從全能型戰士到安全守門員30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言