有关项目状态和 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
除非适用法律要求或书面同意,否则根据许可证分发的软件均按“原样”分发,不带任何明示或暗示的保证或条件。请参阅许可证,了解许可证下管理权限和限制的特定语言。