InSpecでIISにインフラ構成テスト

InSpecでIISテスト開発
ananititによるPixabayからの画像

※この記事にはプロモーションが含まれています。

今回は、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での構成テストの紹介でした。

コメント