
Ce guide signe une image de conteneur avec Cosign puis la vérifie, le tout hébergé par Pulp, et montre comment déclarer un signing service GPG pour signer manifestes, RPM et collections Ansible côté serveur. Public visé : équipes qui veulent prouver l'intégrité et la provenance de leurs artefacts. Prérequis : une instance Pulp avec le registre de conteneurs actif (voir Installer Pulp), plus cosign, podman et gpg sur la machine cliente.
Signer un artefact, c'est apposer une preuve cryptographique qu'il n'a pas été altéré depuis sa production et qu'il vient bien de vous. Pulp gère la signature de deux façons complémentaires : les signatures Cosign/Sigstore pour les images de conteneurs (côté client, Pulp héberge), et les signing services GPG pour signer manifestes, métadonnées RPM et collections Ansible côté serveur.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Distinguer signature Cosign et signing service GPG.
- Signer une image de conteneur avec Cosign et la stocker dans Pulp.
- Vérifier une signature Cosign servie par Pulp.
- Déclarer un manifest signing service GPG et l'attacher à un dépôt.
Deux modèles de signature
Section intitulée « Deux modèles de signature »Pulp ne signe pas tout de la même manière selon le type de contenu. Comprendre la différence évite de chercher une commande qui n'existe pas.
| Modèle | Contenu | Où la signature est produite |
|---|---|---|
| Cosign / Sigstore | Images de conteneurs | Côté client (cosign, podman), Pulp héberge la signature |
| Signing service GPG | Manifestes conteneurs, métadonnées RPM, collections Ansible | Côté serveur Pulp, via un script de signature |
Le premier modèle s'appuie sur l'écosystème Sigstore : comme Pulp est un registre OCI, il stocke nativement une signature Cosign en tant qu'image OCI à côté de l'image signée. Le second modèle s'appuie sur GPG et un script exécuté par Pulp au moment de la publication.
Signer une image avec Cosign
Section intitulée « Signer une image avec Cosign »Le scénario : vous poussez une image dans Pulp, vous la signez avec Cosign (le signataire du projet Sigstore), et n'importe quel consommateur peut ensuite vérifier la signature. Pulp héberge la signature sans configuration serveur particulière. Si Cosign vous est nouveau, le guide Cosign dédié détaille la génération de clés et le rôle de Rekor.
-
Pousser une image dans un dépôt hébergé par Pulp :
Fenêtre de terminal podman login pulp.exemple.compodman tag busybox:latest pulp.exemple.com/demo/busybox:latestpodman push pulp.exemple.com/demo/busybox:latest -
Générer une paire de clés Cosign (clé privée protégée par mot de passe) :
Fenêtre de terminal cosign generate-key-pairLa commande produit
cosign.key(privée) etcosign.pub(publique). Conservez la clé privée dans un coffre-fort, jamais dans un dépôt Git. -
Signer l'image dans Pulp. On s'authentifie auprès du registre, puis on signe par digest (plus sûr que par tag) :
Fenêtre de terminal cosign login pulp.exemple.com -u admin -p "MotDePasse"cosign sign --key cosign.key pulp.exemple.com/demo/busybox:latestCosign calcule le digest, signe, et pousse la signature dans Pulp sous un tag dédié de la forme
sha256-<digest>.sig. C'est un objet OCI comme un autre, hébergé à côté de l'image.
Vérifier une signature Cosign
Section intitulée « Vérifier une signature Cosign »La vérification prouve que l'image correspond bien à une signature émise par votre clé. Le consommateur n'a besoin que de la clé publique :
cosign verify --key cosign.pub pulp.exemple.com/demo/busybox:latestLa sortie confirme que les signatures ont été vérifiées avec la clé publique et affiche la charge utile, avec le type cosign container image signature et le digest de l'image. Une image non signée ou modifiée fait échouer la commande, ce qui permet de bloquer un déploiement dans un pipeline.
Signer côté serveur avec un signing service GPG
Section intitulée « Signer côté serveur avec un signing service GPG »Pour les manifestes de conteneurs, les métadonnées RPM et les collections Ansible, Pulp signe côté serveur via un signing service : un script que Pulp exécute, adossé à une clé GPG.
-
Écrire le script de signature. Pour un manifeste de conteneur, il invoque
skopeo standalone-signet renvoie le chemin de la signature au format JSON attendu par Pulp :#!/usr/bin/env bashMANIFEST_PATH=$1skopeo standalone-sign \"$MANIFEST_PATH" "$REFERENCE" "$PULP_SIGNING_KEY_FINGERPRINT" \--output "$SIG_PATH"if [ $? -eq 0 ]; thenecho "{\"signature_path\": \"$SIG_PATH\"}"elseexit 1fiLes variables
REFERENCE,PULP_SIGNING_KEY_FINGERPRINTetSIG_PATHsont fournies par Pulp ; ne les renommez pas. La clé GPG doit être installée dans le trousseau de l'utilisateurpulp. -
Déclarer le signing service avec la classe adaptée au contenu (ici les manifestes de conteneurs) :
Fenêtre de terminal pulpcore-manager add-signing-service ma-signature \/var/lib/pulp/scripts/sign-manifest.sh \45ACE14E3EBB9BBA \--class container:ManifestSigningServicePulp valide le script à l'enregistrement, ce qui évite de sauvegarder un script cassé.
-
Attacher le service au dépôt via son champ
manifest_signing_service. Les images publiées depuis ce dépôt sont alors signées automatiquement côté serveur.
Gérer les clés en sécurité
Section intitulée « Gérer les clés en sécurité »Une signature ne vaut que si sa clé privée reste secrète. Quelques réflexes non négociables :
- Jamais de clé privée dans Git ni dans une image : stockez-la dans un coffre-fort comme HashiCorp Vault.
- Protégez la clé Cosign par mot de passe (
COSIGN_PASSWORD) et une clé GPG par passphrase. - Publiez la clé publique largement : c'est elle qui permet la vérification, elle n'a pas à être secrète.
- Combinez avec un scan : signer prouve l'intégrité, pas l'absence de vulnérabilité. Enchaînez avec Trivy dans la CI.
À retenir
Section intitulée « À retenir »- Pulp signe de deux façons : Cosign/Sigstore pour les images (client), signing services GPG pour manifestes, RPM et collections (serveur).
- Une signature Cosign est stockée par Pulp comme objet OCI sous un tag
sha256-<digest>.sig. cosign verify --key cosign.pubvalide l'image ; un échec peut bloquer un déploiement.- Pulp mirroir les signatures Cosign lors d'une synchronisation.
- Un signing service (
add-signing-service) exécute un script GPG côté serveur, attaché au dépôt par son champ de signature. - La clé privée ne quitte jamais un coffre-fort ; signer ne remplace pas le scan de vulnérabilités.