プロジェクトの状態と 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 をソースからインストールするには、Gem の依存関係を管理するために Ruby ビルド ツールのインストールが必要になる場合があります。 (機能が制限されたコンパイラ不要のバリアントも利用可能です。 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 License への同意が必要です。次のコマンドを実行します。
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; }
シェルから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 ソケットです。
ダウンロード ページの OS パッケージからインストールすることが推奨される方法であることに注意してください。
それにはバンドラーが必要です。
bundle install
bundle exec inspec help
これを gem としてローカルにインストールするには、次を実行します。
gem build inspec.gemspec
gem install inspec- * .gem
Windows では、ネイティブ拡張機能との依存関係を構築するには、Ruby Development Kit を使用して Ruby をインストールする必要があります。
現在、このインストール方法は Linux のみをサポートしています。詳細については、Chef Habitat サイトをご覧ください。
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 lint を渡し、ネストされたマッピングにアクセスできるようにします。 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 |
CentOS | 6、7、8 | i386、x86_64 |
デビアン | 9、10 | i386、x86_64 |
FreeBSD | 9、10、11 | i386、amd64 |
macOS | 11.0 | x86_64 |
Oracle エンタープライズ Linux | 6、7、8 | i386、x86_64 |
レッドハット エンタープライズ リナックス | 7、8、9 | i386、x86_64 |
ソラリス | 10、11 | スパーク、x86 |
Windows* | 8、8.1、10、2012、2012R2、2016、2019 | x86、x86_64 |
Ubuntu Linux | x86、x86_64 | |
SUSE Linux エンタープライズ サーバー | 12、15 | x86_64 |
科学的Linux | 6、7 | i386、x86_64 |
フェドーラ | x86_64 | |
OpenSUSE | 15 | x86_64 |
オムニOS | x86_64 | |
Gentoo Linux | x86_64 | |
Arch Linux | x86_64 | |
HP-UX | 11.31 | ia64 |
アルパイン・リナックス | 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 |
Ubuntu | 16.04+ | x86_64、aarch64 |
窓 | 8+ | x86_64 |
窓 | 2012年以降 | x86_64 |
ドキュメント
シェフを学ぶ:
他のツール (RSpec、Serverspec) との関係:
Chef スーパーマーケットの [ツールとプラグイン] セクションで 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
テストは、test-kitchen およびkitchen-inspec を介して Docker ベースの VM に対して実行されます。bundle exec rake test
テスト ファイルを 1 つだけ実行したい場合は、次のようにします。
bundle exec m test/unit/resources/user_test.rb
ファイル内で行番号を指定して単一のテストを実行することもできます。
bundle exec m test/unit/resources/user_test.rb -l 123
これらのテストでは、Chef InSpec がさまざまなオペレーティング システム間で期待どおりに動作することを確認するために、さまざまな仮想マシンをダウンロードします。
これらのテストには次の gem が必要です。
これらの 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。 |
著作権: | Copyright (c) 2017-2020 Chef Software Inc. |
著作権: | Copyright (c) 2020-2023 Progress Software Corp. |
ライセンス: | Apache ライセンス、バージョン 2.0 |
ライセンス: | Chef エンドユーザー使用許諾契約書 |
認可された Progress Chef 配布元から入手した Progress® Chef® 製品のパッケージ版は、締結された契約がない限り、https://www.chef.io/end-user-license-agreement にある Progress Chef EULA に従って利用可能になります。 Progress Chef 製品を対象とするお客様と Progress の間で有効な契約 (以下「基本契約」) が成立し、その場合には基本契約が適用されます。
Chef GitHub リポジトリから取得したソース コードは、Apache-2.0 で利用可能です。そのコピーは以下に含まれています。
Apache License バージョン 2.0 (「ライセンス」) に基づいてライセンスされています。ライセンスに準拠する場合を除き、このファイルを使用することはできません。ライセンスのコピーは次の場所で入手できます。
http://www.apache.org/licenses/LICENSE-2.0
適用される法律で義務付けられている場合または書面による同意がない限り、ライセンスに基づいて配布されるソフトウェアは、明示または黙示を問わず、いかなる種類の保証や条件もなく、「現状のまま」で配布されます。ライセンスに基づく許可と制限を規定する特定の言語については、ライセンスを参照してください。