InSpec
| Fiche express | |
|---|---|
| Type | Langage et outil de test de conformité / audit d'infrastructure (compliance as code) |
| Éditeur | Chef, aujourd'hui Progress Software (Chef racheté en 2020) |
| Langage | Ruby (DSL), profils organisés en controls |
| Prédécesseur | Serverspec (basé RSpec) |
| Connexion | Transport train : SSH, WinRM, local, Docker, API cloud |
| Voir aussi | Chef · Ansible · Puppet · Molecule |
InSpec (Chef InSpec) est un langage et un outil de test de conformité : il permet de décrire, de façon déclarative, l'état attendu d'un système (paquets installés, permissions de fichiers, services actifs, ports ouverts, règles de pare-feu...) et de vérifier que cet état est effectivement atteint. Contrairement aux outils de gestion de configuration (Puppet, Chef, Ansible) qui appliquent un état désiré, InSpec se contente de l'auditer : il ne modifie rien, il constate un écart (ou une conformité) et le rapporte. Cette séparation entre « remédiation » (appliquer une configuration) et « vérification » (contrôler qu'elle est bien en place) permet, par exemple, à une équipe sécurité/conformité d'auditer indépendamment le travail d'une équipe infrastructure.
Origine : de Serverspec à InSpec
Serverspec, apparu vers 2013, a été le pionnier du test d'infrastructure « as code »
en Ruby : construit sur RSpec, il permettait de vérifier l'état d'un serveur via des matchers
(package(...).should be_installed, etc.), généralement via une connexion SSH.
Chef a créé InSpec en 2015 en reprenant cette philosophie mais en l'élargissant :
- profils packageables et réutilisables (métadonnées, versionning, dépendances entre profils) ;
- couverture des référentiels de conformité du marché (CIS Benchmarks, DISA STIG, PCI-DSS...) ;
- transport unifié (bibliothèque train) permettant d'auditer non seulement des
machines via SSH/WinRM, mais aussi des ressources cloud directement via leurs API, sans machine intermédiaire.
Profils et controls
Un profil InSpec est un répertoire structuré : inspec.yml pour les métadonnées, et
un ou plusieurs fichiers dans controls/ contenant les règles.
# controls/sshd.rb
control 'sshd-01' do
impact 1.0
title 'Le service sshd doit être actif et activé au démarrage'
desc 'Le service SSH doit tourner en permanence sur les hôtes gérés.'
describe service('sshd') do
it { should be_enabled }
it { should be_running }
end
end
control 'sshd-02' do
impact 0.7
title 'La connexion root par mot de passe doit être désactivée'
describe sshd_config do
its('PermitRootLogin') { should cmp 'no' }
end
end
Exécution du profil contre une cible :
inspec exec ./mon-profil -t ssh://deploy@10.0.0.5 -i ~/.ssh/id_rsa inspec exec ./mon-profil -t docker://mon-conteneur inspec exec ./mon-profil # cible locale
Chaque control a un impact (0 à 1) qui pondère sa criticité dans le rapport de
sortie, exploitable en CI pour décider d'un seuil de blocage (échec si un control critique
échoue, simple avertissement sinon).
Transport (train)
InSpec s'appuie sur train, sa bibliothèque de connexion, qui abstrait la cible auditée : SSH, WinRM, exécution locale, conteneur Docker, ou directement une API cloud (AWS, Azure, GCP...). Ce dernier point permet d'auditer la conformité d'une configuration cloud (buckets publics, groupes de sécurité trop ouverts...) sans jamais se connecter à une machine.
Complémentarité avec les outils de gestion de configuration
| Rôle | Action sur le système | |
|---|---|---|
| Ansible / Puppet / Chef | Appliquent une configuration (remédiation) | Modifient l'état du système |
| InSpec | Vérifie une configuration (audit) | Ne modifie rien, constate un écart |
Un usage courant : exécuter un ansible-playbook (ou un run Puppet/Chef)
puis, dans la foulée, un profil InSpec qui vérifie indépendamment que la configuration
effectivement appliquée correspond bien à la politique attendue — utile en particulier quand
l'équipe qui audite n'est pas celle qui gère l'IaC.
InSpec et le test de rôles Ansible
InSpec peut aussi être employé comme moteur de vérification dans Molecule (framework de test de rôles Ansible), en alternative à Testinfra/pytest, selon les versions et la configuration du scénario (support précis à vérifier selon la version de Molecule utilisée).
Voir aussi
- Chef — éditeur d'InSpec, à ne pas confondre avec le langage cookbook/recipe
- Ansible · Puppet — outils dont InSpec vérifie le résultat
- Molecule — framework de test de rôles Ansible, verifier alternatif possible
- Open Policy Agent — policy-as-code plus générique, non limité à l'audit de machines