kaniko
kaniko is a pipeline-driven build of chainguard-forks/kaniko, the fork of the daemonless kaniko image builder, packaged for GitLab Runner. I build it at GitLab Public Sector, the group behind egress, manifold and bulkhead, on the pattern of GitLab’s own CNG images: an upstream tag compiled in a UBI9 builder, shipped from scratch. Six images a release: standard, debug and warmer, in standard-library and FIPS 140-3 crypto, each cosign-signed through the job’s GitLab OIDC identity with a CycloneDX SBOM, SLSA v1.0 provenance and OpenVEX attached.
- The builder clones the fork at a tag Renovate tracks and checks the Go tarball against the digest go.dev publishes.
go-overrides.txtraises a module above the version the tag declares, for an advisory’s fix;scripts/check-versions.shfails the pipeline once upstream carries it.- CGO off;
GOFIPS140empty or the pinned module version picks the crypto. FROM scratch: the binary, the CA bundle from UBI, an empty Docker configuration directory. Debug variants add a busybox built from source at/busybox, with/bin/shlinked to it, since a CI job image needs a shell.- Scratch because kaniko unpacks a build’s base over its own root without clearing it: any file the base does not shadow is visible to that build’s
RUNsteps.
Build, sign, SBOM, provenance and release are public-sector/pipeline catalog components; OpenVEX is this project’s own job, rendered per variant from security/vex/statements.json and bound to that digest. A verify stage then runs the pushed bytes.
- Smoke builds of a real Dockerfile against a real registry under
GODEBUG=fips140=onandfips140=only. - A build over a non-UBI base fails if any path of ours beyond
/kaniko,/workspace,/busyboxand/bin/shreaches the result. verify-reproducibilitycompiles the builder twice more with--no-cache; both binaries and the published/kaniko/executormust hash identically.- A consumer checks offline:
cosign verifyagainst the tag-ref identity, the OpenVEX predicate handed to grype or trivy.
The executor runs as user 0 in an unprivileged container with one capability, CAP_CHOWN, for the chown(2) its extraction makes; the images call nothing home. Vulnerabilities in the kaniko binary go to the fork’s own security policy; this project answers for the wrapper, the images and their attestations, on linux/amd64, with no support entitlement.