La provenance Helm garantit que le chart que vous installez provient bien de l’auteur attendu et n’a pas été modifié. Un fichier .prov contient une signature cryptographique du chart — si le chart est altéré, la vérification échoue. En production, c’est une couche de sécurité essentielle contre les attaques de type supply chain.
Prérequis
Section intitulée « Prérequis »- Helm 3.8+ installé
- GPG installé (
gpg --version) - Un chart prêt à signer
- Module 10 — OCI registries (recommandé)
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Pourquoi signer ses charts
- Créer une clé GPG
- Signer un chart
- Vérifier un chart avant installation
- Distribuer la clé publique
- Limites et alternatives
Pourquoi signer ses charts
Section intitulée « Pourquoi signer ses charts »Le problème : la supply chain attack
Section intitulée « Le problème : la supply chain attack »Imaginez ce scénario :
- Vous utilisez un chart public
bitnami/postgresql - Un attaquant compromet le repository ou fait du man-in-the-middle
- Vous téléchargez un chart modifié avec un backdoor
- Le backdoor s’exécute dans votre cluster → compromission
Ce que garantit la signature Helm
Section intitulée « Ce que garantit la signature Helm »| Aspect | Garantie |
|---|---|
| Intégrité | Le chart n’a pas été modifié depuis la signature |
| Authenticité | Le chart a été signé par le détenteur de la clé privée |
| Non-répudiation | L’auteur ne peut pas nier avoir signé |
Ce que la signature ne garantit pas
Section intitulée « Ce que la signature ne garantit pas »| Aspect | Limitation |
|---|---|
| Qualité du code | Un chart signé peut contenir des bugs ou vulnérabilités |
| Intention malveillante | L’auteur légitime peut publier un chart malveillant |
| Sécurité de la clé | Si la clé privée est compromise, les signatures sont inutiles |
Créer une clé GPG
Section intitulée « Créer une clé GPG »-
Générer une paire de clés
Fenêtre de terminal gpg --full-generate-keyChoisissez :
- Type : RSA and RSA (option 1)
- Taille : 4096 bits
- Expiration : 2 ans (recommandé)
- Identité :
Helm Charts <helm@example.com>
-
Lister les clés disponibles
Fenêtre de terminal gpg --list-secret-keys --keyid-format LONGRésultat :
sec rsa4096/ABCD1234EFGH5678 2026-02-01 [SC] [expires: 2028-02-01]Key fingerprint = 1234 5678 ABCD EFGH ...uid [ultimate] Helm Charts <helm@example.com>Notez l’ID de la clé :
ABCD1234EFGH5678 -
Exporter la clé publique
Fenêtre de terminal gpg --armor --export ABCD1234EFGH5678 > helm-charts.pub.ascCe fichier sera distribué aux utilisateurs pour vérifier vos charts.
Signer un chart
Section intitulée « Signer un chart »Signature manuelle
Section intitulée « Signature manuelle »# Packager ET signer en une commandehelm package ./my-chart --sign --key "Helm Charts" --keyring ~/.gnupg/secring.gpgRésultat
Section intitulée « Résultat »Deux fichiers sont créés :
my-chart-1.2.3.tgz # Le chart packagémy-chart-1.2.3.tgz.prov # Le fichier de provenance (signature)Contenu du fichier .prov
Section intitulée « Contenu du fichier .prov »-----BEGIN PGP SIGNED MESSAGE-----Hash: SHA512
apiVersion: v2appVersion: "2.0.0"description: My awesome chartname: my-chartversion: 1.2.3
...files: my-chart-1.2.3.tgz: sha256:abc123def456...-----BEGIN PGP SIGNATURE-----...-----END PGP SIGNATURE-----Le .prov contient :
- Les métadonnées du chart
- Le hash SHA256 du tarball
- La signature GPG de l’ensemble
Vérifier un chart avant installation
Section intitulée « Vérifier un chart avant installation »Vérification avec clé importée
Section intitulée « Vérification avec clé importée »-
Importer la clé publique de l’auteur
Fenêtre de terminal gpg --import helm-charts.pub.asc -
Vérifier le chart
Fenêtre de terminal helm verify my-chart-1.2.3.tgzSuccès :
Signed by: Helm Charts <helm@example.com>Using Key With Fingerprint: 1234 5678 ABCD EFGH ...Chart Hash Verified: sha256:abc123def456... -
Installer si vérifié
Fenêtre de terminal helm install my-release my-chart-1.2.3.tgz -n prod
Que faire si la vérification échoue ?
Section intitulée « Que faire si la vérification échoue ? »| Erreur | Cause probable | Action |
|---|---|---|
Error: could not find a valid signature | Fichier .prov manquant | Contacter l’auteur, télécharger le .prov |
Error: signature verification failed | Chart modifié ou mauvaise clé | Ne pas installer — télécharger depuis source officielle |
Error: key not found | Clé publique non importée | Importer la clé de l’auteur |
Distribuer la clé publique
Section intitulée « Distribuer la clé publique »Options de distribution
Section intitulée « Options de distribution »| Méthode | Avantages | Inconvénients |
|---|---|---|
| README du repo | Simple, visible | Peut être modifié par un attaquant |
| Keyserver public | Standard GPG, décentralisé | Peut contenir des clés abandonnées |
| Site web HTTPS | Contrôle total, HTTPS = TLS | Nécessite infra web |
| DNS (DANE) | Très sécurisé | Complexe à configurer |
Publication sur keyserver
Section intitulée « Publication sur keyserver »# Envoyer la clé sur un keyserver publicgpg --keyserver keyserver.ubuntu.com --send-keys ABCD1234EFGH5678Récupération par les utilisateurs
Section intitulée « Récupération par les utilisateurs »# Télécharger la clé depuis un keyservergpg --keyserver keyserver.ubuntu.com --recv-keys ABCD1234EFGH5678Workflow complet en CI/CD
Section intitulée « Workflow complet en CI/CD »variables: GPG_KEY_ID: "ABCD1234EFGH5678"
package-and-sign: stage: build script: # Importer la clé privée depuis les secrets - echo "$GPG_PRIVATE_KEY" | gpg --import - gpg --export-secret-keys > ~/.gnupg/secring.gpg
# Packager et signer - helm package ./charts/my-chart --sign --key "$GPG_KEY_ID" --keyring ~/.gnupg/secring.gpg
# Publier chart + provenance - helm push my-chart-*.tgz oci://registry.example.com/charts # Note: le .prov doit être publié séparément ou avec le chart artifacts: paths: - "*.tgz" - "*.tgz.prov"Limites et alternatives
Section intitulée « Limites et alternatives »Limites de la signature Helm native
Section intitulée « Limites de la signature Helm native »| Limitation | Impact |
|---|---|
| GPG uniquement | Pas de support natif pour d’autres systèmes (Cosign, Notation) |
.prov séparé | Doit être distribué en plus du chart |
| Pas d’intégration OCI native | Le .prov ne fait pas partie de l’artefact OCI |
| Gestion des clés manuelle | Rotation, révocation à gérer vous-même |
Alternative moderne : Cosign + OCI
Section intitulée « Alternative moderne : Cosign + OCI »Cosign (projet Sigstore) permet de signer des artefacts OCI (y compris des charts Helm) :
# Signer un chart OCI avec Cosigncosign sign oci://registry.example.com/charts/my-chart:1.2.3
# Vérifiercosign verify oci://registry.example.com/charts/my-chart:1.2.3Avantages de Cosign :
- Signature intégrée à l’artefact OCI (pas de fichier séparé)
- Support des clés éphémères (keyless signing via OIDC)
- Intégration native avec les registries OCI
Lab C2 — Signer et vérifier un chart
Section intitulée « Lab C2 — Signer et vérifier un chart »Objectif : Créer une clé GPG, signer un chart, publier chart + provenance, vérifier l’intégrité avant installation.
-
Créer une clé de test
Fenêtre de terminal # Clé rapide pour le lab (pas pour production)gpg --batch --gen-key <<EOFKey-Type: RSAKey-Length: 2048Name-Real: Helm LabName-Email: helm-lab@localExpire-Date: 1d%no-protection%commitEOF# Récupérer l'IDGPG_KEY=$(gpg --list-secret-keys --keyid-format LONG | grep sec | awk '{print $2}' | cut -d'/' -f2 | head -1)echo "Key ID: $GPG_KEY" -
Exporter le keyring
Fenêtre de terminal gpg --export-secret-keys > ~/.gnupg/secring.gpg -
Créer et signer un chart
Fenêtre de terminal helm create lab-signed-charthelm package lab-signed-chart --sign --key "Helm Lab" --keyring ~/.gnupg/secring.gpg -
Vérifier la signature
Fenêtre de terminal # La clé publique est déjà importée (on l'a créée localement)helm verify lab-signed-chart-0.1.0.tgz -
Simuler une altération
Fenêtre de terminal # Décompresser le charttar -xzf lab-signed-chart-0.1.0.tgz# Modifier un fichierecho "# Malicious change" >> lab-signed-chart/values.yaml# Recompressertar -czf lab-signed-chart-0.1.0.tgz lab-signed-chart# Tenter de vérifier → doit échouerhelm verify lab-signed-chart-0.1.0.tgz -
Nettoyer
Fenêtre de terminal rm -rf lab-signed-chart lab-signed-chart-*.tgz*gpg --delete-secret-and-public-key "Helm Lab"
Critères de réussite :
- Clé GPG créée
- Chart signé avec
.provgénéré -
helm verifyréussit sur le chart original -
helm verifyéchoue sur le chart altéré
À retenir
Section intitulée « À retenir »- Provenance = garantie d’intégrité et d’authenticité via signature cryptographique
helm package --sign= créer le chart + fichier.provhelm verify= vérifier la signature avant installation- Clé privée = secrète, protégée, jamais partagée
- Clé publique = distribuée aux utilisateurs pour vérification
- Alternative moderne : Cosign pour les artefacts OCI