构建证明
生成证明描述镜像的生成方式及其包含的内容。这 证明由 BuildKit 在构建时创建,并附加到 final image 作为元数据。
证明的目的是使检查镜像并查看 它来自哪里,谁创建它,如何创建它,以及它包含什么。这使得 您可以就镜像如何影响供应链安全做出明智的决策 的 APPLICATION 中。它还支持使用策略引擎进行验证 基于您定义的策略规则的镜像。
有两种类型的构建注释可用:
- 软件物料清单 (SBOM):镜像 包含或用于构建镜像的 API 的 API 中。
- Provenance:镜像是如何构建的。
鉴证目的
开源和第三方软件包的使用比以往任何时候都更加广泛 以前。开发人员共享和重用代码,因为它有助于提高生产力, 使团队能够更快地创建更好的产品。
导入和使用在其他地方创建的代码而不对其进行审查会引入 严重的安全风险。即使您确实审查了您使用的软件,新的 零日漏洞经常被发现,需要开发团队 采取措施修复它们。
通过构建证明,您可以更轻松地查看图片的内容及其位置 来自。使用证明来分析并决定是否使用镜像,或者 查看您正在使用的镜像是否暴露于漏洞中。
创建证明
当您使用docker buildx build中,您可以添加 Attestation
records 添加到生成的镜像中--provenance和--sbom选项。
您可以选择添加 SBOM 或来源认证类型,或同时添加两者。
$ docker buildx build --sbom=true --provenance=true .
注意
默认镜像存储不支持证明。如果您使用的是 default 镜像存储,并使用默认的
docker司机 或使用其他驱动程序和--loadflag 的 Flag,则证明是 失去。要确保保留证明,您可以:
- 使用
docker-containerdriver 的--push标志将镜像推送到 注册中心。- 启用 containerd 镜像存储。
注意
默认情况下,出处证明处于启用状态,其中
mode=min选择。 您可以使用--provenance=false旗 或通过设置BUILDX_NO_DEFAULT_ATTESTATIONS环境变量。使用
--provenance=trueflag 将出处证明与mode=max默认情况下。有关更多详细信息,请参阅 Provenance attestation 。
BuildKit 在构建镜像时生成证明。证明 记录以 in-toto JSON 格式包装并附加到镜像 index 的 intent 值。
存储
BuildKit 以 in-toto 格式生成证明, 如 In-Toto 框架所定义, Linux Foundation 支持的标准。
证明作为 image 索引中的清单附加到 images。数据记录 的证明存储为 JSON blob。
由于证明作为清单附加到镜像,因此这意味着您可以 检查注册表中任何镜像的证明,而无需拉取 整个镜像。
所有 BuildKit 导出器都支持证明。这local和tar无法保存
对镜像清单的证明,因为它会输出
文件或 tarball,而不是镜像。相反,这些导出器会编写
对导出根目录中的一个或多个 JSON 文件的证明。
以下示例显示了 SBOM 的截断 in-toto JSON 表示形式 证明。
{
  "_type": "https://in-toto.io/Statement/v0.1",
  "predicateType": "https://spdx.dev/Document",
  "subject": [
    {
      "name": "pkg:docker/<registry>/<image>@<tag/digest>?platform=<platform>",
      "digest": {
        "sha256": "e8275b2b76280af67e26f068e5d585eb905f8dfd2f1918b3229db98133cb4862"
      }
    }
  ],
  "predicate": {
    "SPDXID": "SPDXRef-DOCUMENT",
    "creationInfo": {
      "created": "2022-12-15T11:47:54.546747383Z",
      "creators": ["Organization: Anchore, Inc", "Tool: syft-v0.60.3"],
      "licenseListVersion": "3.18"
    },
    "dataLicense": "CC0-1.0",
    "documentNamespace": "https://anchore.com/syft/dir/run/src/core-da0f600b-7f0a-4de0-8432-f83703e6bc4f",
    "name": "/run/src/core",
    // list of files that the image contains, e.g.:
    "files": [
      {
        "SPDXID": "SPDXRef-1ac501c94e2f9f81",
        "comment": "layerID: sha256:9b18e9b68314027565b90ff6189d65942c0f7986da80df008b8431276885218e",
        "fileName": "/bin/busybox",
        "licenseConcluded": "NOASSERTION"
      }
    ],
    // list of packages that were identified for this image:
    "packages": [
      {
        "name": "busybox",
        "originator": "Person: Sören Tempel <soeren+alpine@soeren-tempel.net>",
        "sourceInfo": "acquired package info from APK DB: lib/apk/db/installed",
        "versionInfo": "1.35.0-r17",
        "SPDXID": "SPDXRef-980737451f148c56",
        "description": "Size optimized toolbox of many common UNIX utilities",
        "downloadLocation": "https://busybox.net/",
        "licenseConcluded": "GPL-2.0-only",
        "licenseDeclared": "GPL-2.0-only"
        // ...
      }
    ],
    // files-packages relationship
    "relationships": [
      {
        "relatedSpdxElement": "SPDXRef-1ac501c94e2f9f81",
        "relationshipType": "CONTAINS",
        "spdxElementId": "SPDXRef-980737451f148c56"
      },
      ...
    ],
    "spdxVersion": "SPDX-2.2"
  }
}要深入了解有关如何存储证明的具体信息,请参阅镜像证明存储 (BuildKit)。
下一步
详细了解可用的证明类型及其使用方法: