Skip to content

Latest commit

 

History

History
216 lines (175 loc) · 11.3 KB

File metadata and controls

216 lines (175 loc) · 11.3 KB

🇬🇧 English · 🇫🇷 Français

Pépin

Pépin

CI CodeQL OpenSSF Scorecard Licence : Apache-2.0 Go OSCAL 1.1.2 SecNumCloud 3.2

Pépin trouve les pépins de votre cloud souverain.

Pépin scannant un plan Terraform volontairement non conforme, puis le même module corrigé : le verdict et le code de sortie changent

Chaque commande de cet enregistrement s'exécute réellement. Il est régénéré à chaque release depuis tools/demo/quickstart.fr.tape, et le preflight refuse de taguer une version que le GIF ne montre pas. Sa jumelle anglaise est sur README.md.

Pépin est un scanner de posture (CSPM) pour les clouds souverains européens (Exoscale, Outscale, Scaleway). Il évalue la configuration effective d'un tenant contre un référentiel commun ancré sur SCSL, SecNumCloud 3.2, CIS Controls v8 et ISO/IEC 27001:2022 / 27017, et produit un résultat opposable : un statut typé par contrôle, ses références normatives exactes, et un dossier de preuve scellé.

Ce qui distingue Pépin

  • Souverain d'abord : vocabulaire natif de chaque provider (Net/Subnet/EIM, BSU/OOS, Kapsule…), jamais par comparaison à un hyperscaler non souverain.
  • Bilingue, langue détectée : rapports, aide et erreurs sortent en français ou en anglais, de tout l'outil et pas de la moitié. Voir Langue.
  • Résultat opposable, pas juste des findings : chaque contrôle est pass / fail / not-applicable (justifié) / not-evaluated (avec la raison). Un « pass » n'est affirmé que si la donnée nécessaire a réellement été collectée : « aucun finding » n'est jamais confondu avec « conforme ».
  • Deux sources : collecte live via l'API du provider, ou audit d'un plan Terraform (terraform show -json) — sans rien provisionner.
  • Dossier de preuve : --seal écrit un bundle horodaté (inventaire évalué, assessment, OSCAL 1.1.2, manifeste à empreintes) que pepin verify recontrôle, avec vérification de signature cosign optionnelle.

Démarrage

Les binaires publiés (empreintes, signature, provenance SLSA), l'image de conteneur, l'action GitHub et le modèle GitLab sont documentés dans docs/install.fr.md. Depuis les sources :

# build (Go 1.26+)
go build -o pepin .

# auditer un plan Terraform (aucune ressource provisionnée)
terraform plan -out tfplan && terraform show -json tfplan > plan.json
./pepin scan scaleway --terraform plan.json

# collecte live (identifiants via l'environnement / config native du provider)
./pepin scan outscale --live --region eu-west-2

# dossier de preuve scellé + vérification
./pepin scan scaleway --terraform plan.json --seal ./bundle
./pepin verify ./bundle --pubkey cosign.pub

Formats de sortie : --format table|json|assessment|oscal|sarif. Codes de sortie : 0 conforme · 1 non-conformité · 2 erreur · 3 le scan n'établit pas la conformité — rien de mesuré, ou une collecte qui n'a pas pu lire tout le périmètre, ou, avec --strict, écarts medium/low restants · 4 tout écart critical/high est couvert par une dérogation valide (exploitables en CI). Un scan qui n'a collecté aucune ressource ne rend jamais 0, et un scan qui n'a pas pu lire une partie de son périmètre non plus : un résultat vide n'est pas conforme, un résultat partiel non plus, un résultat dérogé non plus.

Vérifier ce que vous avez téléchargé

Chaque artefact de release est couvert. Une commande pour chacun, et rien à croire sur parole.

V=v0.3.0
gh release download "$V" --repo stephrobert/pepin

# 1. les sommes sont signées, et elles couvrent les binaires ET le SBOM
cosign verify-blob checksums.txt \
  --bundle checksums.txt.cosign.bundle \
  --certificate-identity-regexp '^https://github\.com/stephrobert/pepin/\.github/workflows/release\.yml@refs/tags/v' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com

# 2. vos fichiers correspondent à ces sommes signées
sha256sum --check checksums.txt --ignore-missing

# 3. le binaire a bien été produit par le workflow de release de ce dépôt (provenance SLSA)
gh attestation verify pepin-linux-amd64 --repo stephrobert/pepin

Le SBOM (sbom.cdx.json, CycloneDX) accompagne chaque release. L'étape 1 couvre le fichier publié ; il est par ailleurs attesté contre les binaires, ce qui est une affirmation différente — que cet inventaire décrit cette compilation :

gh attestation verify pepin-linux-amd64 --repo stephrobert/pepin \
  --predicate-type https://cyclonedx.org/bom

# à donner à l'outil que vous utilisez déjà
osv-scanner --sbom sbom.cdx.json

Langue

Pépin parle français et anglais, et choisit tout seul :

--lang=fr|en  →  PEPIN_LANG  →  LC_ALL  →  LANG  →  repli : en

La première source non vide décide, et toute locale que Pépin ne parle pas retombe sur l'anglais, sans erreur. Le choix vaut pour tout ce qu'un humain lit (rapport, verdict, aide, erreurs) et pour les formats parsables : json, sarif, oscal et assessment portent leur prose dans la langue résolue.

Ce qui est stable d'une langue à l'autre, et ce qui ne l'est pas. Les codes (CLD-NET-1), les identifiants de check, les sévérités (critical…), les statuts (pass, fail, not-applicable, not-evaluated), les sujets et les codes de sortie ne changent jamais avec la langue : c'est sur eux qu'un pipeline s'appuie. Les titres, messages, remédiations et preuves sont de la prose, et changent. Figer PEPIN_LANG en CI si vous comparez le texte d'un rapport d'une exécution à l'autre.

Laquelle fait foi. Le français est la langue de référence du contenu normatif : le référentiel (referentiel/controles.yaml) et les règles sont écrits en français d'abord, l'anglais en est la traduction maintenue. Là où une lecture juridique ou contractuelle est en jeu, c'est la formulation française d'un contrôle qui fait foi.

Documentation

Architecture (en bref)

  • internal/collect : moteur de collecte déclaratif (specs YAML → modèle normalisé).
  • providers/*.yaml : descripteurs d'un provider (auth, collecte live, mapping Terraform, contrat d'API). Un provider = trois sources dans un seul fichier YAML.
  • internal/commonrules/rules/*.rego : règles communes (OPA/Rego) qui évaluent le modèle normalisé, indépendamment du provider.
  • referentiel/ : le référentiel de contrôles (code neutre → sévérité, SCSL, correspondances de normes, fournisseurs). Source de vérité, testée contre l'invention de références.
  • internal/assess : construit l'assessment opposable (statuts, preuves, provenance) et le bundle scellé (OSCAL, empreintes, cosign).

Voir CONTRIBUTING.md pour ajouter un provider ou une règle, et SECURITY.md pour la divulgation de vulnérabilités.

Portée

Pépin évalue la configuration d'un tenant (côté commanditaire). Les correspondances normatives citées (SecNumCloud, ISO, CIS) sont indicatives : un rapport Pépin n'est pas une preuve de qualification ou de certification, lesquelles portent sur le prestataire de service cloud, pas sur un scan de tenant.

Licence

Apache-2.0 : voir LICENSE et NOTICE.

La marque et ses fichiers sont documentés dans docs/brand.fr.md ; le nom Pépin et le logo ne sont pas couverts par la licence Apache 2.0.