Skip to content

ci: sign Docker images and attach build provenance (backport of #4451) - #4523

Merged
stevenvegt merged 2 commits into
V6.2from
V6_2/cosign-keyless-signing
Sep 10, 2026
Merged

ci: sign Docker images and attach build provenance (backport of #4451)#4523
stevenvegt merged 2 commits into
V6.2from
V6_2/cosign-keyless-signing

Conversation

@stevenvegt

Copy link
Copy Markdown
Member

Backport of #4451 to V6.2. Adds Sigstore keyless signing plus SLSA provenance and SPDX SBOM attestations to the image build, so the next V6.2 patch release ships signed with a bill of materials. Users verify with:

cosign verify nutsfoundation/nuts-node:<tag> \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  --certificate-identity-regexp '^https://github.com/nuts-foundation/nuts-node(-private)?/\.github/workflows/build-images\.yaml@'

Differences from the master change, all due to the branch's workflow layout:

  • The docker job on this branch has no permissions block and uses version tags for its actions; that is left as is. The new sign job carries its own permissions: id-token: write (which drops every other permission for that job) and pins its two actions by SHA, since it is the job that holds the OIDC credential.
  • Docs land in the same place as on master: a "Verifying image signatures" section in the "Running on Docker" chapter.
    Verification: the workflow YAML parses, and a local Sphinx build of the docs succeeds with no warnings for the changed page. The sign job is skipped on pull_request, so the first real check is the workflow run on this branch after merge; the next tag build should be verified with the command above.

Not for release yet; part of the batch of fixes before the next V6.2 patch tag, together with #4507 and the pending backport of #4496 (version stamping).

Backport of #4451 to V6.2. The sign job runs separately so the OIDC
credential is never exposed to the third-party build actions, and it is
skipped on pull requests because forks get no OIDC token.

Assisted-by: AI
@qltysh

qltysh Bot commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

All good ✅

zizmor (via qlty) flags the missing permissions block on the workflow and
on the docker job. Same layout as master: deny-all at the top, contents
read for the build job, id-token write only for the sign job.

Assisted-by: AI
@stevenvegt
stevenvegt merged commit 4d67e25 into V6.2 Sep 10, 2026
8 checks passed
@stevenvegt
stevenvegt deleted the V6_2/cosign-keyless-signing branch September 10, 2026 13:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants