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