SBOM and Provenance Documentation
BridgeBeats generates Software Bill of Materials (SBOM) and provenance attestations for its Docker images to improve supply chain security and transparency.
What are SBOM and Provenance?
Software Bill of Materials (SBOM)
An SBOM is an inventory of the software components, libraries, and dependencies included in a Docker image. It helps you:
- Identify security vulnerabilities in dependencies
- Track licenses and compliance requirements
- Understand the software supply chain
Provenance
Provenance attestations provide verifiable evidence about how, when, and where a Docker image was built. They include:
- Source repository and commit SHA
- Build timestamp and GitHub workflow details
- Build platform and environment information
- The build process used
How BridgeBeats produces these attestations
The build-and-push workflows (docker-publish.yml and publish-caddy-cloudflare.yml) call docker/build-push-action with sbom: true and provenance: mode=max. BuildKit attaches the resulting SBOM and SLSA provenance as in-toto attestations to each image, and the workflow pushes per-architecture images by digest before assembling a multi-arch manifest.
Verify (compliance note): the workflows do not run a separate
cosign signstep. The attestations are BuildKit/in-toto attestations carried with the image in the registry, inspectable withdocker buildx imagetools inspect. They are not Sigstore-signed via cosign keyless signing. The "Using Cosign" section below documents the cosign verification commands, butcosign verify-attestationexpects a cosign-signed attestation; confirm cosign verification against a published image before treating it as a control, or usedocker buildx imagetools inspect(the source-confirmed path) instead.
Accessing SBOM and Provenance
Using Docker CLI (source-confirmed path)
Recent Docker/Buildx releases can view the attestations attached to the image:
# View SBOM for the BridgeBeats image
docker buildx imagetools inspect tsmarvin/bridgebeats:latest --format "{{ json .SBOM }}"
# View provenance for the BridgeBeats image
docker buildx imagetools inspect tsmarvin/bridgebeats:latest --format "{{ json .Provenance }}"
# View SBOM for the Caddy-Cloudflare image
docker buildx imagetools inspect tsmarvin/caddy-cloudflare:latest --format "{{ json .SBOM }}"
# View provenance for the Caddy-Cloudflare image
docker buildx imagetools inspect tsmarvin/caddy-cloudflare:latest --format "{{ json .Provenance }}"
Using Cosign
cosign can verify attestations on signed images:
# Install on macOS (Homebrew)
brew install cosign
# Install on Linux (download binary; verify checksums from GitHub releases)
curl -LO https://github.com/sigstore/cosign/releases/latest/download/cosign-linux-amd64
chmod +x cosign-linux-amd64
sudo mv cosign-linux-amd64 /usr/local/bin/cosign
# Verify and view SBOM
cosign verify-attestation --type https://spdx.dev/Document \
tsmarvin/bridgebeats:latest
# Verify and view provenance
cosign verify-attestation --type https://slsa.dev/provenance/v1 \
tsmarvin/bridgebeats:latest
Verify: these commands succeed only if the image carries cosign-signed attestations. The current workflows produce BuildKit attestations without a cosign signing step, so
cosign verify-attestationmay report no matching signatures. Usedocker buildx imagetools inspect(above) to read the BuildKit SBOM/provenance directly.
Using Docker Scout
Docker Scout can analyze the image for vulnerabilities:
# Enable Docker Scout
docker scout enable
# View CVEs in the BridgeBeats image
docker scout cves tsmarvin/bridgebeats:latest
# View the SBOM
docker scout sbom tsmarvin/bridgebeats:latest
Reading Provenance
Provenance attestations let you confirm:
- Source repository: the image was built from the official repository
- Commit SHA: trace back to the exact source code version
- Build workflow: the build process used
- Build time: when the image was created
Extract and decode the provenance payload:
# Requires jq (apt-get install jq / brew install jq)
docker buildx imagetools inspect tsmarvin/bridgebeats:latest \
--format "{{ json .Provenance }}" | jq '.payload' | base64 -d | jq
Look for fields such as:
builder.id: the GitHub Actions workflow that built the imagemetadata: build invocation and completeness indicatorsmaterials/buildDefinition: source repository and commit information
Verify: exact field names depend on the SLSA provenance version BuildKit emits. Inspect the decoded payload against the SLSA provenance spec for your build.
SBOM Format
BuildKit emits the SBOM in SPDX format, which includes:
- Package names and versions
- Package licenses
- Dependency relationships
- File checksums
CI/CD Integration
SBOM and provenance attestations are generated for:
- Pushes to
main(taggedlatest) - Pushes to
develop(taggeddevelop) - Pull requests (tagged
pr-<number>, for testing)
Version tags (v*.*.*) trigger the application image workflow as well.
Workflows with SBOM/Provenance
docker-publish.yml — BridgeBeats application image
- Image:
tsmarvin/bridgebeats - Platforms:
linux/amd64,linux/arm64 - Triggers: push to
main/develop,v*.*.*tags, and pull requests
- Image:
publish-caddy-cloudflare.yml — Caddy with Cloudflare DNS
- Image:
tsmarvin/caddy-cloudflare - Platforms:
linux/amd64,linux/arm64 - Triggers: changes to
containers/Dockerfile.caddyor the workflow file onmain/develop, pull requests, and manual dispatch
- Image:
Security Best Practices
- Verify before use: inspect attestations before deploying images in production
- Monitor vulnerabilities: use Docker Scout or a similar tool to scan the SBOM for known CVEs
- Track dependencies: review the SBOM to understand your supply chain
- Audit the build: use provenance to confirm images come from the official workflow
Troubleshooting
Attestations Not Found
If attestations are missing:
- Ensure you are using an image built after SBOM/provenance was enabled
- Use a recent Docker/Buildx release that can read attestations
- Verify the image name and tag are correct
Verification Failures
If verification fails:
- Confirm the image was built through the official GitHub Actions workflow
- Update your verification tools to the latest version
- If using cosign, remember the current workflows produce BuildKit attestations without a cosign signature — prefer
docker buildx imagetools inspect
Additional Resources
- Docker BuildKit Attestations
- SLSA Provenance Specification
- SPDX Specification
- Sigstore Cosign
- Docker Scout Documentation
Questions?
For questions or issues related to SBOM and provenance:
- Check the Issues page
- Review the GitHub Actions workflow logs
- Open a new issue with details about your verification attempt