Add cosign image signing and SLSA provenance to container images
Summary
The browserless container images published to GHCR (ghcr.io/browserless/chromium, ghcr.io/browserless/chrome, etc.) are currently unsigned and ship without build provenance. Adding Sigstore cosign signing and SLSA provenance attestations would allow consumers to cryptographically verify image authenticity and integrity.
Motivation
Many organizations running Kubernetes enforce image verification policies via admission controllers (Kyverno, OPA Gatekeeper, Sigstore Policy Controller). Without signatures or provenance, these consumers must either:
- Exempt browserless images from verification policies (weakening their security posture)
- Mirror images to an internal registry and re-sign them
- Avoid using the official images entirely
This is an increasing barrier to adoption in enterprise and security-conscious environments.
Proposed Changes
The existing docker-publish-stable.yml workflow already uses docker/build-push-action@v7 with GHCR — all the infrastructure needed is already in place. The change is minimal:
Option A: Cosign keyless signing (~10 lines)
- uses: sigstore/cosign-installer@v3
- name: Sign container images
run: |
cosign sign --yes \
ghcr.io/browserless/chromium:${{ env.TAG }}@${{ steps.build-chromium.outputs.digest }}
Repeat for each of the 9 images. Keyless signing uses GitHub Actions' OIDC identity via Fulcio — no key management required.
Option B: GitHub native attestations (~5 lines per image)
- uses: actions/attest-build-provenance@v2
with:
subject-name: ghcr.io/browserless/chromium
subject-digest: ${{ steps.build-chromium.outputs.digest }}
push-to-registry: true
Option C: Both (recommended)
Cosign signatures for broad tooling compatibility + GitHub attestations for SLSA provenance. Together, ~20 lines of additional YAML across the publish workflow.
Verification
Consumers would then be able to verify images:
# Cosign
cosign verify ghcr.io/browserless/chromium:v2.24.3 \
--certificate-identity-regexp="https://github.com/browserless/browserless/" \
--certificate-oidc-issuer="https://token.actions.githubusercontent.com"
# GitHub attestations
gh attestation verify oci://ghcr.io/browserless/chromium:v2.24.3 \
--owner browserless
References
Add cosign image signing and SLSA provenance to container images
Summary
The browserless container images published to GHCR (
ghcr.io/browserless/chromium,ghcr.io/browserless/chrome, etc.) are currently unsigned and ship without build provenance. Adding Sigstore cosign signing and SLSA provenance attestations would allow consumers to cryptographically verify image authenticity and integrity.Motivation
Many organizations running Kubernetes enforce image verification policies via admission controllers (Kyverno, OPA Gatekeeper, Sigstore Policy Controller). Without signatures or provenance, these consumers must either:
This is an increasing barrier to adoption in enterprise and security-conscious environments.
Proposed Changes
The existing
docker-publish-stable.ymlworkflow already usesdocker/build-push-action@v7with GHCR — all the infrastructure needed is already in place. The change is minimal:Option A: Cosign keyless signing (~10 lines)
Repeat for each of the 9 images. Keyless signing uses GitHub Actions' OIDC identity via Fulcio — no key management required.
Option B: GitHub native attestations (~5 lines per image)
Option C: Both (recommended)
Cosign signatures for broad tooling compatibility + GitHub attestations for SLSA provenance. Together, ~20 lines of additional YAML across the publish workflow.
Verification
Consumers would then be able to verify images:
References