Supply-Chain Evidence¶
Running cloudtaser is a trust shift. You are moving responsibility for secret handling FROM "the US cloud provider + their build pipelines + their signing root" TO "cloudtaser + OpenBao + your chosen EU substrate + cloudtaser's build pipelines." That shift is the product. This page gives you the cryptographic handle to audit the cloudtaser side of that shift, so you have evidence -- not assurance -- that the bits you run are the bits we shipped.
What release verification establishes
Every release artefact (container image, Linux binary, Helm chart, SBOM) is Cosign-signed. The public installer carries its verification key in its own content rather than downloading the key beside the artefact. Releases with Sigstore bundles also carry transparency-log evidence. These are separate properties: a pinned-key signature authenticates the signer, while a bundle additionally proves transparency-log inclusion. You still trust the reviewed installer revision and the channel that delivers it.
What we sign¶
| Artefact type | Signing mechanism | Distribution |
|---|---|---|
| Container images (operator, wrapper, eBPF agent, port, beacon, S3/DB proxy, init container) | cosign sign with COSIGN_KEY (env-only, never on disk in CI) against GAR (europe-west4-docker.pkg.dev/skipopsmain/cloudtaser/*) tags, recursive across multi-arch manifests |
Registry-attached signatures |
| Linux binaries (port, enroll, CLI, wrapper, etc.) | cosign sign-blob produces <binary>.sig adjacent to the binary |
https://releases.cloudtaser.io/<component>/<version>/ |
| Checksums file | cosign sign-blob produces SHA256SUMS.sig |
Same release URL |
| SBOM | syft dir:. -o spdx-json > sbom.spdx.json attached to each Codeberg release |
Codeberg release assets + release URL |
| Helm charts | Chart lineage tracked through CI; release tags checksummed | https://helm.cloudtaser.io |
All signing steps hard-fail in CI if the signing key is missing. We do not ship unsigned artefacts.
Trust root -- the public key¶
The single public key that validates every cloudtaser signature:
- Installer pin: SHA-256
036dd71c9d3c07a19bff06d4392874014573f695620ac8554d9df175094c4a31 - Convenience copy:
https://releases.cloudtaser.io/keys/release.pub - Format: PEM-encoded ECDSA P-256 (
cosign.pub)
The convenience URL is not an independent trust root when it is downloaded
from the same origin as the artefact. The public install.sh therefore embeds
the PEM and checks its fingerprint before using it. A release-origin compromise
cannot replace the binary, checksum, signature, and verification key together.
For air-gapped or manual verification, copy the key from a reviewed installer
revision or another independently controlled source and verify its fingerprint.
Embedding the key protects against compromise of the release artefact origin; it
does not protect against an attacker who can replace the installer itself.
Rotating the key is a versioned event
A planned rotation starts with a reviewed installer update that embeds both old and new public keys and records both fingerprints. A rotation statement signed by both keys defines the overlap deadline; only after that overlap may a second reviewed installer update remove the old key. Releases do not switch signers before the dual-key installer is published. Emergency revocation follows the same independently published update path, but may omit the overlap when the old private key is suspected compromised.
How to verify an image¶
Copy-paste ready:
# Fetching from the release origin is convenient, but verify this fingerprint
# against the independently published installer or your own pinned copy.
curl -sSLf https://releases.cloudtaser.io/keys/release.pub -o release.pub
printf '%s %s\n' \
036dd71c9d3c07a19bff06d4392874014573f695620ac8554d9df175094c4a31 \
release.pub | sha256sum -c -
# Verify an operator image (GAR -- the sole production registry)
cosign verify \
--key release.pub \
europe-west4-docker.pkg.dev/skipopsmain/cloudtaser/cloudtaser-operator:v0.9.0
A successful verification prints the signing identity, the Rekor log entry UUID, and the verified manifest digest. Any other output means the image is unsigned, mis-signed, or the tag does not match a signed digest -- do not deploy.
Verifying all cloudtaser-managed images before a release¶
components=(
cloudtaser-operator
cloudtaser-wrapper
cloudtaser-ebpf
cloudtaser-beacon
cloudtaser-s3-proxy
cloudtaser-db-proxy
)
TAG=v0.9.0
for c in "${components[@]}"; do
cosign verify --key release.pub "europe-west4-docker.pkg.dev/skipopsmain/cloudtaser/${c}:${TAG}" \
&& echo "OK: $c" \
|| { echo "FAIL: $c"; exit 1; }
done
Use this in your release-gate pipeline before promoting a cloudtaser version into a regulated environment.
How to verify a binary¶
Every Linux binary published to releases.cloudtaser.io ships a .sig file alongside it:
VERSION=v0.3.26
COMPONENT=port
curl -sSLfO "https://releases.cloudtaser.io/${COMPONENT}/${VERSION}/cloudtaser-${COMPONENT}-linux-amd64"
curl -sSLfO "https://releases.cloudtaser.io/${COMPONENT}/${VERSION}/cloudtaser-${COMPONENT}-linux-amd64.sig"
cosign verify-blob \
--key release.pub \
--signature "cloudtaser-${COMPONENT}-linux-amd64.sig" \
"cloudtaser-${COMPONENT}-linux-amd64"
For the checksums file:
curl -sSLfO "https://releases.cloudtaser.io/${COMPONENT}/${VERSION}/SHA256SUMS"
curl -sSLfO "https://releases.cloudtaser.io/${COMPONENT}/${VERSION}/SHA256SUMS.sig"
cosign verify-blob \
--key release.pub \
--signature SHA256SUMS.sig \
SHA256SUMS
sha256sum -c SHA256SUMS
Detached .sig verification authenticates the bytes against the pinned key,
but it does not by itself prove transparency-log inclusion. When a release
also publishes a .sigstore.json bundle, pass that bundle to Cosign and retain
it with the audit evidence. Treat a release without a bundle as signed but not
transparency-proven.
That second step is the chain you want in an audit narrative: the checksums file is signed, and every binary in the directory is included in that checksums file.
How to fetch an SBOM¶
Each release ships an SPDX-format SBOM generated with syft:
curl -sSLfO "https://releases.cloudtaser.io/${COMPONENT}/${VERSION}/sbom.spdx.json"
# Quick inventory
jq '.packages | map({name, versionInfo}) | .[]' sbom.spdx.json | head -40
# Or feed into Grype / Trivy for vulnerability scanning
grype sbom:sbom.spdx.json
trivy sbom sbom.spdx.json
SBOMs are also attached to every Codeberg release on the respective component repository under cloudtaser/<component>.
Admission-policy enforcement¶
You can enforce signature verification at admission time in your cluster, so that an unsigned image (or an image tag swap, or a rollback to a non-signed digest) is rejected before the pod schedules. The cloudtaser Helm chart ships this as an opt-in:
# values.yaml
admission:
enforceSignature: true
mode: kyverno # or "vap", or "both"
signature:
publicKey: "" # inline PEM for air-gapped; default is publicKeyURL
publicKeyURL: "https://releases.cloudtaser.io/keys/release.pub"
rekorURL: "https://rekor.sigstore.dev"
ignoreTlog: false
additionalImageReferences: []
# - "europe-west4-docker.pkg.dev/customer-project/*"
See Helm Values Reference for the full admission options. The default is enforceSignature: false during Preview; once the trust root is broadly published, the default flips in a subsequent minor. If you want strict behaviour today, set it to true now and add your own signed images under additionalImageReferences to extend the same trust root to your internal registry.
Engine selection:
kyverno(recommended) uses Kyverno's nativeverifyImagesrule; requires Kyverno ≥ 1.11 installed in the cluster.vaprenders a Kubernetes 1.30+ValidatingAdmissionPolicythat enforces digest-pinned images (@sha256:...) without requiring an external controller. It cannot verify signatures by itself (VAP has no egress) but it closes the tag-swap / latest-rollback gap.bothrenders both, for defence-in-depth or during a Kyverno install/uninstall migration.
Metrics you can scrape: cloudtaser_admission_signature_enforced (gauge) and cloudtaser_admission_signature_rejections_total (counter).
What's on the roadmap¶
- Reproducible builds: verify that a given Git SHA produces a byte-identical image locally and in CI. Currently partial (Go binaries are reproducible with
-trimpath -buildvcs=false -ldflags="-buildid="; container layer ordering is not fully pinned). Tracker: cloudtaser-pipeline# (filed in the same PR as this page -- see release notes). - Third-party penetration test: targeted Q2 2026; results publishable in a redacted executive summary. See Preview Status & Roadmap.
- SLSA level 3 aspiration: signed provenance attestation attached to every image (beyond the basic Cosign signature). Depends on build-environment isolation work currently underway in the pipeline repo.
- Rekor-only verification flows for customers who cannot tolerate fetching
release.pubat admission time: we document the Rekor UUIDs per release so you can verify against the transparency log without holding a local copy of the public key.
Acknowledging the trust shift¶
Using cloudtaser IS a trust shift. You go from:
- Before: trusting the US cloud provider + their key-management service + their Vault Enterprise build pipeline + their signing root.
- After: trusting cloudtaser's codebase + your chosen EU substrate (OpenBao + provider) + cloudtaser's build pipeline + cloudtaser's signing root.
The shift is the value proposition -- we are moving secret material out of the compelled surface into a jurisdictionally and architecturally distinct surface. But it is not an elimination of trust; it is a relocation of it. This page exists to give you the cryptographic handle to audit the cloudtaser side of that shift -- independently, continuously, and with primitives (Cosign, SPDX SBOMs, Rekor transparency) that are open-source and industry-standard.
If you need evidence beyond what's documented here -- a pentest report, a SOC 2 letter, a penetration-test attestation, a specific build-provenance format -- reach out. Those items are on the roadmap; several are available under NDA today.
Related pages¶
- Security Model -- threat model and defence layers
- Shared Responsibility -- what you still own after the trust shift
- Preview Status & Roadmap -- current honest-state of audit and pentest milestones
- Helm Values Reference --
admission.enforceSignatureand related options - Operational Readiness -- blast radius, backout, SLA posture