Skip to content

(feat) Add supply chain verification for Helm charts#1842

Merged
gianlucam76 merged 1 commit into
projectsveltos:mainfrom
gianlucam76:verification
Jun 20, 2026
Merged

(feat) Add supply chain verification for Helm charts#1842
gianlucam76 merged 1 commit into
projectsveltos:mainfrom
gianlucam76:verification

Conversation

@gianlucam76

@gianlucam76 gianlucam76 commented Jun 20, 2026

Copy link
Copy Markdown
Member

Sveltos can now verify the integrity and origin of a Helm chart before
deploying it. Two mechanisms are supported, each targeting a different
chart source.

For charts pulled from OCI registries, Sveltos verifies the Cosign signature
attached to the chart. Two providers are available:

  1. The PublicKey provider checks the signature against a static key stored in a Kubernetes
    Secret on the management cluster. No Sigstore transparency log or certificate authority is
    contacted. Only the public key and the signature stored in the OCI registry are used.
  2. The Keyless provider is designed for CI-signed charts: it verifies that the Fulcio-issued
    certificate in the signature was granted to the expected OIDC identity (issuer and subject
    regexp), and that the signing event was recorded in the Rekor transparency log. This means
    the chart must have been signed by a specific pipeline in a specific repository, not just by
    anyone who holds a key.

Both providers support the Sigstore Bundle v0.3 OCI referrer format produced by current cosign
releases and fall back to the legacy tag-based signature format automatically.

For charts pulled from HTTP repositories, Sveltos verifies the Helm .prov provenance file using a GPG
keyring stored in a Kubernetes Secret. The file contains a checksum and a PGP signature over the chart
archive, and verification confirms the chart has not been modified since it was signed.

In both cases, if verification fails the deployment is blocked and the failure reason is recorded on the
ClusterSummary status. Charts without a verification field deploy as before.

signatureVerification:
  provider: Keyless
  matchOIDCIdentity:
    - issuer: "^https://token.actions.githubusercontent.com$"
      subject: "^https://github.com/myorg/myapp/.*$"
provenanceVerification:
  keyringSecretRef:
    name: my-gpg-keyring

Sveltos can now verify the integrity and origin of a Helm chart before
deploying it. Two mechanisms are supported, each targeting a different
chart source.

For charts pulled from OCI registries, Sveltos verifies the Cosign signature
attached to the chart. Two providers are available:

1. The PublicKey provider checks the signature against a static key stored in a Kubernetes
Secret on the management cluster. No Sigstore transparency log or certificate authority is
contacted. Only the public key and the signature stored in the OCI registry are used.
2. The Keyless provider is designed for CI-signed charts: it verifies that the Fulcio-issued
certificate in the signature was granted to the expected OIDC identity (issuer and subject
regexp), and that the signing event was recorded in the Rekor transparency log. This means
the chart must have been signed by a specific pipeline in a specific repository, not just by
anyone who holds a key.

Both providers support the Sigstore Bundle v0.3 OCI referrer format produced by current cosign
releases and fall back to the legacy tag-based signature format automatically.

For charts pulled from HTTP repositories, Sveltos verifies the Helm .prov provenance file using a GPG
keyring stored in a Kubernetes Secret. The file contains a checksum and a PGP signature over the chart
archive, and verification confirms the chart has not been modified since it was signed.

In both cases, if verification fails the deployment is blocked and the failure reason is recorded on the
ClusterSummary status. Charts without a verification field deploy as before.

```yaml
signatureVerification:
  provider: Keyless
  matchOIDCIdentity:
    - issuer: "^https://token.actions.githubusercontent.com$"
      subject: "^https://github.com/myorg/myapp/.*$"
```

```yaml
provenanceVerification:
  keyringSecretRef:
    name: my-gpg-keyring
```
@gianlucam76 gianlucam76 merged commit d469da1 into projectsveltos:main Jun 20, 2026
17 of 18 checks passed
@gianlucam76 gianlucam76 deleted the verification branch June 20, 2026 16:46
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