有關項目狀態和 SLA 的更多信息,請參閱此文件。
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 及更高版本)都需要接受 EULA 才能使用。請造訪 Chef 文件網站上的許可證接受頁面以獲取更多資訊。
Chef InSpec 軟體包適用於 MacOS、RedHat、Ubuntu 和 Windows。從 Chef InSpec Downloads 下載最新軟體包或透過腳本安裝 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
將
替換為您的許可證 ID。
有關安裝腳本的更多信息,請參閱 Chef 安裝腳本文件。
從原始程式碼安裝 Chef InSpec 可能需要安裝 ruby 建置工具來管理 gem 依賴項。 (可以使用減少功能的無編譯器變體;使用inspec-core-bin
和inspec-core
。)
若要安裝建置工具,請使用套件管理器。
對於 CentOS/RedHat/Fedora:
yum -y install ruby ruby-devel make gcc gcc-c++
對於Ubuntu:
apt-get -y install ruby ruby-dev gcc g++ make
若要安裝inspec
可執行檔(需要接受 Chef 許可證),請執行:
gem install inspec-bin
您也可以使用inspec
作為函式庫,而不需要可執行檔。這不需要接受許可證。若要將庫安裝為 gem,請執行:
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; }
如果您從 shell 呼叫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
要使用容器化的 InSpec 掃描主機上執行的 docker 容器,我們需要將 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
是 Docker 守護程式預設監聽的 Unix 套接字。
請注意,從下載頁面安裝作業系統軟體套件是首選方法。
這需要捆綁器:
bundle install
bundle exec inspec help
若要將其安裝為本機 gem,請執行:
gem build inspec.gemspec
gem install inspec- * .gem
在 Windows 上,您需要使用 Ruby Development Kit 安裝 Ruby,以與其本機擴充程式建置依賴關係。
目前,這種安裝方法僅支援Linux。請參閱廚師棲息地網站以了解更多資訊。
從 Chef Habitat 網站下載hab
二進位。
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 linting,並允許您存取巢狀映射。 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}
遠端目標
平台 | 版本 | 架構 |
---|---|---|
AIX | 6.1、7.1、7.2 | ppc64 |
中央作業系統 | 6, 7, 8 | i386、x86_64 |
德班 | 9, 10 | i386、x86_64 |
自由BSD | 9、10、11 | i386、amd64 |
macOS | 11.0 | x86_64 |
甲骨文企業Linux | 6, 7, 8 | i386、x86_64 |
紅帽企業 Linux | 7、8、9 | i386、x86_64 |
索拉里斯 | 10、11 | sparc、x86 |
視窗* | 8、8.1、10、2012、2012R2、2016、2019 | x86、x86_64 |
烏班圖Linux | x86、x86_64 | |
SUSE Linux 企業伺服器 | 12、15 | x86_64 |
科學Linux | 6, 7 | i386、x86_64 |
軟呢帽 | x86_64 | |
開放SUSE | 15 | x86_64 |
OmniOS | x86_64 | |
Gentoo Linux | x86_64 | |
架構Linux | x86_64 | |
惠普-UX | 11.31 | ia64 |
阿爾卑斯Linux | x86_64 |
*對於 Windows,需要 PowerShell 5.0 或更高版本。
此外,也提供運行時支援:
平台 | 版本 | 拱 |
---|---|---|
macOS | 11+ | x86_64、arm64 |
德班 | 9, 10 | x86_64、aarch64 |
RHEL | 7、8、9 | x86_64、aarch64 |
軟呢帽 | 29+ | x86_64、aarch64 |
烏班圖 | 16.04+ | x86_64、aarch64 |
視窗 | 8+ | x86_64 |
視窗 | 2012+ | x86_64 |
文件
學習廚師:
與其他工具(RSpec、Serverspec)的關係:
您可以在 Chef Supermarket 的工具和插件部分分享您的 Chef InSpec 設定檔。登入並添加您的個人資料的詳細資訊。
您也可以瀏覽超級市場以獲取共享的合規資料。
Chef InSpec 最初由 Christoph Hartmann (@chris-rock) 和 Dominik Richter (@arlimus) 創建。
Chef InSpec 的靈感來自精彩的 Serverspec 專案。向 mizzy 和所有貢獻者致敬!
AWS 資源的靈感來自 arothian 的 inspec-aws。
Chef InSpec 社群和維護人員非常活躍且樂於助人。該項目從這項活動中受益匪淺。
如果您想與社群和維護人員聊天,請直接加入 Chef Community Slack 上的#inspec
頻道。
謹此提醒,所有參與者都應遵守行為準則。
我們提供unit
測試和integration
測試。
unit
測試確保實現的預期行為integration
測試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 在不同作業系統上按預期運作。
這些測試需要以下寶石:
這些 gem 透過專案 Gemfile 中的integration
群組提供。
此外,這些測試要求 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) 2015 Vulcano Security GmbH。 |
版權: | 版權所有 (c) 2017-2020 Chef Software Inc. |
版權: | 版權所有 (c) 2020-2023 Progress Software Corp. |
執照: | Apache 許可證,版本 2.0 |
執照: | Chef 最終用戶許可協議 |
從任何授權的Progress Chef 分發來源獲得的Progress® Chef® 產品的打包分發均根據Progress Chef EULA 提供,網址為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
除非適用法律要求或書面同意,否則根據許可證分發的軟體均以「原樣」分發,不帶任何明示或暗示的保證或條件。請參閱許可證,了解許可證下管理權限和限制的特定語言。