SLSA 定义
BuildKit 支持 创建 SLSA 来源证明,用于它运行的构建。
BuildKit 生成的来源证明格式由 SLSA 来源证明格式 定义。
此页面介绍 BuildKit 如何填充每个字段,以及在您生成证明时是否会包含该字段 mode=min
和 mode=max
.
builder.id
对应于 SLSA builder.id
.
包含在 mode=min
和 mode=max
中。
如果可用,builder.id
字段将设置为构建的 URL。
"builder": {
"id": "https://github.com/docker/buildx/actions/runs/3709599520"
},
此值可以使用 builder-id
证明参数设置。
buildType
对应于 SLSA buildType
.
包含在 mode=min
和 mode=max
中。
buildType
字段设置为 https://mobyproject.org/buildkit@v1
可用于确定来源证明内容的结构。
"buildType": "https://mobyproject.org/buildkit@v1",
invocation.configSource
对应于 SLSA invocation.configSource
.
包含在 mode=min
和 mode=max
中。
描述初始化构建的配置。
"invocation": {
"configSource": {
"uri": "https://github.com/moby/buildkit.git#refs/tags/v0.11.0",
"digest": {
"sha1": "4b220de5058abfd01ff619c9d2ff6b09a049bea0"
},
"entryPoint": "Dockerfile"
},
...
},
对于从远程上下文(如 Git 或 HTTP URL)初始化的构建,此对象在 uri
和 digest
字段中定义上下文 URL 及其不可变摘要。对于使用本地前端(例如 Dockerfile)的构建,entryPoint
字段定义了用于初始化构建的前端文件路径(filename
前端选项)。
invocation.parameters
对应于 SLSA invocation.parameters
.
部分包含在 mode=min
中。
描述传递给构建的构建输入。
"invocation": {
"parameters": {
"frontend": "gateway.v0",
"args": {
"build-arg:BUILDKIT_CONTEXT_KEEP_GIT_DIR": "1",
"label:FOO": "bar",
"source": "docker/dockerfile-upstream:master",
"target": "release"
},
"secrets": [
{
"id": "GIT_AUTH_HEADER",
"optional": true
},
...
],
"ssh": [],
"locals": []
},
...
},
以下字段包含在 mode=min
和 mode=max
中
locals
列出了构建中使用的任何本地来源,包括构建上下文和前端文件。frontend
定义了用于构建的 BuildKit 前端的类型。目前,这可以是dockerfile.v0
或gateway.v0
。args
定义了传递给 BuildKit 前端的构建参数。args
对象中的键反映了 BuildKit 收到的选项。例如,build-arg
和label
前缀用于构建参数和标签,而target
键定义了构建的目标阶段。source
键定义了网关前端的来源镜像(如果使用)。
以下字段仅包含在 mode=max
中
secrets
定义了构建期间使用的秘密。请注意,不会包含实际的秘密值。ssh
定义了构建期间使用的 ssh 转发。
invocation.environment
对应于 SLSA invocation.environment
.
包含在 mode=min
和 mode=max
中。
"invocation": {
"environment": {
"platform": "linux/amd64"
},
...
},
BuildKit 目前设置的唯一值是当前构建机器的 platform
。请注意,这并不一定是构建结果的平台,可以从 in-toto
主题字段中确定。
materials
对应于 SLSA materials
.
包含在 mode=min
和 mode=max
中。
定义所有作为构建一部分的外部工件。该值取决于工件的类型
- 包含镜像源代码的 Git 存储库的 URL
- 如果您是从远程 tarball 构建,或使用 Dockerfile 中的
ADD
命令包含的 HTTP URL - 构建期间使用的任何 Docker 镜像
Docker 镜像的 URL 将使用 Package URL 格式。
所有构建材料都将包括工件的不可变校验和。从可变标签构建时,可以使用摘要信息来确定与构建运行时相比,工件是否已更新。
"materials": [
{
"uri": "pkg:docker/alpine@3.17?platform=linux%2Famd64",
"digest": {
"sha256": "8914eb54f968791faf6a8638949e480fef81e697984fba772b3976835194c6d4"
}
},
{
"uri": "https://github.com/moby/buildkit.git#refs/tags/v0.11.0",
"digest": {
"sha1": "4b220de5058abfd01ff619c9d2ff6b09a049bea0"
}
},
...
],
buildConfig
对应于 SLSA buildConfig
.
仅包含在 mode=max
中。
定义构建期间执行的构建步骤。
BuildKit 在内部使用 LLB 定义来执行构建步骤。构建步骤的 LLB 定义在 buildConfig.llbDefinition
字段中定义。
每个 LLB 步骤都是 LLB ProtoBuf API