Para obtener más información sobre los estados del proyecto y los SLA, consulte esta documentación.
Chef InSpec es un marco de prueba de código abierto para infraestructura con un lenguaje legible por humanos y máquinas para especificar requisitos de cumplimiento, seguridad y políticas.
# 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 facilita la ejecución de pruebas donde sea que las necesite. Se encuentran más opciones en nuestros documentos 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 requiere Ruby (>= 3.0.3).
Todas las versiones actualmente compatibles de Chef InSpec (4.0 y posteriores) requieren aceptar el EULA para su uso. Visite la página de aceptación de licencia en el sitio de documentos de Chef para obtener más información.
El paquete Chef InSpec está disponible para MacOS, RedHat, Ubuntu y Windows. Descargue el paquete más reciente en Descargas de Chef InSpec o instale Chef InSpec mediante 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
Reemplace
con su ID de licencia.
Para obtener más información sobre los scripts de instalación, consulte la documentación del script de instalación de Chef.
La instalación de Chef InSpec desde el código fuente puede requerir la instalación de herramientas de compilación de Ruby para administrar las dependencias de las gemas. (Hay disponible una variante sin compilador con funcionalidad reducida; use inspec-core-bin
e inspec-core
).
Para instalar herramientas de compilación, utilice su administrador de paquetes.
Para CentOS/RedHat/Fedora:
yum -y install ruby ruby-devel make gcc gcc-c++
Para Ubuntu:
apt-get -y install ruby ruby-dev gcc g++ make
Para instalar el ejecutable inspec
, que requiere aceptar la licencia Chef, ejecute:
gem install inspec-bin
También puedes usar inspec
como biblioteca, sin ejecutable. Esto no requiere aceptar la licencia. Para instalar la biblioteca como una gema, ejecute:
gem install inspec
Descargue la imagen y defina una función para su comodidad:
Para Linux:
docker pull chef/inspec
function inspec { docker run -it --rm -v $(pwd):/share chef/inspec "$@"; }
Para Windows (PowerShell):
docker pull chef/inspec
function inspec { docker run -it --rm -v "$(pwd):/share" chef/inspec $args; }
Si llama inspec
desde su shell, automáticamente monta el directorio actual en el contenedor Docker. Por lo tanto, puede utilizar fácilmente pruebas locales y archivos clave. Nota: Solo los archivos del directorio y subdirectorios actuales están disponibles dentro del contenedor.
$ 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
Para escanear los contenedores acoplables que se ejecutan en el host utilizando InSpec en contenedores, necesitamos montar de forma vinculante el socket Unix /var/run/docker.sock
desde la máquina host al contenedor 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
es el socket Unix en el que el demonio Docker escucha de forma predeterminada.
Tenga en cuenta que el método preferido es la instalación desde paquetes del sistema operativo desde la página de descarga.
Eso requiere paquete:
bundle install
bundle exec inspec help
Para instalarlo como una gema localmente, ejecute:
gem build inspec.gemspec
gem install inspec- * .gem
En Windows, debe instalar Ruby con Ruby Development Kit para crear dependencias con sus extensiones nativas.
Actualmente, este método de instalación sólo es compatible con Linux. Consulte el sitio de Chef Habitat para obtener más información.
Descargue el binario hab
del sitio Chef Habitat.
hab pkg install chef/inspec --binlink
inspec
Ahora deberías poder ejecutar:
$ 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
para verificar que solo Vagrant esté configurado como controlador. El formato %w() pasará el linting de rubocop y le permitirá acceder a asignaciones anidadas. describe yaml ( '.kitchen.yml' ) do
its ( %w( driver name ) ) { should eq ( 'vagrant' ) }
end
También eche un vistazo a nuestros ejemplos para:
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
Ejecute pruebas contra diferentes objetivos:
# 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
Verifica tu configuración y detecta
id= $( docker run -dti ubuntu:14.04 /bin/bash )
inspec detect -t docker:// $id
El cual te proporcionará:
{"family":"ubuntu","release":"14.04","arch":null}
Objetivos remotos
Plataforma | Versiones | Arquitecturas |
---|---|---|
AIX | 6.1, 7.1, 7.2 | ppc64 |
CentOS | 6, 7, 8 | i386, x86_64 |
Debian | 9, 10 | i386, x86_64 |
FreeBSD | 9, 10, 11 | i386, amd64 |
macos | 11.0 | x86_64 |
Oracle Enterprise Linux | 6, 7, 8 | i386, x86_64 |
Red Hat Enterprise Linux | 7, 8, 9 | i386, x86_64 |
Solaris | 10, 11 | sparc, x86 |
Ventanas* | 8, 8.1, 10, 2012, 2012R2, 2016, 2019 | x86, x86_64 |
ubuntu linux | x86, x86_64 | |
Servidor empresarial SUSE Linux | 12, 15 | x86_64 |
Linux científico | 6, 7 | i386, x86_64 |
sombrero | x86_64 | |
OpenSUSE | 15 | x86_64 |
OmniOS | x86_64 | |
Gentoo Linux | x86_64 | |
Arco Linux | x86_64 | |
HP-UX | 11.31 | ia64 |
Linux alpino | x86_64 |
* Para Windows, se requiere PowerShell 5.0 o superior.
Además, se proporciona soporte de tiempo de ejecución para:
Plataforma | Versiones | Arco |
---|---|---|
macos | 11+ | x86_64, brazo64 |
Debian | 9, 10 | x86_64, aarch64 |
RHEL | 7, 8, 9 | x86_64, aarch64 |
sombrero | 29+ | x86_64, aarch64 |
ubuntu | 16.04+ | x86_64, aarch64 |
ventanas | 8+ | x86_64 |
ventanas | 2012+ | x86_64 |
Documentación
Aprende cocinero:
Relación con otras herramientas (RSpec, Serverspec):
Puede compartir sus perfiles de Chef InSpec en la sección Herramientas y complementos de Chef Supermarket. Inicia sesión y agrega los detalles de tu perfil.
También puede buscar en el Supermercado perfiles de cumplimiento compartidos.
Chef InSpec fue creado originalmente por Christoph Hartmann (@chris-rock) y Dominik Richter (@arlimus).
Chef InSpec está inspirado en el maravilloso proyecto Serverspec. ¡Felicitaciones a mizzy y a todos los contribuyentes!
Los recursos de AWS se inspiraron en las inspecciones de arothian.
La comunidad Chef InSpec y sus mantenedores son muy activos y serviciales. Este proyecto se beneficia enormemente de esta actividad.
Si desea conversar con la comunidad y los mantenedores, únase directamente a nosotros en el canal #inspec
en Chef Community Slack.
Como recordatorio, se espera que todos los participantes sigan el Código de conducta.
Ofrecemos pruebas unit
y integration
.
unit
garantizan el comportamiento previsto de la implementación.integration
se ejecutan en máquinas virtuales basadas en Docker a través de test-kitchen y kitchen-inspec.bundle exec rake test
Si desea ejecutar solo un archivo de prueba:
bundle exec m test/unit/resources/user_test.rb
También puede ejecutar una única prueba dentro de un archivo por número de línea:
bundle exec m test/unit/resources/user_test.rb -l 123
Estas pruebas descargan varias máquinas virtuales para garantizar que Chef InSpec funcione como se espera en diferentes sistemas operativos.
Estas pruebas requieren las siguientes gemas:
Estas gemas se proporcionan a través del grupo integration
en el Gemfile del proyecto.
Además, estas pruebas requieren que Docker esté disponible en su máquina o en una máquina Docker remota configurada mediante las variables de entorno estándar de Docker.
Enumere las distintas instancias de prueba disponibles:
KITCHEN_YAML=kitchen.dokken.yml bundle exec kitchen list
Las plataformas y los conjuntos de pruebas se configuran en el archivo kitchen.dokken.yml
. Una vez que sepa qué instancia desea probar, pruebe esa instancia:
KITCHEN_YAML=kitchen.dokken.yml bundle exec kitchen test < INSTANCE_NAME >
Puede probar todas las instancias en paralelo con:
KITCHEN_YAML=kitchen.dokken.yml bundle exec kitchen test -c 3
Autor: | Dominik Richter ([email protected]) |
Autor: | Christoph Hartmann ([email protected]) |
Derechos de autor: | Copyright (c) 2015 Vulcano Security GmbH. |
Derechos de autor: | Copyright (c) 2017-2020 Chef Software Inc. |
Derechos de autor: | Copyright (c) 2020-2023 Progress Software Corp. |
Licencia: | Licencia Apache, Versión 2.0 |
Licencia: | Acuerdo de licencia de usuario final de Chef |
Las distribuciones empaquetadas de productos Progress® Chef® obtenidas de cualquier fuente de distribución autorizada de Progress Chef están disponibles de conformidad con el CLUF de Progress Chef en https://www.chef.io/end-user-license-agreement, a menos que exista un acuerdo ejecutado. vigente entre usted y Progress que cubre los productos Progress Chef ("Acuerdo Marco"), en cuyo caso prevalecerá el Acuerdo Marco.
El código fuente obtenido del repositorio Chef GitHub está disponible bajo Apache-2.0, una copia del cual se incluye a continuación.
Licenciado bajo la Licencia Apache, Versión 2.0 (la "Licencia"); no puede utilizar este archivo excepto de conformidad con la Licencia. Puede obtener una copia de la Licencia en
http://www.apache.org/licenses/LICENSE-2.0
A menos que lo exija la ley aplicable o se acuerde por escrito, el software distribuido bajo la Licencia se distribuye "TAL CUAL", SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sean expresas o implícitas. Consulte la Licencia para conocer el idioma específico que rige los permisos y limitaciones de la Licencia.