Salta ai contenuti

Verificare una release

Dalla 0.9.0, tutto ciò che una release pubblica è firmato o attestato dal workflow di release del repository (.github/workflows/release.yml), con la firma keyless di Sigstore. Non c’è alcuna chiave di firma di lunga durata da ottenere, proteggere o ruotare: l’identità di firma è il workflow GitHub Actions stesso, registrata in un certificato di breve durata e nel registro di trasparenza pubblico di Sigstore. Verificare significa controllare che l’artefatto sia stato compilato da quel workflow, a partire da un tag v* di selfhostr/dumbmonit.

Ogni binario sulla release GitHub è accompagnato da <file>.sigstore.json (il bundle della firma) e <file>.sha256, e la release include dumbmonit-agent.intoto.jsonl, la provenienza di build SLSA.

Finestra del terminale
cosign verify-blob dumbmonit-agent-linux-x86_64 \
--bundle dumbmonit-agent-linux-x86_64.sigstore.json \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
--certificate-identity-regexp '^https://github.com/selfhostr/dumbmonit/\.github/workflows/release\.yml@refs/tags/v'
# or, with the GitHub CLI (checks the provenance attestation)
gh attestation verify dumbmonit-agent-linux-x86_64 -R selfhostr/dumbmonit
# or against the provenance attached to the release
gh attestation verify dumbmonit-agent-linux-x86_64 -R selfhostr/dumbmonit \
--bundle dumbmonit-agent.intoto.jsonl

Un’esecuzione riuscita stampa l’identità del workflow e il tag. Se fallisce, non installare il file e segnalalo.

Le immagini del server e dell’agente portano un’attestazione di provenienza di build inviata a ghcr.io, e un SBOM SPDX e una provenienza SLSA completa allegati all’indice dell’immagine.

Finestra del terminale
gh attestation verify oci://ghcr.io/selfhostr/dumbmonit:0.9.0 -R selfhostr/dumbmonit
# the SBOM and the provenance recorded by the build
docker buildx imagetools inspect ghcr.io/selfhostr/dumbmonit:0.9.0 \
--format '{{ json .SBOM }}'
docker buildx imagetools inspect ghcr.io/selfhostr/dumbmonit:0.9.0 \
--format '{{ json .Provenance }}'

Fissa un’immagine tramite digest nel tuo file Compose se vuoi che ciò che hai verificato sia esattamente ciò che gira.

Le versioni precedenti alla 0.9.0 (v0.1.0-alpha.N), e i file che il workflow di rilascio non ha firmato da sé (come provenance.json), ricevono il loro <file>.sigstore.json da un workflow separato, avviato a mano (.github/workflows/sign-releases.yml). La sua firma dice solo che il file era nella release quando quel workflow è stato eseguito, non che sia stato compilato dal tag: verificala con l’identità di quel workflow e confronta il file con il .sha256 che lo accompagna.

Finestra del terminale
cosign verify-blob dumbmonit-agent-linux-x86_64 \
--bundle dumbmonit-agent-linux-x86_64.sigstore.json \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
--certificate-identity-regexp '^https://github.com/selfhostr/dumbmonit/\.github/workflows/sign-releases\.yml@refs/heads/(main|dev)$'

Queste versioni non hanno provenienza di build: gh attestation verify non si applica.

I tag di release (v0.9.0, …) sono annotati, non firmati con GPG, e solo gli amministratori del repository possono crearli (un ruleset riserva v*). La fiducia in una release poggia sugli artefatti firmati qui sopra, il cui certificato nomina il tag da cui sono stati compilati, più che sulla firma del tag.