Software Supply Chain Security for AI-Accelerated Teams: SBOM, SLSA, Provenance, and CI/CD Hardening
A practical guide to software supply chain security for AI-accelerated teams: SBOM, SLSA provenance, signing, isolated builds, CI/CD hardening, and admission policy.
By BoundLayer Engineering Team
BoundLayer is a senior engineering partner for SaaS, fintech, AI automation, cloud infrastructure, legacy modernization, Web3, IoT, GPU computing, and data systems.
AI coding tools have increased the rate at which teams can create and change software. They have not reduced the need to know what reached production, where it came from, who authorized it, and whether the build process could have been altered.
In fact, faster code generation makes those questions more important. More pull requests, more dependencies, more generated configuration, and more automated release actions increase the number of opportunities for a malicious package, leaked credential, compromised build action, or unreviewed artifact to enter the delivery path.
Software supply chain security is the engineering discipline that protects that path from source and dependencies through build, artifact storage, deployment, and runtime. An SBOM is useful evidence, but an inventory alone cannot prove that the deployed artifact came from the reviewed source or that the builder was trustworthy.
This guide explains how to combine SBOMs, SLSA provenance, artifact signing, isolated builds, policy enforcement, and runtime inventory into an operating system for trustworthy software delivery.
Why this matters now
Recent security guidance reflects a practical shift. Organizations have learned that producing a list of dependencies is not the same as controlling how software is built and released.
The current SLSA specification defines a framework for incrementally improving software artifact integrity and provenance. CISA and international partners have also updated the minimum elements for a Software Bill of Materials, while engineering organizations are moving security checks closer to code creation and generating evidence continuously.
AI-generated code adds scale and new input paths, but it does not require a completely separate security program. Treat code proposed by an agent as untrusted change submitted through the same controlled source, review, test, and release process as human-written code.
The central design goal is simple:
Only an authorized, reviewed source revision should produce a deployable artifact, and production should accept only an artifact whose identity and provenance satisfy policy.
Everything else supports that invariant.
Model the complete software supply chain
The supply chain includes more than application dependencies.
A production artifact may depend on:
- source repositories and branch protections;
- developer and automation identities;
- AI coding agents and their tools;
- package registries and lockfiles;
- base container images and operating-system packages;
- CI workflow definitions and third-party actions;
- build runners, caches, and secrets;
- compilers, generators, and build plugins;
- artifact registries and signing systems;
- deployment controllers and infrastructure modules;
- runtime admission policy and workload identity.
An attacker needs to compromise only one trusted path with enough privilege. A secure repository does not help if a mutable third-party CI action can replace the build output. A signed image does not help if the signing identity signs whatever an untrusted runner produces.
Create a data-flow and trust-boundary diagram for the release process. For each transition, identify the actor, credential, input, output, verification, storage, and audit evidence.
Start with the artifact identity
Every release decision should bind to an immutable artifact identifier.
For a container, this is normally the image digest, not a mutable tag such as latest or production. For a package, use its content digest and version. For a serverless bundle, use a cryptographic checksum stored with release metadata.
The artifact digest connects:
- the SBOM describing its contents;
- provenance describing how it was built;
- signatures or attestations from trusted systems;
- vulnerability and policy results;
- the deployment approval;
- the object actually running in production.
If these records are attached only to a branch, build number, or tag that can move, incident response must reconstruct uncertain relationships under pressure.
Deploy by digest. Record the digest in the deployment event and service catalog. Verify the same digest at admission and expose it in runtime inventory.
SBOM: necessary inventory, not a trust guarantee
A Software Bill of Materials describes components included in a software artifact. Common formats include SPDX and CycloneDX.
A useful SBOM can answer:
- Which versions of a library are present?
- Which applications contain a newly disclosed vulnerable component?
- Which licenses and suppliers are represented?
- Which transitive dependencies entered through another package?
- Which image contains an end-of-life runtime?
An SBOM cannot, by itself, prove:
- that the artifact was built from reviewed source;
- that the build runner was not compromised;
- that listed components match the final deployed bytes;
- that a vulnerable function is reachable;
- that a package was obtained from an approved source;
- that a secret was not stolen during the build.
Generate the SBOM from the final artifact whenever possible, not only from a source manifest. Attach it to the immutable artifact digest and sign or attest the association.
Store SBOMs in a searchable inventory. Generating a file that nobody consumes creates compliance output without operational value.
Build provenance answers a different question
Provenance records how an artifact was produced. It can include the builder identity, source repository and revision, build definition, input materials, parameters, and resulting artifact digest.
The SLSA model treats provenance as a claim that a builder produced particular artifacts from particular inputs. Stronger assurance requires more than adding fields to a JSON document; it depends on who generated the claim and whether the build platform prevents the submitter from forging it.
Good provenance lets a verifier ask:
- Did this artifact come from the expected repository?
- Was it built from the approved commit?
- Did an authorized build workflow produce it?
- Was the builder isolated from untrusted jobs?
- Were unexpected parameters or materials used?
- Does the provenance subject match the artifact being deployed?
Provenance should be generated by the build platform, not by a script controlled by the same repository content it is attesting. Otherwise, a compromised build definition can produce a convincing claim about itself.
Signing establishes identity, not safety
Artifact signing proves that a key or identity signed a specific digest. It does not prove that the artifact is secure or that the signer followed an appropriate process.
This distinction prevents a common mistake: automatically trusting anything with a valid signature.
Verification policy should evaluate:
- signer or workload identity;
- expected issuer and audience;
- artifact digest;
- repository and source revision;
- approved build workflow;
- provenance structure and freshness;
- required SBOM and scan attestations;
- environment-specific release approval.
Keyless signing can use short-lived identities issued to an authenticated CI workload, reducing long-lived key management. Traditional KMS or HSM-backed signing may fit controlled enterprise environments. In both cases, protect who can request signatures and separate build from release authority for sensitive systems.
Rotate and revoke trust roots deliberately. Keep verification policy versioned so an old artifact can be evaluated according to the policy in force at deployment and according to current incident-response needs.
Secure the source control boundary
The source repository is a control plane for application code, infrastructure, and CI permissions.
Baseline controls include:
- phishing-resistant MFA for privileged users;
- short-lived automation credentials;
- protected branches and required status checks;
- reviewed CODEOWNERS for sensitive paths;
- signed or otherwise strongly attributed changes where appropriate;
- restricted creation and modification of release tags;
- audit logging exported outside the repository platform;
- detection of unusual token, app, and workflow activity;
- prompt removal of inactive users and integrations.
Treat CI workflow files, dependency manifests, lockfiles, container definitions, infrastructure modules, and security policy as high-impact code. A one-line workflow change can expose every CI secret or replace the artifact after tests pass.
Require focused review for changes under paths such as .github/workflows, build scripts, deployment manifests, and package registry configuration. Do not allow an AI agent to modify those paths and self-approve the result.
Harden dependencies before they reach the build
Dependency security begins at selection, not at vulnerability scanning.
Use deterministic lockfiles and reproducible installation modes. Prevent builds from silently resolving newer versions than those reviewed. Separate public and private package namespaces to reduce dependency-confusion risk.
For high-risk ecosystems, consider an internal proxy or curated registry that:
- allows approved upstream sources;
- scans and quarantines suspicious packages;
- preserves packages needed for reproducible builds;
- records origin and integrity metadata;
- blocks known malicious versions;
- applies organization policy consistently.
Pin CI actions, base images, and build tools to immutable revisions or digests. A version tag maintained by another party is a remote code execution decision inside the build environment.
Automated dependency updates should create reviewable changes with test results, compatibility information, and risk context. They should not bypass normal release policy merely because a scanner generated them.
Isolate the build environment
Build jobs routinely handle source code, package credentials, signing requests, cloud identities, and artifacts. Shared mutable runners create opportunities for one job to affect another.
Prefer ephemeral, isolated workers that are destroyed after one build. Start from a controlled image and minimize preinstalled tools. Separate untrusted pull-request jobs from trusted release jobs.
Important controls include:
- no production credentials in pull-request builds;
- short-lived workload identity instead of static cloud keys;
- network egress limited to required registries and services;
- read-only source input where feasible;
- separate caches by trust level and repository;
- integrity validation for restored cache content;
- memory, disk, and workspace cleanup after execution;
- build logs protected from secret leakage;
- builder updates managed like production infrastructure.
The build job should not possess a general-purpose signing key. It should request an attestation or signature through a controlled service that verifies workload identity and policy.
Isolation is central to higher-assurance provenance because the builder must prevent one tenant or job from influencing another or altering claims.
Design a trusted CI/CD pipeline
A secure release pipeline separates evidence generation from policy evaluation and deployment.
Stage 1: source validation
Verify branch protection, required reviewers, commit identity, and change ownership. Reject builds from unexpected forks or workflows.
Stage 2: deterministic build
Build in an ephemeral environment from locked dependencies and pinned tools. Do not mutate the output after its digest is calculated.
Stage 3: evidence generation
Generate an artifact-level SBOM, provenance, test results, security scan results, and license or policy attestations. Associate every result with the immutable digest.
Stage 4: artifact publication
Push the artifact to an immutable registry with restricted write access, retention, replication, and audit logs. Prevent tag overwrite for released versions.
Stage 5: release policy
An independent control verifies provenance, signer identity, source, tests, vulnerability thresholds, exceptions, and environment approval.
Stage 6: deployment admission
The runtime admits only the approved digest and re-verifies required attestations. Deployment configuration identifies the exact artifact, not a mutable tag.
Stage 7: runtime inventory
The platform records where the digest is running, which service owns it, and which SBOM and release evidence apply.
This architecture turns security metadata into an enforceable release decision rather than a report delivered after deployment.
Vulnerability management needs context
Scanning every dependency creates a large queue of findings. Severity alone is not enough to prioritize remediation.
Useful context includes:
- whether the vulnerable component is in the deployed artifact;
- whether affected code is reachable in the application;
- whether the workload is internet accessible;
- privileges and data available to the process;
- known exploitation and threat intelligence;
- compensating controls;
- availability of a compatible fix;
- business criticality of the service.
VEX can communicate whether a product is affected by a known vulnerability and why. It should be produced from evidence and reviewed policy, not used to dismiss findings without analysis.
Define remediation objectives by risk class. Track exceptions with an owner, rationale, compensating control, and expiry. A permanent “accepted risk” label is an unmanaged vulnerability.
When a critical component issue appears, the organization should be able to query the SBOM inventory, identify running artifacts, map them to owners and exposure, deploy fixes, and confirm removal. That workflow is the practical test of supply chain maturity.
AI-generated code belongs inside the same trust boundary
An AI coding agent can propose source changes, dependencies, workflow configuration, or infrastructure. Its output is not inherently safer or more dangerous than external code, but the volume and autonomy change the control requirements.
Use these boundaries:
- agents work in isolated branches or worktrees;
- repository tokens are scoped to the required project and action;
- agents cannot approve or merge their own changes;
- sensitive path changes require designated human review;
- new dependencies trigger provenance, reputation, and policy checks;
- generated code passes the same tests, SAST, secret, and composition analysis;
- production deployment remains a separate authorized capability;
- tool calls and evidence are recorded without leaking secrets.
Do not attempt to classify code as “AI-written” and apply weaker or stronger policy based only on authorship. Evaluate the change and artifact through deterministic controls.
The workflow patterns in our AI agents for software development guide cover scoped tasks, review, testing, and deployment boundaries. For tool authorization and prompt-injection risk, see our MCP security guide.
Protect CI secrets and cloud access
A compromised build should not automatically become a compromised production account.
Use identity federation from CI to the cloud with short session duration and claims bound to repository, workflow, branch, and environment. Avoid storing long-lived cloud keys in repository secrets.
Separate roles for:
- pull-request validation;
- artifact publication;
- provenance or signing requests;
- staging deployment;
- production deployment;
- emergency rollback.
Each role should have resource-level permissions and conditions. Production access should require a protected environment or external approval based on the organization's risk model.
Secrets needed by a build should be delivered only to trusted jobs, masked in logs, and rotated after suspected exposure. Forked contributions must never receive privileged secrets.
An AWS infrastructure audit should include CI trust policies, artifact registries, KMS permissions, deployment roles, CloudTrail coverage, and unused credentials.
Admission policy closes the build-to-runtime gap
Pipeline checks can be bypassed if operators or automation can deploy an arbitrary image directly.
Kubernetes admission policy, serverless deployment controls, or cloud release gates should verify the artifact at the destination environment.
Policy may require:
- an approved registry;
- deployment by digest;
- valid signature from a trusted issuer;
- provenance from an approved builder;
- source from an allowed organization and repository;
- successful required checks;
- an SBOM attached to the digest;
- no expired exception;
- an environment-specific authorization.
Use audit mode before enforcement to understand existing violations. Then move high-confidence controls to blocking mode. Keep an emergency process, but make it time-bound, strongly authenticated, visible, and reviewed.
The internal platform should make the compliant release path the easiest path. Our internal developer platform guide describes how to package these controls into reusable golden paths.
Observability and incident response
Supply chain controls need operational telemetry.
Monitor:
- changes to CI workflows and branch rules;
- new or unusual repository applications;
- builds using unexpected runners or identities;
- artifact and tag overwrite attempts;
- signature and provenance verification failures;
- deployments outside the normal release system;
- vulnerable-component exposure by running service;
- secret access from build workloads;
- policy exceptions approaching expiry;
- provenance or SBOM coverage by production workload.
Correlate source revision, build run, artifact digest, release, deployment, and runtime service. This chain allows incident responders to determine blast radius without manually joining unrelated systems.
Do not place sensitive build logs and security findings in broadly accessible observability systems. Apply retention, access, and redaction according to the data involved.
For telemetry architecture and cardinality controls, see our OpenTelemetry production guide.
Reproducible builds and hermeticity
A reproducible build produces the same output from the same declared inputs. A hermetic build obtains inputs only from declared, controlled sources.
These properties make tampering easier to detect and reduce hidden environmental dependencies. They can be difficult to achieve fully, especially with timestamps, non-deterministic compilers, network downloads, and platform-specific metadata.
Adopt them incrementally:
- pin toolchains and base images;
- remove undeclared network downloads;
- normalize timestamps and archive ordering;
- declare environment variables and locale;
- compare outputs from independent builds for critical artifacts;
- document unavoidable non-determinism.
Do not delay basic controls while pursuing perfect reproducibility. Immutable artifacts, isolated builders, generated provenance, and admission verification deliver value earlier.
Common failure patterns
Generating an SBOM and never consuming it
An unused SBOM is inventory without control. Connect it to vulnerability response, policy, and runtime ownership.
Signing on the same untrusted runner
If a compromised job controls both artifact and signing key, the signature authenticates the compromise. Separate signing authority and verify workload identity.
Scanning source but deploying different bytes
Attach results to the final artifact digest and prevent post-scan mutation.
Trusting mutable tags and CI actions
Tags can move. Pin external execution dependencies and deploy immutable digests.
Giving every CI job production credentials
Separate untrusted validation, artifact publication, and protected deployment identities.
Blocking releases on noisy severity alone
Unusable gates are bypassed. Combine severity with exploitability, reachability, exposure, and managed exceptions.
Allowing emergency deployment to become normal
Break-glass paths need expiry, alerts, attribution, and retrospective review.
Treating AI agent approval as human review
An agent that writes, reviews, and approves the same change does not provide independent control.
A practical implementation roadmap
Phase 1: inventory and threat model
Map repositories, registries, builders, identities, deployment paths, and production workloads. Identify where untrusted input can gain release authority.
Phase 2: establish immutable identity
Deploy artifacts by digest, protect registry immutability, and connect runtime services to owners and source repositories.
Phase 3: generate and store evidence
Create artifact-level SBOMs and platform-generated provenance. Store them with the artifact and in a searchable inventory.
Phase 4: harden build infrastructure
Move to ephemeral isolation, short-lived cloud identity, pinned build dependencies, protected caches, and separated trust levels.
Phase 5: enforce release and admission policy
Verify signer, provenance, source, builder, required checks, and exceptions before production accepts the digest.
Phase 6: exercise incident response
Simulate a compromised package, CI action, builder credential, and signing identity. Measure time to find deployed exposure, block new releases, revoke trust, rebuild, and verify removal.
Phase 7: improve by measured risk
Add reproducibility, curated dependencies, deeper attestations, reachability analysis, and automated remediation where they reduce demonstrated risk.
Trust the process, then verify the artifact
Software supply chain security is not a collection of scanner outputs. It is an end-to-end control system that binds reviewed source to an immutable artifact, produces trustworthy evidence, and permits deployment only when policy accepts that evidence.
SBOMs provide composition. Provenance provides build history. Signatures provide identity. Isolation protects the builder. Admission policy ensures production receives the artifact that passed the process. Runtime inventory closes the loop during incident response.
BoundLayer designs and implements secure software delivery platforms, including CI/CD hardening, artifact provenance, SBOM generation and consumption, registry controls, cloud workload identity, policy gates, Kubernetes admission, observability, and AI coding-agent boundaries. We can audit an existing pipeline, prioritize the highest-risk trust gaps, and build an incremental supply chain security roadmap without stopping delivery.
Related engineering articles
Workload Identity for Cloud-Native Systems: SPIFFE, SPIRE, mTLS, and Replacing Static Secrets
A practical guide to workload identity with SPIFFE, SPIRE, mTLS, attestation, trust domains, cloud federation, authorization, rotation, and migration from static secrets.
Data Sovereignty Architecture for SaaS and AI on AWS: Residency, Access, Encryption, and Resilience
A practical guide to data sovereignty architecture for SaaS and AI on AWS: residency, regional data planes, access, encryption, recovery, portability, and continuous evidence.
Event-Driven Architecture on AWS: EventBridge, SQS, Kafka, and Reliable Integration Patterns
A practical guide to event-driven architecture on AWS with EventBridge, SQS, Kafka, transactional outbox, idempotency, ordering, retries, replay, and observability.
Can you prove what is running in production?
We audit and harden CI/CD pipelines with artifact provenance, SBOMs, signing, isolated builds, workload identity, policy gates, admission controls, and runtime inventory.