跳轉到主要內容
本文件說明如何驗證由 vantage-packager 映像發布管線所建立的密碼學簽章與證明。

概觀

vantage-packager 管線會為每個已發佈的映像建立多個安全性工件:
  • Container Image Signature(容器映像簽章):使用 Cosign 的密碼學簽章
  • SPDX SBOM Attestation(SPDX SBOM 證明):SPDX 2.3 格式的軟體材料清單(SBOM)
  • Vulnerability Scan Attestation(弱點掃描證明):SARIF 格式的安全掃描結果
所有工件都使用同一把私鑰簽署,並可使用對應的公鑰加以驗證。

先決條件

你需要安裝以下工具:
  • cosign - 用於簽章與證明 (attestation) 的驗證
  • jq - 用於解析與分析 JSON
  • curl - 選用,用於下載構件 (artifacts)

簽名驗證

基本驗證

使用公鑰驗證影像的簽章:
# 驗證簽章(針對私有註冊表跳過透明度日誌)
cosign verify --key cosign.key.pub --insecure-ignore-tlog \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1

在停用 TLS 驗證時

適用於使用自簽憑證的登錄伺服器:
cosign verify --key cosign.key.pub --insecure-ignore-tlog --allow-insecure-registry \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1
預期的輸出結果:
[{
  "critical": {
    "identity": {
      "docker-reference": "abyvtgonprm27.azurecr.io/vantage-installer"
    },
    "image": {
      "docker-manifest-digest": "sha256:a4190ad9d5289d7ad2d02d05749c10713a7aac217e8010b5e4ef15161b181c94"
    },
    "type": "cosign container image signature"
  }
}]

證明核驗

SPDX SBOM 證明

驗證 SPDX 軟體材料清單證明:
# 驗證 SPDX 認證
cosign verify-attestation --key cosign.key.pub --type spdx --insecure-ignore-tlog \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1

漏洞掃描證明

驗證漏洞掃描證明:
# 驗證弱點掃描證明
cosign verify-attestation --key cosign.key.pub --type vuln --insecure-ignore-tlog \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1

取得證明資料

下載 SPDX SBOM

從 attestation 取出 SPDX SBOM:
# 下載並提取 SPDX SBOM
cosign download attestation --predicate-type spdx \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1 | \
  jq -r '.payload' | base64 -d | jq -r '.predicate' > sbom.json

下載弱點掃描報告

擷取弱點掃描結果:
# 下載並提取漏洞掃描
cosign download attestation --predicate-type vuln \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1 | \
  jq -r '.payload' | base64 -d | jq -r '.predicate' > vuln-scan.sarif

分析 SPDX SBOM 資料

基本 SBOM 資訊

# 檢視 SBOM 中繼資料
jq '{
  name: .name,
  spdxVersion: .spdxVersion,
  creationInfo: .creationInfo,
  packageCount: (.packages | length)
}' sbom.json

列出所有套件

# 列出所有套件及其版本
jq -r '.packages[] | "\(.name) \(.versionInfo // "unknown")"' sbom.json | sort

找出含有已知漏洞的套件

# 列出具有 CPE 識別碼的套件(漏洞參考)
jq -r '.packages[] | select(.externalRefs[]?.referenceType == "cpe23Type") |
  "\(.name) \(.versionInfo // "unknown") - \(.externalRefs[0].referenceLocator)"' sbom.json

授權資訊

# 顯示已聲明授權的套件
jq -r '.packages[] | select(.licenseDeclared != "NOASSERTION") |
  "\(.name): \(.licenseDeclared)"' sbom.json

分析漏洞掃描資料

基本掃描資訊

# 檢視掃描中繼資料
jq '{
  version: .version,
  tool: .runs[0].tool.driver.name,
  toolVersion: .runs[0].tool.driver.version,
  resultCount: (.runs[0].results | length)
}' vuln-scan.sarif

列出弱點

# 列出所有找到的漏洞
jq -r '.runs[0].results[] |
  "\(.ruleId) - \(.level // "unknown") - \(.message.text)"' vuln-scan.sarif

高風險漏洞

# 僅顯示高嚴重性弱點
jq -r '.runs[0].results[] | select(.level == "error") |
  "\(.ruleId): \(.message.text)"' vuln-scan.sarif

SBOM 可視化工具

命令列工具

CycloneDX SBOM 公用程式

安裝並使用 CycloneDX SBOM 公用程式以進行進階分析:
# 安裝 sbom-utility(如果可用)
go install github.com/CycloneDX/sbom-utility@latest

# Validate SPDX SBOM
sbom-utility validate --input-file sbom.json

# Generate component report
sbom-utility query --input-file sbom.json --select "name,version" --from "packages"

使用 jq 進行自訂分析

# 建立相依性樹狀檢視
jq -r '.packages[] |
  select(.name != null) |
  "\(.name)@\(.versionInfo // "unknown") (\(.supplier // "unknown"))"' sbom.json |
  sort | uniq

網頁式視覺化

SBOM.sh 線上檢視器

  1. 前往 https://sbom.sh/
  2. 上傳你的 sbom.json 檔案
  3. 瀏覽互動式元件與相依關係的視覺化圖表

工件引用探索

尋找簽章工件

# 尋找簽章成品參考
cosign triangulate --type signature \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1

尋找驗證證明檔案

# 尋找證明成品參考
cosign triangulate --type attestation \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1