InSpecの概要
インフラストラクチャ、アプリケーション、クラウドリソースをテストおよび監査するためのフレームワークです。システムの実際の状態を、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

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