6.2 镜像安全:从签名到漏洞扫描,打造可信软件供应链

1. 引言:镜像是生产的“载体”

将“可信”的定义写进镜像:可追溯(来源确定)、可验证(签名验签)、可评估(SBOM+扫描)。


2. SBOM:先列清单,再谈风控

2.1 生成 SBOM(Syft)

syft packages harbor.example.com/prod/payment:v1.2.3 -o cyclonedx-json > sbom.json
  • 建议输出 CycloneDX 格式;
  • sbom.json 作为流水线工件归档,关联构建号与提交 SHA。

2.2 漏洞评估(Grype)

grype sbom:sbom.json --fail-on high
  • 以严重级别(critical/high)作为门禁阈值;
  • 结合“允许列表”实现渐进整改。

3. 签名与验签:cosign/Notary v2

3.1 cosign 签名

COSIGN_EXPERIMENTAL=1 cosign sign \
  --key cosign.key \
  harbor.example.com/prod/payment@sha256:abcd...
  • 推荐基于 OIDC/KMS 的“无密钥签名”(keyless),降低密钥保管风险。

3.2 签名与 SBOM 绑定(OCI 附件)

  • cosign/ORAS 支持将 SBOM、签名作为 OCI Artifact 附件与镜像摘要锚定;
  • 生产验收可通过摘要(不可变)进行关联校验。

4. CI 流水线集成(GitHub Actions 示例)

- name: Build image
  uses: docker/build-push-action@v4
  with:
    push: true
    tags: harbor.example.com/prod/payment:${{ github.sha }}

- name: Generate SBOM
  run: syft packages harbor.example.com/prod/payment:${{ github.sha }} -o cyclonedx-json > sbom.json

- name: Scan vulnerabilities
  run: grype sbom:sbom.json --fail-on high

- name: Cosign sign
  env:
    COSIGN_EXPERIMENTAL: 1
  run: cosign sign -y harbor.example.com/prod/payment:${{ github.sha }}

5. 准入阶段验签与来源限制(Kyverno 示例)

5.1 强制签名验签

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: verify-image-signature
spec:
  validationFailureAction: Enforce
  rules:
  - name: verify-cosign
    match:
      resources:
        kinds: [Pod]
    verifyImages:
    - imageReferences:
      - "harbor.example.com/prod/*"
      attestors:
      - entries:
        - keys:
            publicKeys: |
              -----BEGIN PUBLIC KEY-----
              ...
              -----END PUBLIC KEY-----

5.2 限制镜像来源仓库

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: enforce-registry
spec:
  validationFailureAction: Enforce
  rules:
  - name: allow-only-harbor
    match:
      resources:
        kinds: [Pod]
    validate:
      message: "Only images from harbor.example.com are allowed"
      pattern:
        spec:
          containers:
          - image: "harbor.example.com/*"

6. 运营指标

  • 签名覆盖率:生产运行镜像中已签名比例;
  • 高危暴露窗口:从发现到修复的时长;
  • SBOM 完整率:产出/归档/可检索比例;
  • 禁止策略命中率与放行例外比。

7. 总结

可信镜像 = 不可变摘要 + 可验证签名 + 可评估 SBOM + 可度量门禁。将其写进流水线与准入控制,才是真正“可证明的安全”。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐