インフラストラクチャ、アプリケーション、クラウドリソースをテストおよび監査するためのフレームワークです。システムの実際の状態を、Rubyで記述されるテストコードでテストします、違反を検出し、スキャン結果を、JSON、YAML、Excel(CSV)形式で出力表示します。テストはカスタマイズ可能であり、テスト項目はユーザーが修正できるようになっています。

コンプライアンス、セキュリティ、ポリシー要件を迅速かつ簡単に記述するのに役立つ豊富なリソースが用意されています。

DevOps CI/CDパイプラインに組み込むことで、インフラのDevSecOpsを実現することができるツールです。

米国Progress社により開発、メンテナンスされています。

InSpecテスト実行

InSpecプロファイルを使用します。

InSpecプロファイルには、RSpecやServerspecライクのテストコードを記述します。以下はその一例です。

describe sshd_config do
  its('PermitRootLogin') { should_not cmp 'yes' }
end

describe package('telnetd') do
  it { should_not be_installed }
end 

describe inetd_conf do
  its("telnet") { should eq nil }
end

上記のテストコードで「ROOTログインが無効化されていること」「telnetが使われていないこと」をテストします。

・実行コマンド:

inspec exec [プロファイル名]

# ローカルでテスト実行
inspec exec test.rb

# SSH経由でリモートホストにテスト実行
inspec exec test.rb -t ssh://user@hostname -i /path/to/key

# WinRM経由でリモートWindowsホストにテスト実行
inspec exec test.rb -t winrm://Administrator@windowshost --password 'your-password'

# WinRM経由でドメインユーザーでリモートWindowsホストにテスト実行
inspec exec test.rb -t winrm://windowshost --user 'UserName@domain' --password 'your-password'

# Docker コンテナに対するテスト実行
inspec exec test.rb -t docker://container_id

その他の実行オプションについては、InSpec CLI ドキュメントをご覧ください。

・結果:

Profile: Chef InSpec Profile (example_profile)
Version: 0.1.0
Target:  local://

  ✔  example-1.0: Ensure root login is disabled via SSH
  ✔  SSHD Configuration PermitRootLogin should not cmp == "yes"

Profile Summary: 1 successful control, 0 control failures, 0 controls skipped
Test Summary: 1 successful, 0 failures, 0 skipped

上記例では、sshd_config リソースが使用されています。リソースを活用することで、視認性が良いテストを書くことができます。
1100を超える豊富なリソースが用意されています。AWS、Azure、AliCloud、およびGCPのクラウドャをテストするためのリソースも含まれており、必要なリソースがない場合は独自のカスタムリソースを作成できます。

テスト結果の出力とレポート

様々な出力フォーマットがあります。

・Web UI

JSONHTML、またはExcel・CSVへの出力も可能です。

カテゴリー: InSpec