Aller au contenu
CI/CD & Automatisation medium

Lab : pipeline GitHub sécurisé de bout en bout

5 min de lecture

logo github

Ce lab construit, de zéro, un projet Python dont le pipeline GitHub Actions vise l'excellence de sécurité : une image durcie et signée, une provenance SLSA et un SBOM vérifiables par un tiers, et un pipeline qui passe tous les scanners de workflow (actionlint, zizmor, poutine, plumber) à zéro finding, scanne les vulnérabilités avec Trivy et maximise OpenSSF Scorecard. Il s'adresse à un lecteur avancé qui veut une référence reproductible, pas une recette magique. Chaque décision est expliquée : pourquoi ce réglage, quel contrôle il satisfait, quel piège il évite.

Le schéma ci-dessous résume la chaîne que vous allez bâtir : quatre analyses lancées en parallèle (lint, tests, SAST, audit) plus un build-check, soit les cinq jobs du CI, un build attesté (provenance SLSA, SBOM, signature Cosign), une publication sur GHCR, puis une double mesure - la posture avec OpenSSF Scorecard et l'exploitabilité réelle avec Plumber.

Vue d'ensemble du pipeline sécurisé : quatre analyses CI en parallèle, build attesté SLSA/SBOM/Cosign, publication GHCR, puis mesure Scorecard et Plumber

Le projet fil rouge est une API Python (FastAPI) volontairement minimale. Ce n'est pas l'application qui compte, mais la chaîne qui la construit, l'atteste et la publie. À la fin du lab, chaque image publiée porte :

  • une attestation de provenance SLSA signée (Sigstore keyless, log Rekor) ;
  • un SBOM (CycloneDX) attesté et lié au digest dans le registre ;
  • une signature Cosign vérifiable, plus un provenance.intoto.jsonl attaché à la release.

Et le dépôt lui-même est gouverné : protection de branche par ruleset, revue code-owner obligatoire, Dependabot avec quarantaine, et une posture mesurée par OpenSSF Scorecard.

Le dépôt de référence, public et reproductible

Section intitulée « Le dépôt de référence, public et reproductible »

Tout le lab s'appuie sur un dépôt public, que vous pouvez consulter, cloner et forker pour reproduire chaque étape à l'identique : github.com/stephrobert/secure-python-pipeline.

Fenêtre de terminal
git clone https://github.com/stephrobert/secure-python-pipeline

Vous y trouverez les sept workflows (CI, release, CodeQL, Scorecard, fuzzing, plumber, vérification SLSA), le Dockerfile durci, les dépendances hash-lockées et les fichiers de gouvernance (SECURITY.md, CODEOWNERS, dependabot.yml). Les guides qui suivent citent le code de ce dépôt tel quel : aucun extrait n'est reconstruit de mémoire, chaque commande a été exécutée et validée avant d'être documentée.

Aux personnes qui écrivent déjà des workflows GitHub Actions et veulent les porter au niveau d'une référence de sécurité. La connaissance des concepts de supply chain (SLSA, SBOM, Sigstore) aide, mais chaque notion est rappelée au fil des étapes.

Le lab se suit dans l'ordre : chaque guide s'appuie sur le précédent.

  1. Bootstrap pose le socle : dépôt, gouvernance, application, dépendances par hash, image durcie. On valide tout en local avant le moindre workflow.

  2. Pipeline CI durci écrit le workflow d'intégration et le fait passer les quatre scanners de workflow (actionlint, zizmor, poutine, plumber).

  3. Build vérifiable ajoute la provenance SLSA, le SBOM attesté et la signature Cosign, toutes vérifiables.

  4. Protection et gouvernance protège la branche par un ruleset, impose la revue code-owner et outille les scanners avec un token GitHub App.

  5. Scoring et durcissement maximise honnêtement OpenSSF Scorecard et vise le badge OpenSSF Best Practices.

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