Problemet
Supply chain-angrep har blitt en av de mest effektive angrepsvektorene. SolarWinds, Codecov, log4j — alle utnyttet tillit i leveringskjeden. Vi ville sikre at alt som kjører i produksjon kan verifiseres tilbake til en kjent kilde.
Vår tilnærming
Vi implementerte en “zero trust”-leveringskjede med fire lag:
1. Kodesignering
Alle commits signeres med SSH-nøkler, verifisert av Forgejo. Unsigned commits kan ikke merges til main.
2. Container-signering med Cosign
Hver container-image signeres i CI-pipelinen:
cosign sign --key cosign.key ghcr.io/offcenit/app:${TAG}
Kubernetes admission controller (Kyverno) avviser alle usignerte images.
3. SBOM (Software Bill of Materials)
Vi genererer SBOM for hvert image med Syft:
syft ghcr.io/offcenit/app:${TAG} -o spdx-json > sbom.json
cosign attest --predicate sbom.json --type spdxjson \
ghcr.io/offcenit/app:${TAG}
4. Rekor transparency log
Alle signaturer og attestasjoner logges i en Rekor-instans. Dette gir oss en uforanderlig audit trail.
Verifisering i praksis
Når en Pod skal starte i klusteret:
- Kyverno sjekker at imaget er signert med vår nøkkel
- Kyverno verifiserer at en SBOM-attestasjon eksisterer
- Signaturen verifiseres mot Rekor-loggen
- Podden starter — eller avvises med en tydelig feilmelding
Resultater
- 100% av produksjons-images er signert
- Automatisk SBOM for alle leveranser
- Verifiserbar kjede fra Git-commit til kjørende Pod
- Compliance-dokumentasjon genereres automatisk fra attestasjoner
Neste steg
Vi jobber med å utvide dette til en tjeneste for kundene våre — “Signaturkjede” — som er i pilot nå. Målet er at enhver kunde skal kunne verifisere at det som kjører i deres namespace er nøyaktig det de forventer.
Supply chain security er ikke et prosjekt med en sluttdato. Det er en kontinuerlig prosess der hver forbedring reduserer angrepsflaten. Men med riktig verktøy og praksis er det overraskende overkommelig.