Une référence de la sécurité d'un pipeline CI/CD GitHub Actions. Ce dépôt montre, sur une API Python (FastAPI) volontairement minimale, à quoi ressemble une chaîne d'approvisionnement logicielle sécurisée de bout en bout : épinglage strict, permissions minimales, image durcie, provenance SLSA signée, SBOM attesté, et un pipeline qui vise la note maximale sur tous les rapports de sécurité (OpenSSF Scorecard, Plumber, zizmor, poutine, actionlint, Trivy).
Il sert de support pratique à la formation du site :
- Formation GitHub Actions : le parcours complet.
- Sécuriser ses pipelines : le volet sécurité (pinning SHA, permissions, OIDC, attestations).
- Lab pipeline sécurisé end to end : le guide pas à pas qui construit ce dépôt.
Chaque choix technique de ce dépôt est expliqué dans ces guides : il n'est pas fait pour être copié tel quel, mais pour être compris.
- Lint, tests et SAST (ruff, pytest, bandit) à chaque push et pull request.
- Audit des dépendances (pip-audit, OSV-Scanner) et scan d'image (Trivy).
- Dépendances épinglées : actions par SHA, image de base par digest, paquets
Python par hash (
--require-hashes). - Image durcie : multi-stage, utilisateur non-root, outils de build retirés.
- Provenance SLSA et SBOM (CycloneDX + SPDX) attestés nativement par GitHub, signés via Sigstore keyless (log de transparence Rekor).
docker run --rm -p 8000:8000 ghcr.io/stephrobert/secure-python-pipeline:latest
curl http://localhost:8000/health # {"status":"healthy"}uv venv .venv && source .venv/bin/activate
uv pip install --require-hashes -r requirements.txt
uv pip install -r requirements-dev.txt
ruff check . && pytest && bandit -r srcChaque image publiée porte une attestation de provenance signée. Pour la vérifier :
# Provenance de build (attestation native GitHub)
gh attestation verify oci://ghcr.io/stephrobert/secure-python-pipeline:latest \
--owner stephrobert
# Signature Cosign keyless (identité du workflow + émetteur OIDC)
cosign verify ghcr.io/stephrobert/secure-python-pipeline:latest \
--certificate-identity-regexp "https://github.com/stephrobert/secure-python-pipeline/.github/workflows/release.yml@.*" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com"Le dépôt étant public, ces attestations sont vérifiables par un tiers via le log Rekor public.
MIT. Voir LICENSE.