feat: enterprise supply chain security — cosign keyless signing, SBOM attestation, SLSA provenance, Trivy scanning, Kyverno enforcement, ACT smoke validation - #15
Conversation
…yverno Implements end-to-end software supply chain security for all container images published from this repository. Covers SLSA Build Level 2, NIST SSDF, and CIS Software Supply Chain Security Guide requirements. Changes: - .github/actions/cosign-sign-attest/action.yml — new composite action - .github/workflows/on_release_published.yml — add sign+attest jobs - ops/kyverno/cluster-policies/verify-webgrip-images.yaml — enforcement policy - docs/adrs/0002-supply-chain-security.md — decision record - docs/techdocs/docs/security/ — full security documentation - docs/techdocs/mkdocs.yml — security nav section Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
@copilot What other measures can I take for full security control over the supply chain? Feel free to suggest things |
A few high-impact next steps:
|
I agree with all of those points @copilot For the things that don't directly impact this repo, tell me how to do it |
Great—here’s the fastest way to implement the non-repo controls:
If you want, I can propose a phased rollout order (30/60/90 days) based on implementation effort and risk reduction. |
|
@copilot make ACT stuff for this. I want to make 100% sure this will work. |
Implemented in You now have ACT support for this flow:
Run locally: act workflow_dispatch -W .github/workflows/act_supply_chain_smoke.yml
act release -W .github/workflows/on_release_published.yml -e .github/act/release-published.event.jsonThis gives you strong preflight validation with ACT; final cryptographic/OIDC behavior still must be confirmed in a real GitHub release run. |
|
🎉 This PR is included in version 1.2.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
|
🎉 This PR is included in version 1.2.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
|
🎉 This PR is included in version 1.2.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
|
🎉 This PR is included in version 1.3.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
|
🎉 This PR is included in version 1.1.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
|
🎉 This PR is included in version 1.2.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
|
🎉 This PR is included in version 1.1.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
Summary
This PR implements end-to-end software supply chain security for every container image published from this repository, targeting SLSA Build Level 2 and aligning with NIST SSDF (SP 800-218) and the CIS Software Supply Chain Security Guide.
No long-lived signing keys are required. Everything is driven by GitHub OIDC.
It also adds local ACT smoke-validation support so the supply-chain workflow shape can be validated before running in GitHub-hosted release jobs.
What this adds
🔐 Keyless image signing (cosign + GitHub OIDC)
Every released image is signed using cosign's keyless flow:
https://github.com/webgrip/infrastructure/.github/workflows/on_release_published.yml@refs/tags/<tag>Forging this signature requires compromising GitHub's OIDC infrastructure, not just stealing a secret.
📦 SBOM generation + attestation (Syft + cosign)
Syft generates a full component inventory for every image in two formats:
Both SBOMs are also uploaded as 90-day workflow artifacts.
🏛️ SLSA Build Provenance (GitHub native attestations)
actions/attest-build-provenancerecords SLSA v1.0 Build Provenance in GitHub's attestation store and pushes it to the OCI registry. Verifiable with:🛡️ Vulnerability scanning (Trivy)
Trivy scans every released image for OS and library CVEs:
exit-code: 0) — findings are tracked, not release-blocking🔒 Kyverno cluster enforcement policy
ops/kyverno/cluster-policies/verify-webgrip-images.yamlprovides aClusterPolicyfor the homelab cluster that:Auditmode — switch toEnforceonce all images are signed🧪 ACT local smoke validation
Adds ACT-focused validation support for the signing pipeline:
dry-run: 'true'to skip OIDC signing / registry mutation while still validating flow and outputsreleaseevent payload for local simulationChanged files
.github/actions/cosign-sign-attest/action.ymldry-runmode.github/workflows/on_release_published.yml.github/workflows/act_supply_chain_smoke.yml.github/act/release-published.event.json.actrcREADME.mdops/kyverno/cluster-policies/verify-webgrip-images.yamlClusterPolicyfor homelab-cluster enforcementdocs/adrs/0002-supply-chain-security.mddocs/techdocs/docs/security/index.mddocs/techdocs/docs/security/supply-chain-security.mddocs/techdocs/docs/security/image-signing.mddocs/techdocs/docs/security/sbom-attestations.mddocs/techdocs/docs/security/vulnerability-scanning.mddocs/techdocs/docs/security/kyverno-enforcement.mddocs/techdocs/mkdocs.ymlRequired job permissions
The new signing jobs require these permissions (scoped to the signing job only, not the build job):
Verification after merge
Once a release is published after this PR merges:
Local ACT smoke checks:
Rollout plan for the cluster
ops/kyverno/cluster-policies/verify-webgrip-images.yamlto the homelab cluster inAuditmodekubectl get policyreport -Afor violationsEnforceStandards coverage