Skip to content

Supply-chain: cosign-verify the infrastructure Flux OCI artifact (extend #1559 beyond apps) #1570

@devantler

Description

@devantler

🤖 Generated by the Daily AI Assistant

Problem

#1559 added keyless cosign signature verification (spec.verify) to the app OCIRepository sources (wedding-app, ascoachingogvaner), signed by reusable-workflows/.github/workflows/publish-app.yaml via GitHub OIDC (Fulcio/Rekor). That closes the supply-chain gap for application artifacts.

The infrastructure source is still unverified. The flux-system OCIRepository — which carries the platform's own manifests (variables, infrastructure-controllers, infrastructure, apps Kustomizations all sourceRef it) — has no spec.verify. It's the single largest blast radius in the cluster (it defines every controller, policy, and gateway), yet source-controller will reconcile whatever is pushed to oci://…/manifests without verifying provenance. Upstream Helm OCI charts (hcloud-csi, longhorn, external-dns, openbao, …) are likewise unverified.

Why this isn't a one-line change

The infra manifests artifact is published by ksail --config ksail.prod.yaml workload push in cd.yaml — and (unlike the app artifacts) there is no signing step, so spec.verify can't simply be switched on; the artifact must be signed first. This also raises a portfolio question for KSail: should ksail workload push grow first-class keyless signing (an --sign / OIDC option), so signed publishing is a platform capability rather than a bolted-on cosign sign step? See applications/ksail.

Proposed direction (incremental, behaviour-preserving until the final switch)

  1. Sign the infra artifact on publish. Either (a) add a keyless cosign sign step after ksail … workload push in cd.yaml using the same GitHub-OIDC identity pattern as publish-app.yaml, or (b) — preferred long-term — add signing support to ksail workload push and call it. Keep the single release → cd.yaml deploy path (no parallel workflows).
  2. Verify on the cluster. Add spec.verify (keyless, matching the cd.yaml/KSail workflow signing identity) to the flux-system OCIRepository base. Roll out to local first, confirm Ready=True, then prod.
  3. (Follow-on, separate issue) evaluate cosign verification for the upstream Helm OCI charts where the chart publisher signs (Flux HelmChart/OCIRepository .spec.verify).

Acceptance criteria

  • The infra/manifests OCI artifact pushed by CD is cosign-signed with a verifiable, Renovate-resilient OIDC identity (subject regex tolerant of pinned-SHA bumps, as in feat(apps): verify cosign signatures on app OCI artifacts #1559).
  • flux-system OCIRepository carries spec.verify; both clusters stay Ready=True after deploy (no reconciliation halt).
  • A negative control (unsigned / wrong-identity artifact) is rejected.
  • Docs updated (docs/ supply-chain note) so the verification identity is discoverable for future workflow-path changes.

Rough size

M — investigation + a signing step + one base manifest change, rolled out local → prod. The KSail-native signing option (1b) is a separate, larger piece tracked on KSail if pursued.


Maintainer: this is a proposed roadmap epic from a first-ever platform strategy review — reshape, split, deprioritise, or close as you see fit. It deliberately extends your own #1559 rather than introducing a new pattern, and keeps the existing single deploy path.

Metadata

Metadata

Assignees

No one assigned

    Labels

    roadmapStrategic roadmap epic / themesecurity

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions