Aller au contenu
English
Cloud medium

Trouver votre première mauvaise configuration en cinq minutes

Read this page in English

11 min de lecture

En cinq minutes, sans compte cloud ni identifiant, vous allez voir Pépin trouver quatre écarts réels dans une configuration, puis les corriger et constater que le verdict bascule. Le dépôt fournit des inventaires d'exemple : un volontairement vulnérable, un corrigé. C'est le meilleur moyen de comprendre ce que l'outil regarde avant de le brancher sur votre propre infrastructure.

  • Lancer un scan et obtenir un verdict non conforme.
  • Lire un écart : le contrôle, la ressource en cause, l'observation, la remédiation.
  • Corriger les quatre écarts et voir le code de sortie retomber à zéro.
  • Reconnaître pourquoi une règle ouverte à Internet n'est pas toujours un écart.

Aucun compte cloud n'est nécessaire pour cette page. Le plus court est de compiler depuis les sources, ce qui demande Go 1.26 ou plus récent :

Fenêtre de terminal
git clone https://github.com/stephrobert/pepin
cd pepin
go build -o pepin .
./pepin version

La sortie affiche le numéro de version. Si vous préférez un binaire signé, une image de conteneur ou un gestionnaire de paquets, la page d'installation les couvre ; pour découvrir l'outil, la compilation suffit et évite toute question de confiance dans un binaire téléchargé.

Le dépôt contient un inventaire Scaleway volontairement mal configuré. Il tient en trois ressources : un seau de stockage objet, une clé d'accès et une règle de pare-feu.

Fenêtre de terminal
./pepin scan scaleway examples/scaleway/inventory.json

La sortie se termine par une synthèse sans ambiguïté :

Verdict : NON CONFORME
🔴 CRITICAL 2 🟠 HIGH 2 🟡 MEDIUM 0 🔵 LOW 0

Vérifiez le code de retour, c'est lui qui pilotera plus tard votre chaîne d'intégration :

Fenêtre de terminal
echo $?

Il vaut 1, ce qui signifie qu'au moins un écart de sévérité critique ou haute a été constaté.

Trois ressources ont produit quatre écarts : la clé d'accès en déclenche deux à elle seule, pour deux raisons différentes.

SévéritéContrôleRessourceCe qui est observé
CRITICALiam_accesskey_expiration_setla clé d'accèsaucune date d'expiration : une fuite resterait exploitable indéfiniment
CRITICALobjectstorage_bucket_public_accessbackups-produne ACL accorde l'accès au groupe global AllUsers
HIGHiam_no_root_access_keyci-deployla clé est rattachée au compte root, ce qui contourne les politiques IAM
HIGHnetwork_securitygroup_allow_ingress_from_internet_to_tcp_port_22sg-1SSH accepté depuis Internet

Chaque écart est présenté avec sa remédiation, pas seulement son constat :

Remediation
Restreindre la règle à des sources/destinations et ports légitimes
(CIDR d'administration, bastion, VPN) ; ne jamais exposer un service
sensible à 0.0.0.0/0.
↳ docs: https://stephane-robert.info/scsl/CLD-NET-1

L'inventaire est un simple fichier JSON : provider, puis une liste de resources portant chacune un type, un identifiant et des attributes. Voici ce que la version corrigée change, écart par écart.

  1. Le seau exposé

    L'ACL qui accordait la lecture au groupe global AllUsers est remplacée par une ACL nominative sur le propriétaire, et le versionnage est activé.

    "acl_grants": [
    { "grantee": { "type": "CanonicalUser", "id": "owner-id" }, "permission": "FULL_CONTROL" }
    ],
    "versioning": "Enabled"
  2. La clé rattachée au compte root

    Elle est rattachée à une application plutôt qu'à une personne ou au compte racine. C'est la distinction entre une identité humaine et une identité de machine.

    "root_owned": false,
    "application_id": "22222222-2222-2222-2222-222222222222"
  3. La clé sans expiration

    Une date d'expiration est posée. Elle transforme la rotation en obligation plutôt qu'en bonne intention.

    "expiration_date": "2027-06-30T00:00:00Z"
  4. SSH ouvert au monde

    La plage source passe de 0.0.0.0/0 à un réseau d'administration.

    "cidrs": ["10.0.0.0/8"],
    "port_from": 22,
    "port_to": 22
Fenêtre de terminal
./pepin scan scaleway examples/scaleway/inventory-ok.json
echo $?

Le code de retour vaut désormais 0, et le verdict mérite d'être lu mot à mot :

✓ No deviations found in the audited scope.
Verdict : conforme sur le périmètre évalué
(aucune non-conformité détectée, 12 contrôles conformes)

« Sur le périmètre évalué », et douze contrôles conformes. Pépin ne dit pas « votre cloud est sûr » : il dit ce qu'il a vérifié et combien de contrôles l'établissent. C'est la différence entre un résultat et une promesse.

Le contre-exemple qui prouve que la règle réfléchit

Section intitulée « Le contre-exemple qui prouve que la règle réfléchit »

Regardez l'inventaire corrigé de plus près : il contient quatre ressources, soit une de plus que l'inventaire vulnérable. La nouvelle est une règle de pare-feu qui accepte le trafic depuis 0.0.0.0/0.

{
"type": "security_group_rule",
"attributes": {
"direction": "inbound", "action": "accept", "protocol": "tcp",
"cidrs": ["0.0.0.0/0"],
"port_from": 443, "port_to": 443
}
}

Et le scan reste conforme. C'est voulu : exposer le port 443 au monde est le comportement normal d'un site web, alors qu'exposer le port 22 ne l'est pas. Un scanner qui signalerait toute règle contenant 0.0.0.0/0 produirait un faux positif à chaque serveur web, et vous apprendriez très vite à ignorer ses alertes.

Le verdict conforme porte sur douze contrôles, pas sur les cinquante-sept du référentiel. Le format assessment le montre sans détour :

Fenêtre de terminal
./pepin scan scaleway examples/scaleway/inventory.json -f assessment

Sur l'inventaire vulnérable, la répartition réelle est de 4 écarts, 7 conformes, 2 non applicables et 14 non évalués. Ces quatorze contrôles ne sont ni réussis ni ratés : la donnée nécessaire n'était pas dans l'inventaire, et chacun porte sa raison.

compute_instance_has_security_group
aucune ressource de type « compute_instance » dans l'inventaire évalué

C'est logique ici, puisque l'inventaire d'exemple ne contient aucune machine. Mais c'est exactement ce qui se produira sur votre infrastructure si un droit de lecture manque à vos identifiants : le contrôle ne sera pas évalué, et il le dira au lieu de compter pour un succès.

Deux chemins s'ouvrent, et ils ne répondent pas à la même question.

Ce que vous voulez savoirLa commande
Ce que je m'apprête à déployer est-il correct ?terraform show -json tfplan > plan.json puis pepin scan scaleway --terraform plan.json
Ce qui tourne réellement est-il correct ?pepin scan scaleway --live --region fr-par

Le plan Terraform ne voit que ce que votre code déclare. La collecte live voit aussi ce que personne n'a déclaré, et c'est souvent là que se cachent les surprises.

  • Un scan se découvre sans compte cloud : les inventaires d'exemple du dépôt suffisent.
  • Le code de sortie vaut 1 dès qu'un écart critique ou haut est constaté, 0 sinon.
  • Une ressource peut produire plusieurs écarts : la clé d'accès en déclenche deux, pour deux raisons distinctes.
  • Chaque écart porte sa remédiation et sa référence normative, pas seulement son constat.
  • Deux identifiants coexistent : la référence normative pour discuter, le nom technique pour écrire une exception.
  • Le verdict conforme est qualifié par le nombre de contrôles qui l'établissent, ici douze.
  • Ouvrir le port 443 au monde ne déclenche rien, ouvrir le port 22 oui : la règle juge l'usage, pas la présence de 0.0.0.0/0.
  • Quatorze contrôles sur vingt-sept n'ont pas pu être évalués faute de données, et le disent.

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