容器安全不再是可選的。隨著供應鏈攻擊的增加,保護容器映像從建置到運行的整個過程是任何運行容器化工作負載的組織的基本要求。僅運行時安全是不夠的;供應鏈安全必須從形象建構階段開始。
貨櫃供應鏈威脅格局
容器供應鏈中的攻擊媒介包括受損的基礎映像、易受攻擊的依賴項、洩漏的機密和惡意軟體包。 Codecov 洩漏憑證外洩、依賴性混淆攻擊以及公共影像中發現的加密貨幣挖礦程式等現實世界事件凸顯了這些威脅的嚴重性。共享責任模型意味著,雖然 Docker 等平台提供了基礎基礎設施,但建置映像的安全性是您的責任。
鏡像漏洞掃描工具
有多種工具可用於掃描容器映像。 Aqua Security 的 Trivy 是開源的、快速且全面的,可以跨越 npm、pip、gem 和 Go 掃描作業系統套件和特定於語言的依賴項。 Snyk 提供一款商業掃描儀,具有開發人員友好的 CLI、PR 檢查和自動修復建議。 Anchore 的 Grype 與 Syft 整合以產生 SBOM,而 Docker Scout 則直接內建於 Docker Desktop 和 Docker Hub 中。
| 工具 | 類型 | 關鍵實力 |
|---|---|---|
| 瑣碎 | 開源 | 覆蓋速度與廣度 |
| 斯尼克 | 商業 | 修復建議和 PR 整合 |
| 格里普 | 開源 | SBOM 與 Syft 整合 |
| Docker 偵察兵 | 內建 | 無縫 Docker 桌面整合 |
Dockerfile 安全最佳實踐
最小基礎鏡像是安全容器的基礎。與完整作業系統映像相比,偏好 Alpine、distroless 或 scrap。多階段建置將建置依賴項與執行時間工件分開,讓您產生僅包含執行應用程式所需內容的最終映像。
FROM golang:1.22 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o app .
FROM alpine:3.20
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
COPY --from=builder /app/app /app/app
USER appuser
ENTRYPOINT ["/app/app"]
避免使用最新的標籤;固定到特定的摘要以進行可重現的建置。以非 root 使用者身分執行容器,刪除不必要的 Linux 功能,並將根檔案系統掛載為唯讀,並使用可寫入目錄的 tmpfs。
容器中的秘密管理
秘密絕不能融入圖像中。避免在 Dockerfile 中使用帶有憑證的 ENV 或 COPY。相反,請使用 Docker BuildKit 的 –secret 標誌來建置時機密和運行時機密存儲,例如 Docker Secrets、Kubernetes Secrets 或外部解決方案(例如 HashiCorp Vault 和 AWS Secrets Manager)。
# Build with build-time secrets (no secret in image layers)
DOCKER_BUILDKIT=1 docker build \
--secret id=mysecret,src=./secret.txt \
-t myapp:latest .
配置良好的 .dockerignore 檔案可防止在建置上下文中意外包含 .env 檔案、SSH 金鑰或其他憑證。
使用 Cosign 進行影像簽名
影像簽名提供了影像由可信任來源產生的加密驗證。 Cosign 是 Sigstore 專案的一部分,支援使用 GitHub、Google 和 Microsoft 等 OIDC 提供者進行無金鑰簽署。它透過 Fulcio 憑證授權單位產生臨時金鑰,並將簽章記錄在 Rekor 透明度日誌中。
# Keyless signing
cosign sign ghcr.io/myorg/myapp:latest
cosign verify ghcr.io/myorg/myapp:latest
使用整體元資料的鏡像證明可以實現 SLSA 合規性,而 Kyverno 和 Connaisseur 等策略執行工具可能需要經過驗證的簽名,然後才能在 Kubernetes 叢集中部署鏡像。
運行時安全
運行時安全層保護正在運作的容器。 Seccomp 設定檔限制容器可用的系統調用,AppArmor 或 SELinux 強制執行強制存取控制,而只讀檔案系統則阻止執行時間修改。記憶體和 CPU 的資源限制可減輕拒絕服務風險,無根模式無需根權限即可執行 Docker 守護程式。對於進階威脅偵測,CNCF 的 Falco 會監視容器行為是否有異常活動。
持續集成/持續交付集成
安全掃描必須整合到管道的每個階段。使用 trivy fs 在開發人員工作站上進行掃描,在使用操作執行程式的拉取請求中、在建置時、在登錄中以及部署之前進行掃描。策略即程式碼定義了漏洞嚴重性閾值,用於確定建置是否通過或失敗。
name: Container Security Scan
on: [pull_request]
jobs:
trivy-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Trivy
uses: aquasecurity/trivy-action@master
with:
scan-type: fs
severity: CRITICAL,HIGH
exit-code: 1
使用 Syft 產生 SBOM 建立 SPDX 或 CycloneDX 物料清單,可以將其附加到版本中以實現可審計性和攤商合規性。
最小基礎影像比較
| 圖片 | 尺寸 | 殼牌 | 套件管理器 | 最適合 |
|---|---|---|---|---|
| 阿爾卑斯 | 5 MB | 是的 | 應用程式 | 通用 |
| 無Distroless | 12-20 MB | 沒有 | 無 | 生產應用程式 |
| 鏈罩 | 15-25 MB | 沒有 | apk(最小) | 安全至關重要 |
| 刮刮 | 0 MB | 沒有 | 無 | 靜態二進位檔案 |
持續監控和合規性
登錄掃描持續監視 Docker Hub、ECR、GCR 和 Harbor 中的映像以尋找新的 CVE。漏洞資料庫的新鮮度至關重要; Trivy 每小時更新一次資料庫。使用漏洞預測評分系統進行 CVE 分類有助於區分可利用漏洞與理論漏洞。 CIS Docker Benchmark、NIST SP 800-190 和 SOC 2 等合規性架構提供了結構化指南。 Dependabot 和 Renovate 等自動修復工具會為已修補的基礎映像版本建立拉取要求。
結論
分層容器安全性策略結合了建置時掃描、執行時間監控和策略執行。從 CI/CD 中的 Trivy 開始,採用多階段建立的最小基礎鏡像,使用 Cosign 為生產註冊表實現鏡像簽名,並持續監控漏洞資料庫。安全性不是容器生命週期的最後一步,而是整合到開發和部署的每個階段的持續實踐。

