Aller au contenu
Développement medium

Sécuriser Pulp : RBAC, content-guards et signature

9 min de lecture

Logo Pulp

Ce guide couvre les leviers de sécurité de Pulp : qui peut lire ou écrire (RBAC), qui peut télécharger (content-guards), ce qui entre dans vos dépôts (filtres), et comment garantir l'intégrité (signature). Public visé : administrateurs qui exposent Pulp à plusieurs équipes ou en production. Prérequis : une instance Pulp opérationnelle et la CLI configurée (voir Installer Pulp). Vous verrez aussi, sans détour, ce que Pulp ne fait pas nativement en matière de sécurité supply chain.

La sécurité d'un gestionnaire d'artefacts se joue sur trois questions : qui accède à quoi, ce qu'on laisse entrer, et peut-on faire confiance à ce qui est stocké. Pulp répond aux trois, mais à sa manière, avec des briques à assembler plutôt qu'un tableau de bord clé en main.

  • Restreindre les accès avec le RBAC et ses rôles fins.
  • Protéger le téléchargement avec des content-guards.
  • Filtrer ce qui entre via --includes et --excludes.
  • Garantir l'intégrité avec la signature de contenu.
  • Situer honnêtement Pulp face à la quarantaine de vulnérabilités.

Pulp intègre un contrôle d'accès basé sur les rôles (RBAC) très granulaire. Chaque plugin apporte ses propres rôles, ce qui permet d'autoriser une équipe sur les dépôts Python sans lui ouvrir les dépôts RPM. L'instance fournit plus de 160 rôles prédéfinis dès l'installation.

Fenêtre de terminal
pulp role list --limit 5

Les rôles suivent une nomenclature explicite, par exemple python.pythonrepository_owner (tout pouvoir sur les dépôts Python) ou rpm.rpmremote_viewer (lecture seule des remotes RPM). On assigne un rôle à un utilisateur ou à un groupe, sur un objet précis ou globalement.

  1. Créer un utilisateur applicatif dédié à une équipe ou un pipeline :

    Fenêtre de terminal
    pulp user create --username ci-python --password "MotDePasseCI"
  2. Lui attribuer un rôle ciblé, ici la gestion des dépôts Python :

    Fenêtre de terminal
    pulp user role-assignment add \
    --username ci-python \
    --role "python.pythonrepository_owner" \
    --object ""

    L'objet vide ("") donne le rôle au niveau global ; on peut aussi le restreindre à un dépôt précis via son href. Le principe de moindre privilège s'applique : un pipeline ne reçoit que les droits dont il a besoin.

Protéger le téléchargement avec les content-guards

Section intitulée « Protéger le téléchargement avec les content-guards »

Le RBAC gouverne l'API. Pour contrôler qui télécharge le contenu distribué, Pulp utilise les content-guards, posés sur une distribution. Plusieurs types coexistent :

Content-guardContrôleCas d'usage
RBACSelon les rôles PulpDépôt privé réservé à une équipe
HeaderUn en-tête HTTP attenduFiltrage par un proxy en amont
x509Un certificat clientAccès par certificat mutuel (mTLS)
CompositeCombinaison des précédentsPolitiques multi-critères

Un content-guard RBAC posé sur une distribution transforme un dépôt public en dépôt authentifié : seuls les utilisateurs disposant du rôle adéquat obtiennent les fichiers. C'est le mécanisme d'interdiction d'accès au niveau de la diffusion.

La première ligne de défense supply chain est de ne pas mirroir n'importe quoi. Les remotes acceptent des filtres --includes et --excludes qui définissent une liste blanche ou noire de paquets à synchroniser.

Fenêtre de terminal
pulp python remote create \
--name pypi-maitrise \
--url https://pypi.org/ \
--includes '["requests", "urllib3", "certifi"]' \
--excludes '["requests<2.31.0"]'

Ici, seuls trois paquets sont miroités, et les versions vulnérables de requests (avant la 2.31.0) sont exclues du dépôt. Vous maîtrisez ainsi l'inventaire exact que vos machines peuvent installer, au lieu de relayer tout l'amont.

Pour prouver qu'un artefact n'a pas été altéré, Pulp s'appuie sur des signing services : des services de signature déclarés dans l'instance, adossés à une clé GPG ou à Sigstore/cosign selon le plugin.

Fenêtre de terminal
pulp signing-service list

Une fois un service de signature déclaré, plusieurs plugins l'exploitent : pulp_rpm signe les métadonnées du dépôt, pulp_container vérifie les signatures des images à la synchronisation et peut refuser un manifeste non signé. Combinée au filtrage à l'entrée et au scan Trivy, la signature ferme la chaîne de confiance. La mise en oeuvre complète, avec Cosign pour les images et un signing service GPG pour manifestes, RPM et collections, est détaillée dans le guide Signer les artefacts Pulp.

Chaque synchronisation ou upload crée une version de dépôt immuable. Une distribution pointe vers une version précise : en cas de paquet compromis publié par erreur, vous revenez à la version précédente en une commande, sans restauration de sauvegarde. Cette traçabilité native est un atout de sécurité souvent sous-estimé.

Ce que Pulp ne fait pas : la quarantaine de vulnérabilités

Section intitulée « Ce que Pulp ne fait pas : la quarantaine de vulnérabilités »

Soyons clairs pour éviter une fausse attente : Pulp n'embarque pas de mise en quarantaine automatique des paquets vulnérables. Il n'existe pas d'équivalent natif au pare-feu applicatif de Nexus (blocage d'un composant sur son score CVE) ni à la curation d'Artifactory Xray.

Pulp fournit les briques pour construire cette garantie, mais c'est vous qui assemblez la politique :

  • Filtrer à l'entrée avec --includes / --excludes.
  • Scanner avec un outil externe comme Trivy dans la CI, en bloquant la promotion d'un artefact vulnérable.
  • Promouvoir uniquement le contenu validé vers un dépôt de production.
  • Restreindre l'accès avec le RBAC et les content-guards.

Ce modèle demande plus de travail d'intégration qu'une solution commerciale, mais il repose entièrement sur des outils libres et reste totalement sous votre contrôle.

Pour se rapprocher d'une vraie admission control, on peut placer un firewall d'artefacts comme Varnish Orca devant Pulp. Orca est un virtual registry agnostique : son backend (remotes.url) accepte n'importe quel registre HTTP, Pulp compris. Le flux devient client -> Orca (décision allow/deny/quarantine) -> Pulp.

En lab, Orca proxifie bien Pulp (index PyPI et téléchargement d'artefacts servis à travers Orca). Le montage le plus direct concerne le registre de conteneurs (/v2/ à la racine, comme un registre OCI standard) ; pour PyPI, l'enveloppe de redirection d'Orca demande un alignement de CONTENT_ORIGIN. La décision de blocage elle-même reste une fonctionnalité Premium d'Orca.

  • Le RBAC de Pulp offre plus de 160 rôles fins, par plugin, pour appliquer le moindre privilège.
  • Les content-guards (RBAC, header, x509, composite) contrôlent qui télécharge le contenu distribué.
  • Les filtres --includes / --excludes maîtrisent ce qui entre dans vos dépôts.
  • Les signing services signent les métadonnées et vérifient les images, mais rien n'est signé par défaut.
  • Pulp n'a pas de quarantaine CVE native : on la construit avec un scanner externe et une politique de promotion.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn