Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Add cosign image signing and SLSA provenance to container images #5313

Copy link
Copy link

Description

@connerohnesorge
Issue body actions

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:

  1. Exempt browserless images from verification policies (weakening their security posture)
  2. Mirror images to an internal registry and re-sign them
  3. 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

Reactions are currently unavailable

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    Morty Proxy This is a proxified and sanitized view of the page, visit original site.