Chapter 31Lesson 03~180 minutes

Software Supply-Chain Security, SBOMs, Signatures, Provenance, Trusted Agents, and Dependency Controls: Configuration, Design Choices, and Tradeoffs

Choose supply-chain controls according to trust boundaries, verification consumers and operational cost—not tool popularity.

DesignSPDX / CycloneDXKeylessEphemeral buildersDependency pinningPolicy

Learning objectives

  • Choose between SPDX and CycloneDX based on downstream consumers rather than assuming one universal format.
  • Compare key-based and keyless signing by identity lifecycle and verifier policy.
  • Decide when signing belongs on a dedicated ephemeral builder.
  • Place verification at build, publication and promotion boundaries.
  • Explain how lockfiles, checksums and pinned images reduce dependency drift without claiming perfect reproducibility.

1. Choice 1: SBOM format and generator

SPDX and CycloneDX are both established machine-readable formats. The first design question is not “which logo is better?” but “which consumers, regulators, repositories and scanners need which fields and versions?” Syft can emit multiple formats, making it useful for a tool-neutral lab.

Decision Prefer when Tradeoff
CycloneDX JSON Security tooling and dependency/component analysis already consume CycloneDX. Consumer-specific extensions/version support still need validation.
SPDX JSON License/compliance workflows or consumers standardize on SPDX. Different consumers may support different SPDX versions/fields.
Generate both Two required downstream consumers genuinely need different formats. More retained evidence, validation and consistency checks.

Do not silently transform an SBOM between formats and assume semantic equivalence. Record generator/version, input target and output format/version.

2. Choice 2: key-based versus keyless signing

Model Trust anchor Operational strengths Primary risks
Self-managed key Expected public key/KMS key identity Works offline/private; explicit organizational control. Private-key lifecycle, rotation, backup, access and compromise response.
Keyless Sigstore Expected workload/user identity + OIDC issuer + transparency evidence Short-lived signing keys; identity-centric verification. OIDC/workload identity correctness, issuer/identity policy, external availability and CI integration.
Managed KMS/HSM Cloud/HSM key identity and IAM policy Central auditing and hardware/service-backed key protection. Provider/IAM dependency, cost and credential/federation design.

A cryptographically valid signature from an unexpected identity should fail policy. This is why production verification should state who may sign, not merely call a generic verify command.

3. Choice 3: trusted static or ephemeral builders

A static signing agent can be simple and cache-efficient, but long-lived workspaces, credentials and mutable host state accumulate risk. An ephemeral builder can provide a cleaner starting state and narrower lifetime, but only if its image/template, orchestration permissions and secret injection are trusted. Ephemeral does not mean immutable, and containerized does not mean isolated.

Question Static trusted agent Ephemeral trusted agent
State drift Needs patching, cleanup and drift detection. Reduced persistence; template/image provenance becomes critical.
Caches Fast local cache, but poisoning/isolation needs controls. Cache must be external or recreated; easier to scope per workload.
Signing authority Long-lived host may become a high-value target. Short lifetime can reduce exposure if identity is workload-bound.
Forensics More persistent logs/state, potentially noisy. Must export evidence before teardown.

4. Choice 4: where to verify

Verification at build time catches problems early, but it is not enough if evidence can be replaced later. Verification at publication ensures repository input is acceptable. Verification at promotion/deployment ensures the consumer sees the expected digest, signer/builder identity and provenance after storage/transfer.

A strong design commonly verifies more than once at different trust boundaries. These checks are not redundant if different actors control the boundaries.

5. Choice 5: pinning and lock state

Floating dependency versions improve convenience but weaken repeatability and make “same source SHA” insufficient to explain changing outputs. Lockfiles, checksum verification and immutable container/tool digests reduce drift. They do not eliminate all nondeterminism: registries can disappear, build clocks/locales can vary, compilers can differ and dependency metadata can still change outside the lock model.

Input Weak identity Stronger evidence
Source branch main commit SHA plus repository identity
Build image toolchain:latest reviewed digest plus human-readable version
Language dependencies floating ranges lockfile/checksum state retained
Jenkins plugins “current” tested plugin catalog/version set plus advisory review
Shared Library default branch reviewed immutable tag/commit

6. Worked decision: release-signing path

Scenario: public pull requests run tests, internal protected-branch builds create candidate artifacts, and releases are promoted later.

  1. PR agents may generate SBOMs and test evidence but receive no release signing identity.
  2. Protected-branch source is identified by immutable commit SHA and trusted Jenkinsfile/library revision.
  3. A dedicated ephemeral signing builder receives only the candidate digest/bytes and narrowly scoped signing identity.
  4. The artifact, SBOM and provenance are stored together in the release evidence system.
  5. Promotion verifies artifact digest, expected signer/builder identity and provenance predicate before changing repository state.

The crucial separation is that repository code cannot self-assert that it is trusted merely by editing the Jenkinsfile. Job/folder/branch-source policy, agent scheduling controls and signing identity must enforce the trust boundary outside untrusted code.

7. Design anti-patterns

  • Sign the tag: a mutable tag/name is not the artifact bytes. Sign or attest a digest-bound subject.
  • Generate provenance on any agent: untrusted code can manufacture claims. Builder trust is part of provenance trust.
  • One global signing credential: broad scope makes every job a potential release signer.
  • Latest everywhere: floating tool/plugin/image/dependency versions make the evidence chain difficult to reproduce.
  • Archive private keys for recovery: backups and key escrow are specialized secret-management concerns, not build artifacts.
Next

Diagnose broken claims

Lesson 4 injects failures around SBOM interpretation, signer identity, mutable names, untrusted provenance and floating tools, then walks the evidence-first diagnostic order.

Knowledge check

Answer before revealing the explanation.

1. Why might an organization verify signatures both before publication and again before promotion?

2. Does an ephemeral Kubernetes pod automatically qualify as a trusted builder?

3. What is the main operational cost of generating both SPDX and CycloneDX?

4. Why pin Shared Library revisions for release pipelines?

Official references and version notes

Use primary documentation because supply-chain formats, signing defaults and Jenkins security guidance evolve.

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.

Ethereum / ERC-20
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0Send only Ethereum/ERC-20 compatible assets to this address.