Para obter mais informações sobre estados e SLAs do projeto, consulte esta documentação.
Chef InSpec é uma estrutura de teste de código aberto para infraestrutura com uma linguagem legível por humanos e máquinas para especificar requisitos de conformidade, segurança e 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
O Chef InSpec facilita a execução de seus testes onde você precisar. Mais opções são encontradas em nossos 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 requer Ruby ( >= 3.0.3 ).
Todas as versões atualmente suportadas do Chef InSpec (4.0 e posteriores) exigem a aceitação do EULA para uso. Visite a página de aceitação da licença no site de documentos do Chef para obter mais informações.
O pacote Chef InSpec está disponível para MacOS, RedHat, Ubuntu e Windows. Baixe o pacote mais recente em Downloads do Chef InSpec ou instale o Chef InSpec via 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
Substitua
pelo seu ID de licença.
Para obter mais informações sobre os scripts de instalação, consulte a documentação do Chef Install Script.
A instalação do Chef InSpec a partir do código-fonte pode exigir a instalação de ferramentas de construção Ruby para gerenciar dependências de gemas. (Uma variante sem compilador está disponível com funcionalidade reduzida; use inspec-core-bin
e inspec-core
.)
Para instalar ferramentas de construção, use seu gerenciador de pacotes.
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 o executável inspec
, que requer a aceitação da licença Chef, execute:
gem install inspec-bin
Você também pode usar inspec
como uma biblioteca, sem executável. Isso não requer a aceitação da licença. Para instalar a biblioteca como uma gem, execute:
gem install inspec
Baixe a imagem e defina uma função por conveniência:
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; }
Se você chamar inspec
do seu shell, ele montará automaticamente o diretório atual no contêiner do Docker. Portanto, você pode usar facilmente testes locais e arquivos-chave. Nota: Somente arquivos no diretório e subdiretórios atuais estão disponíveis no contêiner.
$ 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 verificar os contêineres docker em execução no host usando o InSpec em contêiner, precisamos montar o soquete Unix /var/run/docker.sock
da máquina host para o contêiner 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
é o soquete Unix que o daemon do Docker escuta por padrão.
Observe que a instalação a partir de pacotes do sistema operacional da página de download é o método preferido.
Isso requer empacotador:
bundle install
bundle exec inspec help
Para instalá-lo como uma gem localmente, execute:
gem build inspec.gemspec
gem install inspec- * .gem
No Windows, você precisa instalar Ruby com Ruby Development Kit para construir dependências com suas extensões nativas.
Atualmente, este método de instalação suporta apenas Linux. Consulte o site do Chef Habitat para obter mais informações.
Baixe o binário hab
do site Chef Habitat.
hab pkg install chef/inspec --binlink
inspec
Agora você deve ser capaz de executar:
$ 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 se apenas o Vagrant está configurado como driver. A formatação %w() passará pelo linting rubocop e permitirá que você acesse mapeamentos aninhados. describe yaml ( '.kitchen.yml' ) do
its ( %w( driver name ) ) { should eq ( 'vagrant' ) }
end
Dê também uma olhada em nossos exemplos 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
Execute testes em diferentes alvos:
# 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
Verifique sua configuração e detecte
id= $( docker run -dti ubuntu:14.04 /bin/bash )
inspec detect -t docker:// $id
O que irá fornecer a você:
{"family":"ubuntu","release":"14.04","arch":null}
Alvos Remotos
Plataforma | Versões | Arquiteturas |
---|---|---|
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 | spar, x86 |
Windows* | 8, 8.1, 10, 2012, 2012R2, 2016, 2019 | x86, x86_64 |
UbuntuLinux | x86, x86_64 | |
Servidor SUSE Linux Enterprise | 12, 15 | x86_64 |
Linux Científico | 6, 7 | i386, x86_64 |
Fedora | x86_64 | |
OpenSUSE | 15 | x86_64 |
OmniOS | x86_64 | |
GentooLinux | x86_64 | |
Arco Linux | x86_64 | |
HP-UX | 11h31 | ia64 |
Alpino Linux | x86_64 |
* Para Windows, é necessário o PowerShell 5.0 ou superior.
Além disso, o suporte de tempo de execução é fornecido para:
Plataforma | Versões | Arco |
---|---|---|
macOS | 11+ | x86_64, braço64 |
Debian | 9, 10 | x86_64, aarch64 |
RHEL | 7, 8, 9 | x86_64, aarch64 |
Fedora | 29+ | x86_64, aarch64 |
Ubuntu | 16.04+ | x86_64, aarch64 |
Windows | 8+ | x86_64 |
Windows | 2012+ | x86_64 |
Documentação
Aprenda Chef:
Relacionamento com outras ferramentas (RSpec, Serverspec):
Você pode compartilhar seus perfis do Chef InSpec na seção Ferramentas e plug-ins do Chef Supermarket. Faça login e adicione os detalhes do seu perfil.
Você também pode procurar no Supermercado perfis de conformidade compartilhados.
Chef InSpec foi originalmente criado por Christoph Hartmann (@chris-rock) e Dominik Richter (@arlimus).
Chef InSpec é inspirado no maravilhoso projeto Serverspec. Parabéns a mizzy e a todos os colaboradores!
Os recursos da AWS foram inspirados no inspec-aws do arothian.
A comunidade e os mantenedores do Chef InSpec são muito ativos e prestativos. Este projeto se beneficia muito com esta atividade.
Se você quiser conversar diretamente com a comunidade e os mantenedores, junte-se a nós no canal #inspec
no Chef Community Slack.
Como lembrete, espera-se que todos os participantes sigam o Código de Conduta.
Oferecemos testes unit
e integration
.
unit
garantem o comportamento pretendido da implementaçãointegration
executados em VMs baseadas em Docker por meio de test-kitchen e kitchen-inspecbundle exec rake test
Se você deseja executar apenas um arquivo de teste:
bundle exec m test/unit/resources/user_test.rb
Você também pode executar um único teste dentro de um arquivo por número de linha:
bundle exec m test/unit/resources/user_test.rb -l 123
Esses testes baixam várias máquinas virtuais para garantir que o Chef InSpec esteja funcionando conforme esperado em diferentes sistemas operacionais.
Esses testes requerem as seguintes joias:
Essas gems são fornecidas por meio do grupo integration
no Gemfile do projeto.
Além disso, esses testes exigem que o Docker esteja disponível em sua máquina ou em uma máquina Docker remota configurada por meio das variáveis de ambiente padrão do Docker.
Liste as várias instâncias de teste disponíveis:
KITCHEN_YAML=kitchen.dokken.yml bundle exec kitchen list
As plataformas e suítes de testes são configuradas no arquivo kitchen.dokken.yml
. Depois de saber qual instância deseja testar, teste-a:
KITCHEN_YAML=kitchen.dokken.yml bundle exec kitchen test < INSTANCE_NAME >
Você pode testar todas as instâncias em paralelo com:
KITCHEN_YAML=kitchen.dokken.yml bundle exec kitchen test -c 3
Autor: | Dominik Richter ([email protected]) |
Autor: | Christoph Hartmann ([email protected]) |
Direitos autorais: | Direitos autorais (c) 2015 Vulcano Security GmbH. |
Direitos autorais: | Direitos autorais (c) 2017-2020 Chef Software Inc. |
Direitos autorais: | Direitos autorais (c) 2020-2023 Progress Software Corp. |
Licença: | Licença Apache, versão 2.0 |
Licença: | Contrato de licença de usuário final do Chef |
Distribuições embaladas de produtos Progress® Chef® obtidas de qualquer fonte de distribuição autorizada do Progress Chef são disponibilizadas de acordo com o EULA do Progress Chef em https://www.chef.io/end-user-license-agreement, a menos que haja um contrato assinado em vigor entre você e a Progress que cobre os produtos Progress Chef ("Contrato Master"), caso em que o Contrato Master prevalecerá.
O código-fonte obtido no repositório Chef GitHub é disponibilizado no Apache-2.0, cuja cópia está incluída abaixo.
Licenciado sob a Licença Apache, Versão 2.0 (a "Licença"); você não pode usar este arquivo exceto em conformidade com a Licença. Você pode obter uma cópia da Licença em
http://www.apache.org/licenses/LICENSE-2.0
A menos que exigido pela lei aplicável ou acordado por escrito, o software distribuído sob a Licença é distribuído "COMO ESTÁ", SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, expressas ou implícitas. Consulte a Licença para saber o idioma específico que rege as permissões e limitações da Licença.