Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Provable Supply Chain Demo

A live demo showing how to make a software supply chain provable — signing, attestation, and SLSA provenance — for teams that have to answer to auditors.

The story in one line: move from "trust us" to "verify it yourself", and make the deploy pipeline refuse to run anything that can't prove where it came from.

Prerequisites

  • Docker running
  • cosign v3.x (the CLI changed at v3 — v2-era blog syntax will fail), syft, jq
  • For the CI act: this repo pushed to GitHub with Actions enabled

Runbook (~25–30 min)

demo/00-setup.sh          # before the audience arrives: registry + keypair
demo/01-unprovable.sh     # Act 1: ship an artifact the usual way; the auditor's 4 questions
demo/02-sign-and-tamper.sh # Act 2: sign, verify, Rekor; tamper → verification fails
demo/03-attest-sbom.sh    # Act 3a: SBOM as a *signed attestation* bound to the digest
#  Act 3b: switch to the browser — GitHub Actions run of release.yml
demo/04-deploy-gate.sh    # Act 4: deploy gate; unsigned image is blocked (fail closed)
demo/99-reset.sh          # re-arm for the next run (--full for a clean slate)

Set DEMO_NONINTERACTIVE=1 to rehearse without the "press enter" pauses.

Act 3b — the CI half (browser, not terminal)

Open the latest release workflow run. Show:

  1. Keyless signing — cosign sign with no key anywhere. The workflow's OIDC identity (repo, ref, workflow) goes into a short-lived certificate from Fulcio. Nothing to leak, rotate, or offboard.
  2. SLSA provenance — actions/attest-build-provenance emits a statement signed by the build platform: source commit, builder, build parameters. The developer never touches it — that's the point.
  3. The deploy-gate job — verifies the signature identity (only images signed by this repo's workflow pass) and the provenance (gh attestation verify) before the deploy step is reachable.

One-command verification an auditor could run themselves:

gh attestation verify oci://ghcr.io/spiculedata/sigstore-demo:latest --owner spiculedata

And the public evidence trail: search the digest at https://search.sigstore.dev.

Mapping to SLSA levels

Level Requirement (short form) Where the demo shows it
L1 Provenance exists provenance JSON in the workflow run
L2 Provenance is signed by a hosted build platform attest-build-provenance + gh attestation verify
L3 Hardened builder; provenance forgeable only by the platform discussed: GitHub's reusable SLSA3 builders / slsa-github-generator are the upgrade path

Why this matters in regulated / acquisition contexts

  • US EO 14028 / NIST SSDF (SP 800-218) — federal suppliers must attest to secure development practices; SBOMs and provenance are the evidence.
  • EU Cyber Resilience Act — manufacturers must identify and document components (SBOM) and demonstrate integrity of updates.
  • Vendor due diligence / M&A — "show me your SBOM and build provenance" is now a standard questionnaire line. A signed, machine-verifiable answer beats a PDF of good intentions.
  • Audit posture — Rekor's append-only transparency log gives auditors an independent record of every signing event, not one you could quietly edit.

Talking points per act

  • Act 1: tags are mutable pointers; digests are facts. Everything from here on is pinned to a digest.
  • Act 2: a signature answers "who vouched for this exact content?" The tamper demo is the visceral moment — one byte breaks it.
  • Act 3: an SBOM file proves nothing; a signed attestation bound to the digest does. Provenance is the build system vouching, not a person.
  • Act 4: the gate asks "can you prove you're ours?", not "are you on a blocklist?" No proof → no deploy. Same concept scales to a Kubernetes admission controller (Sigstore policy-controller, Kyverno) unchanged.

About

Live demo: provable software supply chain — cosign, attestations, SLSA, fail-closed deploys

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages