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