Pour plus d’informations sur les états du projet et les SLA, consultez cette documentation.
Chef InSpec est un framework de test open source pour l'infrastructure avec un langage lisible par l'homme et la machine pour spécifier les exigences de conformité, de sécurité et de politique.
# Disallow insecure protocols by testing
describe package ( 'telnetd' ) do
it { should_not be_installed }
end
describe inetd_conf do
its ( "telnet" ) { should eq nil }
end
Chef InSpec facilite l'exécution de vos tests partout où vous en avez besoin. Plus d’options se trouvent dans nos documents CLI.
# run test locally
inspec exec test.rb
# run test on remote host via SSH
inspec exec test.rb -t ssh://user@hostname -i /path/to/key
# run test on remote host using SSH agent private key authentication. Requires Chef InSpec 1.7.1
inspec exec test.rb -t ssh://user@hostname
# run test on remote windows host via WinRM
inspec exec test.rb -t winrm://Administrator@windowshost --password ' your-password '
# run test on remote windows host via WinRM as a domain user
inspec exec test.rb -t winrm://windowshost --user ' UserName@domain ' --password ' your-password '
# run test on docker container
inspec exec test.rb -t docker://container_id
Chef InSpec nécessite Ruby ( >= 3.0.3 ).
Toutes les versions actuellement prises en charge de Chef InSpec (4.0 et versions ultérieures) nécessitent l'acceptation du CLUF pour pouvoir être utilisées. Veuillez visiter la page d'acceptation de licence sur le site Chef Docs pour plus d'informations.
Le package Chef InSpec est disponible pour MacOS, RedHat, Ubuntu et Windows. Téléchargez le dernier package sur Chef InSpec Downloads ou installez Chef InSpec via un script :
# RedHat, Ubuntu, and macOS
curl https://chefdownload-commercial.chef.io/install.sh?license_id= | sudo bash -s -- -P inspec
# Windows
. { iwr -useb https://chefdownload-commercial.chef.io/install.ps1?license_id= } | iex; install -project inspec
Remplacez
par votre ID de licence.
Pour plus d'informations sur les scripts d'installation, consultez la documentation Chef Install Script.
L'installation de Chef InSpec à partir des sources peut nécessiter l'installation d'outils de construction Ruby pour gérer les dépendances des gemmes. (Une variante sans compilateur est disponible avec des fonctionnalités réduites ; utilisez inspec-core-bin
et inspec-core
.)
Pour installer les outils de build, utilisez votre gestionnaire de packages.
Pour CentOS/RedHat/Fedora :
yum -y install ruby ruby-devel make gcc gcc-c++
Pour Ubuntu :
apt-get -y install ruby ruby-dev gcc g++ make
Pour installer l'exécutable inspec
, qui nécessite l'acceptation de la licence Chef, exécutez :
gem install inspec-bin
Vous pouvez également utiliser inspec
comme bibliothèque, sans exécutable. Cela ne nécessite pas d'accepter la licence. Pour installer la bibliothèque en tant que gem, exécutez :
gem install inspec
Téléchargez l'image et définissez une fonction pour plus de commodité :
Pour Linux :
docker pull chef/inspec
function inspec { docker run -it --rm -v $(pwd):/share chef/inspec "$@"; }
Pour Windows (PowerShell) :
docker pull chef/inspec
function inspec { docker run -it --rm -v "$(pwd):/share" chef/inspec $args; }
Si vous appelez inspec
depuis votre shell, il monte automatiquement le répertoire actuel dans le conteneur Docker. Vous pouvez donc facilement utiliser des tests locaux et des fichiers clés. Remarque : Seuls les fichiers du répertoire et des sous-répertoires actuels sont disponibles dans le conteneur.
$ ls -1
vagrant
test.rb
$ inspec exec test.rb -t ssh://[email protected]:11022 -i vagrant
..
Finished in 0.04321 seconds (files took 0.54917 seconds to load)
2 examples, 0 failures
Pour analyser les conteneurs Docker exécutés sur l'hôte à l'aide d'InSpec conteneurisé, nous devons monter en liaison le socket Unix /var/run/docker.sock
de la machine hôte vers le conteneur InSpec.
docker pull chef/inspec
function inspec { docker run -it --rm -v $(pwd):/share -v /var/run/docker.sock:/var/run/docker.sock chef/inspec "$@"; }
/var/run/docker.sock
est le socket Unix sur lequel le démon Docker écoute par défaut.
Notez que l'installation à partir des packages du système d'exploitation à partir de la page de téléchargement est la méthode préférée.
Cela nécessite un bundler :
bundle install
bundle exec inspec help
Pour l'installer localement en tant que gem, exécutez :
gem build inspec.gemspec
gem install inspec- * .gem
Sous Windows, vous devez installer Ruby avec Ruby Development Kit pour créer des dépendances avec ses extensions natives.
Actuellement, cette méthode d'installation ne prend en charge que Linux. Consultez le site Chef Habitat pour plus d'informations.
Téléchargez le binaire hab
depuis le site Chef Habitat.
hab pkg install chef/inspec --binlink
inspec
Vous devriez maintenant pouvoir exécuter :
$ inspec --help
Commands:
inspec archive PATH # archive a profile to tar.gz (default) ...
inspec check PATH # verify all tests at the specified PATH
inspec automate SUBCOMMAND ... # Chef Automate commands
inspec compliance SUBCOMMAND ... # Chef Automate commands (backwards compatible alias)
inspec detect # detect the target OS
inspec exec PATH(S) # run all test files at the specified PATH.
inspec help [COMMAND] # Describe available commands or one spe...
inspec init TEMPLATE ... # Scaffolds a new project
inspec json PATH # read all tests in PATH and generate a ...
inspec shell # open an interactive debugging shell
inspec supermarket SUBCOMMAND ... # Supermarket commands
inspec version # prints the version of this tool
Options:
[--diagnose], [--no-diagnose] # Show diagnostics (versions, configurations)
describe port ( 80 ) do
it { should_not be_listening }
end
describe port ( 443 ) do
it { should be_listening }
its ( 'protocols' ) { should include 'tcp' }
end
kitchen.yml
pour vérifier que seul Vagrant est configuré comme pilote. Le formatage %w() passera le peluchage rubocop et vous permettra d'accéder aux mappages imbriqués. describe yaml ( '.kitchen.yml' ) do
its ( %w( driver name ) ) { should eq ( 'vagrant' ) }
end
Jetez également un œil à nos exemples pour :
control 'or-test' do
impact 1.0
title 'This is a OR test'
describe . one do
describe ssh_config do
its ( 'Protocol' ) { should eq ( '3' ) }
end
describe ssh_config do
its ( 'Protocol' ) { should eq ( '2' ) }
end
end
end
Exécutez des tests sur différentes cibles :
# run test locally
inspec exec test.rb
# run test on remote host on SSH
inspec exec test.rb -t ssh://user@hostname
# run test on remote windows host on WinRM
inspec exec test.rb -t winrm://Administrator@windowshost --password ' your-password '
# run test on docker container
inspec exec test.rb -t docker://container_id
# run test on podman container
inspec exec test.rb -t podman://container_id --podman-url " unix:///run/user/1000/podman/podman.sock "
# run with sudo
inspec exec test.rb --sudo [--sudo-password ...] [--sudo-options ...] [--sudo_command ...]
# run in a subshell
inspec exec test.rb --shell [--shell-options ...] [--shell-command ...]
# run a profile targeting AWS using env vars
inspec exec test.rb -t aws://
# or store your AWS credentials in your ~/.aws/credentials profiles file
inspec exec test.rb -t aws://us-east-2/my-profile
# run a profile targeting Azure using env vars
inspec exec test.rb -t azure://
# or store your Azure credentials in your ~/.azure/credentials profiles file
inspec exec test.rb -t azure://subscription_id
Vérifiez votre configuration et détectez
id= $( docker run -dti ubuntu:14.04 /bin/bash )
inspec detect -t docker:// $id
Ce qui vous apportera :
{"family":"ubuntu","release":"14.04","arch":null}
Cibles distantes
Plate-forme | Versions | Architectures |
---|---|---|
AIX | 6.1, 7.1, 7.2 | ppc64 |
CentOS | 6, 7, 8 | i386, x86_64 |
Debian | 9, 10 | i386, x86_64 |
GratuitBSD | 9, 10, 11 | i386, amd64 |
macOS | 11.0 | x86_64 |
Oracle Entreprise Linux | 6, 7, 8 | i386, x86_64 |
Red Hat Entreprise Linux | 7, 8, 9 | i386, x86_64 |
Solaris | 10, 11 | sparc, x86 |
Fenêtres* | 8, 8.1, 10, 2012, 2012R2, 2016, 2019 | x86, x86_64 |
Ubuntu-Linux | x86, x86_64 | |
Serveur d'entreprise SUSE Linux | 12, 15 | x86_64 |
Linux scientifique | 6, 7 | i386, x86_64 |
Feutre | x86_64 | |
OuvrirSUSE | 15 | x86_64 |
OmniOS | x86_64 | |
Gentoo Linux | x86_64 | |
Arch Linux | x86_64 | |
HP-UX | 11h31 | ia64 |
Linux alpin | x86_64 |
* Pour Windows, PowerShell 5.0 ou supérieur est requis.
De plus, la prise en charge de l'exécution est fournie pour :
Plate-forme | Versions | Cambre |
---|---|---|
macOS | 11+ | x86_64, bras64 |
Debian | 9, 10 | x86_64, aarch64 |
RHEL | 7, 8, 9 | x86_64, aarch64 |
Feutre | 29+ | x86_64, aarch64 |
Ubuntu | 16.04+ | x86_64, aarch64 |
Fenêtres | 8+ | x86_64 |
Fenêtres | 2012+ | x86_64 |
Documentation
Apprendre le chef :
Relation avec d'autres outils (RSpec, Serverspec) :
Vous pouvez partager vos profils Chef InSpec dans la section Outils et plugins du Chef Supermarket. Connectez-vous et ajoutez les détails de votre profil.
Vous pouvez également parcourir le supermarché pour connaître les profils de conformité partagés.
Chef InSpec a été créé à l'origine par Christoph Hartmann (@chris-rock) et Dominik Richter (@arlimus).
Chef InSpec s'inspire du merveilleux projet Serverspec. Félicitations à mizzy et à tous les contributeurs !
Les ressources AWS ont été inspirées par inspec-aws d'Arothian.
La communauté Chef InSpec et les responsables sont très actifs et utiles. Ce projet bénéficie grandement de cette activité.
Si vous souhaitez discuter avec la communauté et les responsables, rejoignez-nous directement sur le canal #inspec
sur Chef Community Slack.
Pour rappel, tous les participants sont tenus de respecter le code de conduite.
Nous proposons des tests unit
et integration
.
unit
garantissent le comportement prévu de l'implémentationintegration
sont exécutés sur des machines virtuelles basées sur Docker via test-kitchen et kitchen-inspecbundle exec rake test
Si vous souhaitez exécuter un seul fichier de test :
bundle exec m test/unit/resources/user_test.rb
Vous pouvez également exécuter un seul test dans un fichier par numéro de ligne :
bundle exec m test/unit/resources/user_test.rb -l 123
Ces tests téléchargent diverses machines virtuelles pour garantir que Chef InSpec fonctionne comme prévu sur différents systèmes d'exploitation.
Ces tests nécessitent les gemmes suivantes :
Ces gemmes sont fournies via le groupe integration
dans le Gemfile du projet.
De plus, ces tests nécessitent que Docker soit disponible sur votre machine ou sur une machine Docker distante configurée via les variables d'environnement Docker standard.
Répertoriez les différentes instances de test disponibles :
KITCHEN_YAML=kitchen.dokken.yml bundle exec kitchen list
Les plateformes et suites de tests sont configurées dans le fichier kitchen.dokken.yml
. Une fois que vous savez quelle instance vous souhaitez tester, testez-la :
KITCHEN_YAML=kitchen.dokken.yml bundle exec kitchen test < INSTANCE_NAME >
Vous pouvez tester toutes les instances en parallèle avec :
KITCHEN_YAML=kitchen.dokken.yml bundle exec kitchen test -c 3
Auteur: | Dominik Richter ([email protected]) |
Auteur: | Christoph Hartmann ([email protected]) |
Droits d'auteur : | Copyright (c) 2015 Vulcano Security GmbH. |
Droits d'auteur : | Copyright (c) 2017-2020 Chef Software Inc. |
Droits d'auteur : | Copyright (c) 2020-2023 Progress Software Corp. |
Licence: | Licence Apache, version 2.0 |
Licence: | Contrat de licence d'utilisateur final Chef |
Les distributions emballées de produits Progress® Chef® obtenues auprès de toute source de distribution Progress Chef autorisée sont mises à disposition conformément au CLUF Progress Chef à l'adresse https://www.chef.io/end-user-license-agreement, sauf s'il existe un accord signé. en vigueur entre vous et Progress qui couvre les produits Progress Chef (« Contrat-cadre »), auquel cas le Contrat-cadre prévaudra.
Le code source obtenu à partir du référentiel Chef GitHub est mis à disposition sous Apache-2.0, dont une copie est incluse ci-dessous.
Sous licence Apache, version 2.0 (la « Licence » ); vous ne pouvez pas utiliser ce fichier sauf en conformité avec la licence. Vous pouvez obtenir une copie de la licence à
http://www.apache.org/licenses/LICENSE-2.0
Sauf disposition contraire de la loi applicable ou accord écrit, le logiciel distribué sous la licence est distribué « EN L'ÉTAT », SANS GARANTIE OU CONDITION D'AUCUNE SORTE, expresse ou implicite. Consultez la licence pour connaître la langue spécifique régissant les autorisations et les limitations en vertu de la licence.