今回は、InSpecを用いたインフラ構成テストを紹介します。Hyper-V上に構築したWindows Serverに対して、Docker Desktop for WindowsのInSpecコンテナからチェックします。
InSpecとは
InSpecは構築ツールで有名なChef社が開発した、環境構築が正しく実施されたかをチェックするフレームワークです。ServerSpecという同系列ツールを基礎としており、テストの記載方法等は似ています。InSpecはRubyで記述されており、セキュリティ要件のチェックに力を入れています。
InSpecの概要やライセンスなどは、InSpec: Auditing and Testing Frameworkで確認してください。
環境構築
サーバー側
InSpecのクライアント/サーバーの接続は、Ansibleと同じ構成・設定を利用することができます。WindowsサーバーとはWinRM、LinuxサーバーとはSSHです。
なので、テスト対象サーバーには、以前Ansible AWXでIISを構築するで構築したWindows Server 2019上のIISサーバーを使用します。構築方法の詳細については、記事を参照してください。
クライアント側
クライアント側は、導入が簡単なDockerコンテナを活用することにします。Docker Desktop for Windowsで、PowershellからLinuxコンテナを操作します。
構築方法は、以前記載したDocker Desktop for Windowsでコンテナ起動を参照してください。
テスト
テスト項目
簡単なテスト項目を下記に示します。ポート開放、Windows機能のインストール状態、IIS構成具合をチェックしています。ファイル名はtest.rbとしました。
describe port(80) do
it { should be_listening }
end
describe windows_feature('Web-WebServer') do
it{ should be_installed }
end
describe iis_site('Default Web Site') do
it { should exist }
it { should be_running }
it { should have_path('%SystemDrive%\\inetpub\\wwwroot') }
end
項目の記載方法は、InSpec Resources Referenceを参照してください。まだまだ、多くのコマンドが用意されています。Linuxの方が多いですけどね。
実行
Powershellから、下記コマンドでInSpecを実行します。
docker run -it --rm -v <テストファイルフォルダパス>:/share chef/inspec exec <テストファイル> -t winrm://<サーバーIPアドレス> --user <WinRM接続ユーザー名> --password <WinRM接続ユーザーパスワード> --chef-license accept-silent
実際に実行したコマンド例は、下記です。
docker run -it --rm -v C:\Folder:/share chef/inspec exec test.rb -t winrm://172.26.220.10 --user 'ansible' --password 'P@ssw0rd' --chef-license accept-silent
成功すると、下記レスポンスが返ってきます。5項目が全てsuccessになっています。
Profile: tests from test.rb (tests from test.rb)
Version: (not specified)
Target: winrm://ansible@http://172.26.220.10:5985/wsman:3389
Port 80
✔ is expected to be listening
Windows Feature 'Web-WebServer'
✔ is expected to be installed
iis_site 'Default Web Site'
✔ is expected to exist
✔ is expected to be running
✔ is expected to have path "%SystemDrive%\\inetpub\\wwwroot"
Test Summary: 5 successful, 0 failures, 0 skipped
IISのサイトを停止した場合は、下記の様にエラーになっていることが分かります。
Profile: tests from test.rb (tests from test.rb)
Version: (not specified)
Target: winrm://ansible@http://172.26.220.10:5985/wsman:3389
Port 80
× is expected to be listening
expected `Port 80.listening?` to be truthy, got false
Windows Feature 'Web-WebServer'
✔ is expected to be installed
iis_site 'Default Web Site'
✔ is expected to exist
× is expected to be running
expected that `iis_site 'Default Web Site'` is running
✔ is expected to have path "%SystemDrive%\\inetpub\\wwwroot"
Test Summary: 3 successful, 2 failures, 0 skipped
まとめ
InSpecを用いれば、構成の確認が何度でも簡単に行えます。自動構築ツール(ChefやAnsible)との役割分担で効率的に作業を実施し、構成不備やセキュリティ設定忘れなどを防止するのに活躍してくれるでしょう。
以上、InSpecでの構成テストの紹介でした。
コメント