🔐 Release integrity
Use this guide when you need to verify that an image or binary came from the published kwatch release and was not changed on the way to your cluster.
Every published container release includes a source commit, image digest, release SBOMs, checksums, a signed checksum manifest, and a release manifest. The image and checksum manifest are signed with Cosign using GitHub Actions OIDC. Kwatch does not connect to Sigstore at runtime.
Installer trust boundary
kwatch.sh downloads release-tagged manifests and catalogs over HTTPS from the
Kwatch GitHub repository. Before applying them, it validates the release
version, catalog format, required manifest objects, named persistence
resources, rollout, RBAC, and workload security settings. It does not perform
local Cosign verification of the downloaded YAML. Environments that require
artifact verification before the installer runs should verify the release
checksum/signature and image digest first, then use the pinned release
artifacts according to their change-control process.
Use the release image
Use the published version tag for normal installation, or pin the digest in a deployment policy:
docker pull ghcr.io/abahmed/kwatch:vX.Y.Z
The release manifest records the relationship between the version tag, source commit, image digest, and (for stable releases) Helm package checksum. The digest is the verification identity; do not use a mutable tag as a security identity.
Verify an image
Install Cosign, then verify the exact digest recorded in the release evidence:
cosign verify \
--certificate-oidc-issuer=https://token.actions.githubusercontent.com \
--certificate-identity-regexp='^https://github.com/abahmed/kwatch/.github/workflows/publish.yml@' \
ghcr.io/abahmed/kwatch@sha256:<digest>
The command should be run against the exact digest, not latest or another mutable tag.
Verify checksums
Download SHA256SUMS and the release files from the matching GitHub Release, then run:
sha256sum -c kwatch-vX.Y.Z-SHA256SUMS
The release manifest's source.commit must match the commit shown by the GitHub tag,
and its image.digest must match the digest used for the Cosign verification.
Verify release assets
The signed checksum manifest authenticates the checksums for the source archive, Helm chart, SBOMs, and other release evidence:
cosign verify-blob \
--bundle kwatch-vX.Y.Z-SHA256SUMS.sigstore.json \
--certificate-oidc-issuer=https://token.actions.githubusercontent.com \
--certificate-identity-regexp='^https://github.com/abahmed/kwatch/.github/workflows/publish.yml@' \
kwatch-vX.Y.Z-SHA256SUMS
sha256sum -c kwatch-vX.Y.Z-SHA256SUMS
The release contains CycloneDX SBOMs for the source tree and the exact image
digest. Confirm that the files named by the release manifest exist and contain
bomFormat: CycloneDX before using them for inventory or policy decisions.
Verify image provenance
Verify the SLSA provenance attestation against the repository and image digest:
gh attestation verify \
oci://ghcr.io/abahmed/kwatch@sha256:<digest> \
--repo abahmed/kwatch \
--signer-workflow abahmed/kwatch/.github/workflows/publish.yml \
--predicate-type https://slsa.dev/provenance/v1
Verify the running binary
The image embeds its version and source commit:
docker run --rm ghcr.io/abahmed/kwatch:vX.Y.Z version --json
The returned version and commit should match the release tag and manifest.