Дополнительную информацию о состояниях проекта и соглашениях об уровне обслуживания см. в этой документации.
Chef InSpec — это среда тестирования инфраструктуры с открытым исходным кодом, использующая человеко- и машиночитаемый язык для определения требований соответствия, безопасности и политики.
# 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 позволяет легко проводить тесты где угодно. Дополнительные параметры можно найти в нашей документации по 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 требует Ruby ( >= 3.0.3 ).
Все поддерживаемые в настоящее время версии Chef InSpec (4.0 и более поздние версии) требуют принятия лицензионного соглашения для использования. Посетите страницу принятия лицензии на сайте документации Chef для получения дополнительной информации.
Пакет Chef InSpec доступен для MacOS, RedHat, Ubuntu и Windows. Загрузите последний пакет на странице «Загрузки Chef InSpec» или установите Chef InSpec с помощью сценария:
# 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
Замените
своим идентификатором лицензии.
Дополнительные сведения о сценариях установки см. в документации по сценариям установки Chef.
Для установки Chef InSpec из исходного кода может потребоваться установка инструментов сборки Ruby для управления зависимостями драгоценных камней. (Доступен вариант без компилятора с ограниченной функциональностью; используйте inspec-core-bin
и inspec-core
.)
Чтобы установить инструменты сборки, используйте менеджер пакетов.
Для CentOS/RedHat/Fedora:
yum -y install ruby ruby-devel make gcc gcc-c++
Для Убунту:
apt-get -y install ruby ruby-dev gcc g++ make
Чтобы установить исполняемый файл inspec
, требующий принятия лицензии Chef, выполните:
gem install inspec-bin
Вы также можете использовать inspec
как библиотеку без исполняемого файла. Для этого не требуется принимать лицензию. Чтобы установить библиотеку как драгоценный камень, запустите:
gem install inspec
Загрузите изображение и для удобства определите функцию:
Для Linux:
docker pull chef/inspec
function inspec { docker run -it --rm -v $(pwd):/share chef/inspec "$@"; }
Для Windows (PowerShell):
docker pull chef/inspec
function inspec { docker run -it --rm -v "$(pwd):/share" chef/inspec $args; }
Если вы вызываете inspec
из своей оболочки, он автоматически монтирует текущий каталог в контейнер Docker. Поэтому вы можете легко использовать локальные тесты и файлы ключей. Примечание. В контейнере доступны только файлы в текущем каталоге и подкаталогах.
$ 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
Чтобы сканировать Docker-контейнеры, работающие на хосте, с помощью контейнеризованного InSpec, нам необходимо привязать сокет Unix /var/run/docker.sock
от хост-компьютера к контейнеру 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
— это сокет Unix, который по умолчанию прослушивает демон Docker.
Обратите внимание, что установка из пакетов ОС со страницы загрузки является предпочтительным методом.
Для этого требуется упаковщик:
bundle install
bundle exec inspec help
Чтобы установить его как драгоценный камень локально, запустите:
gem build inspec.gemspec
gem install inspec- * .gem
В Windows вам необходимо установить Ruby с Ruby Development Kit, чтобы создавать зависимости с его собственными расширениями.
В настоящее время этот метод установки поддерживает только Linux. Дополнительную информацию можно найти на сайте Chef Habitat.
Загрузите двоичный файл hab
с сайта Chef Habitat.
hab pkg install chef/inspec --binlink
inspec
Теперь вы сможете запустить:
$ 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
, чтобы убедиться, что в качестве драйвера настроен только Vagrant. Форматирование %w() пройдет проверку Rubocop и позволит вам получить доступ к вложенным сопоставлениям. describe yaml ( '.kitchen.yml' ) do
its ( %w( driver name ) ) { should eq ( 'vagrant' ) }
end
Также обратите внимание на наши примеры:
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
Запустите тесты на разных целях:
# 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
Проверьте свою конфигурацию и определите
id= $( docker run -dti ubuntu:14.04 /bin/bash )
inspec detect -t docker:// $id
Что обеспечит вам:
{"family":"ubuntu","release":"14.04","arch":null}
Удаленные цели
Платформа | Версии | Архитектуры |
---|---|---|
ЭКС | 6.1, 7.1, 7.2 | ppc64 |
ЦентОС | 6, 7, 8 | i386, x86_64 |
Дебиан | 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 |
Ред Хэт Энтерпрайз Линукс | 7, 8, 9 | i386, x86_64 |
Солярис | 10, 11 | спарк, х86 |
Окна* | 8, 8.1, 10, 2012, 2012R2, 2016, 2019 | х86, х86_64 |
Убунту Линукс | х86, х86_64 | |
SUSE Linux Enterprise Server | 12, 15 | x86_64 |
Научный Linux | 6, 7 | i386, x86_64 |
Федора | x86_64 | |
OpenSUSE | 15 | x86_64 |
ОмниОС | x86_64 | |
Генту Линукс | x86_64 | |
Арч Линукс | x86_64 | |
HP-UX | 11.31 | ia64 |
Альпийский Линукс | x86_64 |
* Для Windows требуется PowerShell 5.0 или более поздней версии.
Кроме того, обеспечивается поддержка во время выполнения:
Платформа | Версии | Арка |
---|---|---|
macOS | 11+ | x86_64, рука64 |
Дебиан | 9, 10 | x86_64, аарх64 |
РЭЛ | 7, 8, 9 | x86_64, аарх64 |
Федора | 29+ | x86_64, аарх64 |
Убунту | 16.04+ | x86_64, аарх64 |
Окна | 8+ | x86_64 |
Окна | 2012+ | x86_64 |
Документация
Изучите шеф-повара:
Связь с другими инструментами (RSpec, Serverspec):
Вы можете поделиться своими профилями Chef InSpec в разделе «Инструменты и плагины» Chef Supermarket. Войдите и добавьте данные своего профиля.
Вы также можете просмотреть в супермаркете общие профили соответствия.
Chef InSpec изначально был создан Кристофом Хартманном (@chris-rock) и Домиником Рихтером (@arlimus).
Chef InSpec вдохновлен замечательным проектом Serverspec. Спасибо Миззи и всем участникам!
Ресурсы AWS были вдохновлены инспекциями от Arothian.
Сообщество и сопровождающие Chef InSpec очень активны и готовы помочь. Этот проект получает большую выгоду от этой деятельности.
Если вы хотите напрямую пообщаться с сообществом и сопровождающими, присоединяйтесь к нам на канале #inspec
в сообществе Chef Slack.
Напоминаем, что все участники должны соблюдать Кодекс поведения.
Мы предлагаем unit
и integration
тесты.
unit
тесты обеспечивают предполагаемое поведение реализацииintegration
тесты выполняются на виртуальных машинах на базе Docker с помощью test-kitchen и Kitchen-inspec.bundle exec rake test
Если вы хотите запустить только один тестовый файл:
bundle exec m test/unit/resources/user_test.rb
Вы также можете запустить один тест внутри файла по номеру строки:
bundle exec m test/unit/resources/user_test.rb -l 123
В ходе этих тестов загружаются различные виртуальные машины, чтобы убедиться, что Chef InSpec работает должным образом в разных операционных системах.
Для этих тестов требуются следующие драгоценные камни:
Эти драгоценные камни предоставляются через группу integration
в Gemfile проекта.
Кроме того, для этого теста требуется, чтобы Docker был доступен на вашем компьютере или на удаленном компьютере Docker, настроенном с помощью стандартных переменных среды Docker.
Перечислите различные доступные экземпляры тестов:
KITCHEN_YAML=kitchen.dokken.yml bundle exec kitchen list
Платформы и наборы тестов настраиваются в файле kitchen.dokken.yml
. Как только вы узнаете, какой экземпляр хотите протестировать, протестируйте его:
KITCHEN_YAML=kitchen.dokken.yml bundle exec kitchen test < INSTANCE_NAME >
Вы можете протестировать все экземпляры параллельно:
KITCHEN_YAML=kitchen.dokken.yml bundle exec kitchen test -c 3
Автор: | Доминик Рихтер ([email protected]) |
Автор: | Кристоф Хартманн ([email protected]) |
Авторские права: | Авторские права (c) принадлежат Vulcano Security GmbH, 2015 г. |
Авторские права: | Авторские права (c) 2017–2020 Chef Software Inc. |
Авторские права: | Авторские права (c) 2020–2023, Progress Software Corp. |
Лицензия: | Лицензия Apache, версия 2.0 |
Лицензия: | Лицензионное соглашение с конечным пользователем Chef |
Упакованные дистрибутивы продуктов Progress® Chef®, полученные из любого авторизованного источника распространения Progress Chef, доступны в соответствии с лицензионным соглашением Progress Chef по адресу https://www.chef.io/end-user-license-agreement, если не имеется оформленного соглашения. действующее между вами и компанией Progress, распространяющееся на продукты Progress Chef («Генеральное соглашение»), и в этом случае преимущественную силу имеет Основное соглашение.
Исходный код, полученный из репозитория Chef GitHub, доступен в рамках Apache-2.0, копия которого приведена ниже.
Лицензируется по лицензии Apache версии 2.0 («Лицензия»); вы не можете использовать этот файл, кроме как в соответствии с Лицензией. Вы можете получить копию Лицензии по адресу:
http://www.apache.org/licenses/LICENSE-2.0
Если это не требуется действующим законодательством или не согласовано в письменной форме, программное обеспечение, распространяемое по Лицензии, распространяется на условиях «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ, явных или подразумеваемых. См. Лицензию для определения конкретного языка, регулирующего разрешения и ограничения в рамках Лицензии.