跳转到主要内容
本文档介绍如何验证由 vantage-packager 镜像发布流水线生成的密码学签名和声明。

概述

vantage-packager 流水线会为每个已发布镜像创建若干安全制品:
  • 容器镜像签名:使用 Cosign 进行的加密签名
  • SPDX SBOM 声明:SPDX 2.3 格式的软件材料清单(SBOM)
  • 漏洞扫描声明:SARIF 格式的安全扫描结果 所有制品均使用同一私钥签名,并可使用相应的公钥进行验证。

前提条件

需要安装以下工具:
  • cosign - 用于验证签名和声明
  • jq - 用于 JSON 解析和分析
  • curl - 用于下载制品(可选)

签名验证

基本验证

使用公钥验证镜像签名:
# 验证签名(跳过私有注册表的透明度日志)
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 软件物料清单(SBOM)声明:
# 验证 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

从证明数据中提取 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

Web 端可视化

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