Artifact Attestations, SBOM Provenance, Verification, and SLSA-Oriented Builds: Configuration, Design Patterns, and Trade-Offs
Choose checksums, provenance, SBOMs, artifact storage, trusted builders and verification policy according to the assurance problem each mechanism actually solves.
Learning objectives
- Select checksum, provenance, SBOM and artifact storage controls according to distinct security questions.
- Choose identity constraints narrow enough for production consumers without making routine upgrades impossible.
- Explain when a protected reusable workflow can become a stronger trusted-builder boundary.
- Compare public transparency evidence with private Enterprise Cloud attestation behavior and offline verification.
- Apply SLSA-oriented controls without overstating assurance or compliance.
1. Start with the question, not the feature
Supply-chain controls become confusing when teams add “signing,” “SBOM” and “SLSA” as checklist words. Begin with the decision that a consumer must make. If the question is “are these bytes unchanged?” use a digest. If it is “which approved workflow produced these bytes?” require provenance plus identity policy. If it is “what components does the producer claim are present?” require an SBOM predicate. If the question is “where can I download the binary?” choose an artifact/package/release store.
2. Mechanism decision table
| Mechanism | Best answer | Trust prerequisite | Observable evidence |
|---|---|---|---|
| SHA-256 checksum | Are these exact bytes unchanged? | Trusted channel for expected digest if used alone. | Digest equality. |
| Signed provenance attestation | Which authenticated builder/source produced this digest? | Trusted signing root + constrained builder identity. | Verified attestation + subject digest + identity. |
| SBOM attestation | Which inventory did the authenticated builder bind to the subject? | Trusted identity + SBOM generation process. | Verified SBOM predicate. |
| Actions artifact/release/package | Where are bytes stored/distributed? | Repository/storage access policy. | Artifact/release/package record and content digest. |
| Vulnerability scanner | Which known issues match inventory/bytes? | Fresh advisory data + scan configuration. | Scan findings; separate from SBOM signature. |
3. Verification policy: owner-only is convenient; exact signer is stronger
The GitHub CLI requires at least an owner or repository boundary. Production policy should usually be narrower than “anything signed anywhere in this organization.” Add the expected repository, signer workflow and source ref where those values are stable and meaningful. For reusable-workflow builders, verify the reusable workflow identity as the signer using the CLI's signer controls.
Overly broad identity conditions increase the blast radius of a compromised workflow. Overly rigid conditions can make legitimate migrations painful. Treat policy changes as reviewed code and record why each accepted signer exists.
4. Reusable workflow as a trusted-builder boundary
A normal repository workflow can be modified by anyone allowed to change that workflow. For higher assurance, organizations can centralize build and attestation logic in a protected reusable workflow, pin callers to reviewed releases/commits and verify that reusable workflow as the signer. This reduces the number of locations that can alter the build/attestation implementation.
That pattern is stronger only if the reusable workflow itself is protected, its inputs cannot subvert the build boundary, its action dependencies are immutable, and caller-provided data cannot replace trusted builder code. Centralization without change control is not a trusted builder.
5. Provenance versus SBOM: complementary, not substitutes
Provenance carries build identity and source/build metadata. SBOM carries component inventory. A release pipeline often needs both, because a consumer may first verify “this came from our approved release workflow” and then ask “does this build contain component X?” Neither claim replaces vulnerability scanning or policy evaluation.
6. Public versus private attestation infrastructure
| Repository | Availability | Signing/transparency model | Design consequence |
|---|---|---|---|
| Public | Current GitHub plans | Sigstore Public Good + public transparency log | Good mandatory/free training path; evidence is publicly observable. |
| Private/internal | GitHub Enterprise Cloud | GitHub private Sigstore; no public transparency log | Enterprise access and private verification context required. |
| GitHub Enterprise Server |
Not supported by current
actions/attest guidance
|
No GitHub-hosted artifact-attestation service | Use an alternative signing/provenance architecture; do not copy GitHub.com YAML blindly. |
7. Artifact upload versus attestation versus registry flow
For a file release, you can attest local bytes and later upload those exact bytes to a release/package channel. For OCI images, the subject is normally an immutable image digest rather than a mutable tag. The action can also support registry-oriented attestation flows, but registry authentication and package permissions are additional side effects and are outside this chapter's mandatory lab.
Do not let a convenience tag such as latest become the
trust anchor. Resolve and verify immutable digests.
8. Permissions belong to the attestation job, not the whole pipeline by habit
The build/attestation job needs OIDC and attestation write
authority. That does not mean every lint/test job needs it. Scope
id-token: write and attestation permissions to the job
that performs signing. If source checkout is needed, add
contents: read; do not grant repository write scopes
merely because the action creates signed evidence.
9. High-assurance provenance still depends on the workflow supply chain
A perfectly signed provenance statement can faithfully say that a build ran a compromised mutable action. Chapter 21 therefore remains part of Chapter 23: pin external actions by full commit SHA, review release provenance and keep the runner/toolchain assumptions observable. Attestation raises confidence in which build happened; it does not make an unsafe build definition safe.
10. Online versus offline verification
Online gh attestation verify can fetch associated
attestations from GitHub. For disconnected environments, GitHub
documents downloading the attestation bundle and trusted roots ahead
of time, then verifying offline. Offline verification is a
distribution/operations design choice; the policy identity
constraints should remain equivalent.
11. SLSA-oriented control map
| Control | How this chapter contributes | Residual requirement |
|---|---|---|
| Immutable subject | Digest-bound attestation | Prevent rebuilding/substitution after attestation. |
| Authenticated builder | OIDC/Sigstore signer identity | Protect workflow/reusable builder and dependencies. |
| Provenance availability | GitHub attestation store/bundle | Retain/distribute evidence with release process. |
| Consumer verification | Repo/signer/ref/predicate policy | Actually enforce rejection on mismatch. |
| Build isolation | GitHub-hosted/trusted builder choices | Threat model runner and untrusted inputs. |
Do not convert “SLSA-oriented” into a marketing claim. A single attestation step is evidence for a control, not proof that an entire build platform satisfies every requirement of a SLSA level.
12. Worked scenario: release CLI binary
A team publishes a cross-platform CLI. It chooses a central protected reusable workflow, pins all external actions by SHA, builds each platform artifact once, computes digests, creates provenance + SBOM attestations, and publishes the same bytes. Consumers verify repository + signer workflow + expected source ref before installation. A separate vulnerability process evaluates the SBOM. Deployment/release approval consumes these results but remains an independent governance state.
13. Lesson summary
Select provenance, SBOM, storage and verification controls by the questions they answer. Strong assurance comes from composing immutable inputs, protected builders, narrow signing permissions and explicit consumer identity policy—not from any one badge or signature.
Knowledge check
When is owner-only verification too broad?
When multiple repositories/workflows under that owner should not all be trusted to produce the artifact. Add repository/signer/ref constraints.
Why can a signed SBOM still be wrong?
Signing authenticates who made the claim and the subject binding; the workflow that generated the inventory can still be buggy or compromised.
What is the advantage of a protected reusable workflow as signer?
It centralizes and constrains who can change the build/attestation implementation, enabling a narrower trusted-builder identity.
Does an Actions artifact replace a provenance attestation?
No. Storage answers where bytes are retained; provenance answers who/what build identity produced their digest.
Why pin actions inside an attested build?
Otherwise the provenance can be authentic while the build implementation silently changes through mutable dependencies.
Official references and version notes
- Artifact attestations concept — GitHub model for Sigstore-backed attestations, public/private signing roots and verification policy.
- Use artifact attestations — Current generation, permissions, binary/container and verification guidance.
- actions/attest v4.2.2 — Current consolidated GitHub action for provenance, SBOM and custom attestations.
- GitHub CLI attestation verify — Current identity, predicate, source-ref and signer-workflow verification controls.
- Verify attestations offline — Bundle and trusted-root workflow for disconnected verification.
- SLSA-oriented GitHub guidance — GitHub guidance connecting attestations and reusable workflows to stronger SLSA-oriented build controls.
- Workflow permissions — Current id-token, attestations, artifact-metadata and contents permission syntax.
Keep the academy open
Support free, practical DevOps education.
Every lesson is designed to remain readable in a browser, downloadable from GitHub, and usable without a paid learning platform. Contributions help expand and maintain the curriculum.
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0Send only Ethereum/ERC-20 compatible assets to this
address.