107 lines
10 KiB
Markdown
107 lines
10 KiB
Markdown
---
|
|
title: SLSA provenance — build levels와 in-toto attestation
|
|
source_type: official-doc
|
|
url: https://slsa.dev/spec/v1.0/
|
|
archive_url:
|
|
status: raw
|
|
confidence: high
|
|
tags: [supply-chain, slsa, provenance, in-toto, attestation, ca-skeleton, branch:feature-build-release-supply-chain-contract]
|
|
related_projects: [ca-skeleton-operational-contract]
|
|
related_branches: [feature-build-release-supply-chain-contract, feature-ci-quality-gates-contract, feature-container-runtime-contract]
|
|
created: 2026-05-22
|
|
last_reviewed: 2026-05-27
|
|
---
|
|
|
|
# SLSA provenance — build levels와 in-toto attestation
|
|
|
|
> Layer: `raw/official-docs/` — SLSA v1.0 spec + in-toto attestation spec verbatim 발췌. ca-tmpl supply chain contract 의 build provenance 의무화 결정의 1차 spec 근거.
|
|
|
|
## Parent / 활용 branch (필수)
|
|
|
|
| Branch | 이 자료가 정당화하는 결정 |
|
|
|---|---|
|
|
| [[raw/branch-notes/feature-build-release-supply-chain-contract]] | SLSA provenance attestation 의무화 + 검증 실패 시 deploy block 결정의 spec 근거 |
|
|
| [[raw/branch-notes/feature-ci-quality-gates-contract]] | SLSA provenance attestation 을 CI quality gate 로 채택한 근거 |
|
|
| [[raw/branch-notes/feature-container-runtime-contract]] | container image digest 가 attestation subject 로 사용되는 spec 적합성 |
|
|
|
|
## 컨텍스트 / 왜 저장했는지
|
|
|
|
`feature-build-release-supply-chain-contract` 결정 "SLSA provenance attestation 의무화 (`build.config.source`, `build.invocation`, `materials` 포함). build provenance 검증 실패 시 deploy block."의 spec 근거. ca-tmpl 이 어느 SLSA build level 을 목표로 하는지, materials/invocation 필드가 spec 어디에 정의되어 있는지 raw 로 확보. (필드명 정확도 보강은 별도 `slsa-v1-provenance-schema.md` 참조.)
|
|
|
|
## 출처 / Source
|
|
|
|
- 원본 URL:
|
|
- SLSA v1.0 spec — https://slsa.dev/spec/v1.0/
|
|
- SLSA Build levels — https://slsa.dev/spec/v1.0/levels
|
|
- in-toto attestation spec — https://github.com/in-toto/attestation
|
|
- SLSA Provenance schema — https://slsa.dev/spec/v1.0/provenance
|
|
- 아카이브 URL: (미수집)
|
|
- 저자 / 조직: OpenSSF SLSA WG, in-toto project (CNCF)
|
|
- 발행일: SLSA v1.0 (2023-04 발표, 이후 minor 개정)
|
|
- 마지막 확인일: 2026-05-27
|
|
|
|
## 핵심 인용 / Key quotes (verbatim)
|
|
|
|
> [§Build L1] "Software producer follows a consistent build process so that others can form expectations about what a 'correct' build looks like." + "Provenance exists describing how the artifact was built, including the build platform, build process, and top-level inputs."
|
|
|
|
> [§Build L2] "Build platform runs on dedicated infrastructure, not an individual's workstation, and the provenance is tied to that infrastructure through a digital signature." + "Downstream verification of provenance includes validating the authenticity of the provenance."
|
|
|
|
> [§Build L3] "Build platform implements strong controls to prevent runs from influencing one another, even within the same project." + "Prevent secret material used to sign the provenance from being accessible to the user-defined build steps."
|
|
|
|
> [§Provenance — model] "Provenance [is] the verifiable information about software artifacts describing where, when and how something was produced."
|
|
|
|
> [§Provenance — model] "The `builder.id` identifies this platform, representing the transitive closure of all entities that are [trusted] to faithfully run the build and record the provenance." + "`resolvedDependencies` captures these dependencies, if known" as "unordered collection of artifacts needed at build time."
|
|
|
|
> [§in-toto Statement] "An in-toto attestation is an authenticated, machine-readable statement about a software artifact. … The Statement contains a predicate (e.g., SLSA Provenance) and a list of subjects (artifact digests being attested to)." (in-toto attestation spec)
|
|
|
|
## Claims Extracted / 추출된 주장
|
|
|
|
| Claim ID | Claim (이 자료가 직접 말하는 것) | Evidence quote | Strength | Applies to | Does not prove |
|
|
|---|---|---|---|---|---|
|
|
| SLSA-FW-C1 | SLSA Build L1 = provenance 가 존재하며 build platform / build process / top-level inputs 를 기술 | [§Build L1] "Provenance exists describing how the artifact was built, including the build platform, build process, and top-level inputs." | `official-standard` | SLSA v1.0 채택 build pipeline | L1 만으로 forge 방지 보장된다는 뜻 아님 (L1 = "trivial to bypass or forge" 명시) |
|
|
| SLSA-FW-C2 | SLSA Build L2 = hosted dedicated infrastructure + digital signature 로 provenance tied | [§Build L2] "Build platform runs on dedicated infrastructure, not an individual's workstation, and the provenance is tied to that infrastructure through a digital signature." | `official-standard` | L2 목표 build pipeline (예: GitHub Actions hosted runner + signed provenance) | hosted runner 가 자동으로 L2 라는 뜻 아님 — provenance signing 도 결합 필요 |
|
|
| SLSA-FW-C3 | SLSA Build L3 = strong controls (runs 간 영향 차단) + provenance signing secret 을 user-defined build steps 로부터 격리 | [§Build L3] "Build platform implements strong controls to prevent runs from influencing one another, even within the same project." + "Prevent secret material used to sign the provenance from being accessible to the user-defined build steps." | `official-standard` | L3 목표 build pipeline (hermetic / tamper-resistant builder) | GitHub Actions hosted runner 만으로 L3 도달 가능하다는 뜻 아님 |
|
|
| SLSA-FW-C4 | Provenance 는 software artifact 가 어디서/언제/어떻게 생산되었는지에 대한 verifiable information | [§Provenance — model] "Provenance [is] the verifiable information about software artifacts describing where, when and how something was produced." | `official-standard` | SLSA provenance 생성 일반 | provenance 가 자동으로 signed/authenticated 라는 뜻 아님 — signing 은 별도 |
|
|
| SLSA-FW-C5 | `builder.id` 는 build 를 신뢰 실행하는 entity 들의 transitive closure 를 식별하며, `resolvedDependencies` 는 build time 에 필요한 artifact 의 unordered collection | [§Provenance — model] "The `builder.id` identifies this platform, representing the transitive closure of all entities that are [trusted] to faithfully run the build and record the provenance." + "`resolvedDependencies` captures these dependencies, if known" | `official-standard` | SLSA Provenance v1.0 필드 의미 | `resolvedDependencies` 가 complete 보장된다는 뜻 아님 — "if known" 명시 |
|
|
| SLSA-FW-C6 | in-toto attestation = authenticated, machine-readable statement; Statement 는 predicate + subjects (artifact digests) 로 구성 | [§in-toto Statement] "An in-toto attestation is an authenticated, machine-readable statement about a software artifact. … The Statement contains a predicate (e.g., SLSA Provenance) and a list of subjects (artifact digests being attested to)." | `official-standard` | in-toto attestation 사용하는 모든 SLSA 구현 | DSSE envelope 의 정확한 signing 알고리즘은 본 인용 범위 밖 |
|
|
|
|
### Strength 근거
|
|
|
|
모두 `official-standard` — SLSA 는 OpenSSF/Linux Foundation 의 industry consensus standard. in-toto 는 CNCF graduated project 의 spec.
|
|
|
|
## Usage Boundaries / 적용 경계
|
|
|
|
- **이 자료가 직접 증명하는 것**:
|
|
- `SLSA-FW-C1` ~ `C3`: SLSA Build L1/L2/L3 의 정확한 요구사항 차이
|
|
- `SLSA-FW-C4` ~ `C5`: provenance 의 정의와 `builder.id` / `resolvedDependencies` 필드 의미
|
|
- `SLSA-FW-C6`: in-toto attestation Statement 구조 (predicate + subjects)
|
|
- **이 자료가 증명하지 않는 것**:
|
|
- ca-tmpl 약식 필드명 (`build.config.source`, `build.invocation`, `materials`) 이 spec 필드명과 동일하다는 것 — 실제 spec 필드는 `buildDefinition.externalParameters`, `runDetails.metadata.invocationId`, `buildDefinition.resolvedDependencies` (별도 `slsa-v1-provenance-schema.md` 참조)
|
|
- GitHub Actions hosted runner 가 L3 도달 가능한지 (본 인용은 L3 요구사항만 명시, runner 적합성 평가 X)
|
|
- provenance 만 있으면 supply chain 공격이 완전 차단된다는 보장 (verify policy 가 별도 필요)
|
|
- **내 프로젝트에 적용하려면 추가 확인이 필요한 것**:
|
|
- ca-tmpl GitHub Actions 기반 build pipeline 이 L2 에 도달했는지 (provenance signing + hosted runner 동시 만족 검증)
|
|
- SLSA verifier (slsa-verifier) 의 `--builder-id` / `--source-uri` 검사 동작이 ca-tmpl provenance 와 매칭되는지
|
|
|
|
## 메모 / Notes (내 프로젝트 해석)
|
|
|
|
> 본 섹션은 자료 직접 인용 아님. ca-tmpl 결정 컨텍스트 해석.
|
|
|
|
- ca-tmpl branch 가 명시한 필드 `build.config.source`, `build.invocation`, `materials` 는 SLSA Provenance v1.0 의 `buildDefinition.externalParameters` / `runDetails.builder` / `buildDefinition.resolvedDependencies` 와 매핑. branch note 표현은 약식이므로 wiki/concepts 변환 시 spec 필드명을 따라야 함.
|
|
- Build L3 는 hermetic build + tamper-resistant builder 를 요구. ca-skeleton 단계에서는 GitHub Actions hosted runner 기반 **L2** 가 현실적 목표.
|
|
- in-toto attestation = signing envelope (DSSE) + predicate. Cosign 이 DSSE envelope 을 sign 하므로 SLSA + Cosign 이 한 체인에서 작동.
|
|
- 함정: provenance 만 있고 verify policy 가 없으면 의미 없음. branch note "build provenance 검증 실패 시 deploy block" 이 이를 강제하지만, **검증 정책 문서** 가 별도 branch 에 없으면 누수.
|
|
|
|
## Related / 관련
|
|
|
|
- 같은 주제 다른 official-doc:
|
|
- [[raw/official-docs/slsa-v1-provenance-schema]] (spec 필드명 정확 캡처)
|
|
- [[raw/official-docs/cosign-keyless-identity-verification-policy]] (DSSE envelope signing + identity 매칭)
|
|
- 인용하는 branch:
|
|
- [[raw/branch-notes/feature-build-release-supply-chain-contract]] — SLSA provenance 의무 + verify 실패 시 deploy block
|
|
- [[raw/branch-notes/feature-ci-quality-gates-contract]] — SLSA provenance attestation gate
|
|
- [[raw/branch-notes/feature-container-runtime-contract]] — image digest 가 attestation subject 로 사용됨
|
|
- 인용하는 wiki:
|
|
- [[wiki/concepts/devops-ci-supply-chain-dx]]
|
|
- [[wiki/projects/ca-tmpl/devops-ci-supply-chain-dx]]
|