镜像认证存储
Buildkit 支持创建和附加证明以构建构件。这些 证明可以从构建过程中提供有价值的信息, 包括但不限于:SBOM、SLSA Provenance、构建日志等。
本文档介绍了当前用于存储证明的自定义格式, 旨在与当今当前的 Registry 实施兼容。 将来,我们可能支持以其他格式导出证明。
证明作为清单对象存储在 image 索引中,类似于 样式添加到 OCI 对象。
性能
认证清单
认证清单附加到根镜像索引对象,位于 单独的 OCI 镜像清单。 每个证明清单可以包含多个证明 blob、 清单中的所有证明都适用于单个平台 清单。标准 OCI 和 Docker 清单的所有属性将继续 应用。
镜像描述符将指向有效的镜像配置
但是,它不会包含特定于认证的详细信息,并且应该
忽略,因为它仅用于兼容性目的。config
中的每个镜像层都将包含单个证明 blob 的描述符。每个层的 将是
根据其内容设置,以下之一:layers
mediaType
application/vnd.in-toto+json
(目前是唯一支持的选项)指示 in-toto 证明 blob
任何未知的 s 都应该被忽略。mediaType
为了帮助证明遍历,可以在每个 图层描述符:
in-toto.io/predicate-type
如果随附的证明是 in-toto,则将设置此注释 attestation (目前是唯一支持的选项)。注释将 设置为包含与属性相同的值 在证明中。
predicateType
如果存在,此注释可用于查找特定的证明 他们正在寻找以避免拉动其他人的内容。
证明 Blob
每个层的内容将是一个 blob,具体取决于其 .mediaType
application/vnd.in-toto+json
blob 内容将包含完整的 in-toto 证明语句:
{ "_type": "https://in-toto.io/Statement/v0.1", "subject": [ { "name": "<NAME>", "digest": {"<ALGORITHM>": "<HEX_VALUE>"} }, ... ], "predicateType": "<URI>", "predicate": { ... } }
证明清单描述符
认证清单附加到根镜像索引
在 key 中,在所有原始 runnable 清单之后。都
标准 OCI 和 Docker 清单描述符的属性将继续适用。manifests
防止容器运行时意外拉取或运行镜像
在清单中描述,证明清单的属性
将设置为 ,如下所示:platform
unknown/unknown
"platform": {
"architecture": "unknown",
"os": "unknown"
}
为了帮助遍历索引,将在 清单描述符 descriptor:
vnd.docker.reference.type
此注释描述构件的类型,并将进行设置 自。如果指定了任何其他值,则整个 manifest 的 intent 请求。
attestation-manifest
vnd.docker.reference.digest
此注解将包含镜像索引中对象的摘要,该索引 证明清单引用。
如果存在,此注释可用于查找匹配的证明 manifest (清单) 的 manifest (所选镜像清单)。
例子
显示附加到 linux/amd64
镜像的 SBOM 证明的示例
镜像索引 (sha256:94acc2ca70c40f3f6291681f37ce9c767e3d251ce01c7e4e9b98ccf148c26260
):
此镜像索引定义两个描述符:一个 AMD64 镜像和该镜像的证明清单。sha256:23678f31..
sha256:02cb9aa7..
{
"mediaType": "application/vnd.oci.image.index.v1+json",
"schemaVersion": 2,
"manifests": [
{
"mediaType": "application/vnd.oci.image.manifest.v1+json",
"digest": "sha256:23678f31b3b3586c4fb318aecfe64a96a1f0916ba8faf9b2be2abee63fa9e827",
"size": 1234,
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.oci.image.manifest.v1+json",
"digest": "sha256:02cb9aa7600e73fcf41ee9f0f19cc03122b2d8be43d41ce4b21335118f5dd943",
"size": 1234,
"annotations": {
"vnd.docker.reference.digest": "sha256:23678f31b3b3586c4fb318aecfe64a96a1f0916ba8faf9b2be2abee63fa9e827",
"vnd.docker.reference.type": "attestation-manifest"
},
"platform": {
"architecture": "unknown",
"os": "unknown"
}
}
]
}
认证清单 (sha256:02cb9aa7600e73fcf41ee9f0f19cc03122b2d8be43d41ce4b21335118f5dd943
):
此证明清单包含一个证明,该证明是包含“https://spdx.dev/Document”谓词的 in-toto 证明,表示它正在为镜像定义 SBOM。
{
"mediaType": "application/vnd.oci.image.manifest.v1+json",
"schemaVersion": 2,
"config": {
"mediaType": "application/vnd.oci.image.config.v1+json",
"digest": "sha256:a781560066f20ec9c28f2115a95a886e5e71c7c7aa9d8fd680678498b82f3ea3",
"size": 123
},
"layers": [
{
"mediaType": "application/vnd.in-toto+json",
"digest": "sha256:133ae3f9bcc385295b66c2d83b28c25a9f294ce20954d5cf922dda860429734a",
"size": 1234,
"annotations": {
"in-toto.io/predicate-type": "https://spdx.dev/Document"
}
}
]
}
镜像配置 (sha256:a781560066f20ec9c28f2115a95a886e5e71c7c7aa9d8fd680678498b82f3ea3
):
{
"architecture": "unknown",
"os": "unknown",
"config": {},
"rootfs": {
"type": "layers",
"diff_ids": [
"sha256:133ae3f9bcc385295b66c2d83b28c25a9f294ce20954d5cf922dda860429734a"
]
}
}
图层内容 (sha256:1ea07d5e55eb47ad0e6bbfa2ec180fb580974411e623814e519064c88f022f5c
):
包含 SBOM 数据的证明正文,其中以 SPDX 格式列出构建期间使用的软件包。
{
"_type": "https://in-toto.io/Statement/v0.1",
"predicateType": "https://spdx.dev/Document",
"subject": [
{
"name": "_",
"digest": {
"sha256": "23678f31b3b3586c4fb318aecfe64a96a1f0916ba8faf9b2be2abee63fa9e827"
}
}
],
"predicate": {
"SPDXID": "SPDXRef-DOCUMENT",
"spdxVersion": "SPDX-2.2",
...