Architecture Decision: Where do we sign SLSA provenance?

Context

As part of #514814 (closed) we're implementing a CI/CD component that produces SLSA provenance attestations. It signs provenance statements using Sigstore cosign.

We want to explore other options, and select the best one.

Note: The best component to generate provenance statements before signing them is discussed in Architectural Decision: Where do we generate SL... (#537049 - closed).

Options

SLSA provenance statements could be signed in the following components:

  • runner
  • GitLab backend
  • a new signing service

Note: This list can be updated with other options identified when solving this issue.

Criteria

Requirements

Aspects to be considered when comparing options:

  • infrastructure complexity
  • maintenance complexity
  • effort to integrate Cosign
  • development effort
  • familiarity with component and its tech stack
  • alignment with architecture
  • security boundary
  • scalability (computational cost is relatively low)

Tasks

  • Evaluate options (discuss in issue)
  • Make decision (discuss in issue)
  • Capture context, options, decision, and consequence in ADR (open MR)
  • Update design doc with decision, and link it to ADR (open MR)

Decision needs to be added to https://handbook.gitlab.com/handbook/engineering/architecture/design-documents/slsa_level_3/#decisions

/cc @darbyfrey

Edited by Fabien Catteau