こんにちは。インフラの世界へようこそ。
「サーバーを構築したけれど、本当に正しく設定されているのか不安だ……」
「設定変更のたびに手作業で検証して、何時間も溶かしている……」
もしあなたがそんな悩みを抱えているなら、今日がその地獄からの脱出記念日です。世界中のSREが信頼を寄せる「Chef InSpec」の世界へ案内しましょう。
—
1. InSpecとは?インフラを「コード」で裁くということ
インフラ管理において、最も怖いのは「設定のドリフト(意図しないズレ)」です。IaC(Infrastructure as Code)で構築しても、誰かが手動で設定を変えてしまえば、そのコードはただの紙屑になります。
InSpecは、サーバーの状態を「期待値」と比較し、合格か不合格かを自動判定するテストフレームワークです。
- 「ポート80は開いているか?」
- 「SSHのルートログインは禁止されているか?」
- 「特定のパッケージのバージョンは最新か?」
これらを人間が目視で確認する時代は終わりました。InSpecを使えば、セキュリティ基準(CISベンチマークなど)すらも「コード」として定義し、一瞬で監査可能になります。
—
2. 環境構築と「HelloWorld」:最初のテストを書こう
まずは、あなたのマシンにInSpecをインストールしましょう。[公式サイト](https://www.inspec.io/)から「Chef Workstation」をインストールするのが一番の近道です。これ一つで、InSpecだけでなくChefの全ツールが揃います。
ステップ1:プロファイルの初期化
InSpecでは、テストの集まりを「プロファイル」と呼びます。
‘my-web-server’ という名前のプロファイルを作成
inspec init profile my-web-server
ステップ2:最初のテストを書く
生成されたディレクトリの中にある `controls/example.rb` を開いてください。ここにテストを記述します。例えば、「nginxがインストールされ、起動していること」を確認するコードはこうなります。
controls/example.rb
control ‘nginx-check’ do
title ‘Nginxの動作確認’
desc ‘Nginxがインストールされ、サービスとして起動していることを検証する’
# パッケージがインストールされているか
describe package(‘nginx’) do
it { should be_installed }
end
# サービスが稼働中か
describe service(‘nginx’) do
it { should be_running }
it { should be_enabled }
end
end
ステップ3:テストの実行
手元のローカル環境、あるいはリモートサーバーに対して実行してみましょう。
ローカルで実行する場合
inspec exec my-web-server
リモートサーバーに対して実行する場合
inspec exec my-web-server -t ssh://user@server-ip -i ~/.ssh/id_rsa
実行結果が緑色で表示されれば成功です。これが、あなたのインフラを守る「最初の盾」です。
—
3. CI/CDへの統合:守りを自動化する
InSpecが真価を発揮するのは、CI/CDパイプラインに組み込んだ時です。
Chefで設定を流し込んだ直後にInSpecを走らせる。もしテストが失敗すれば、パイプラインを即座に停止させる。これにより、「壊れた状態のサーバー」が本番環境へデプロイされることを物理的に阻止できます。
現場のTips:
GitHub ActionsやJenkinsのパイプラインで以下のように実行します。
GitHub Actionsの例
- name: Run InSpec Audit
run: inspec exec ./my-web-server -t ssh://prod-server –reporter cli json:report.json
テスト結果をJSONで出力し、それをセキュリティダッシュボードに送ることで、「今のインフラがどれだけ安全か」を経営層に可視化することも可能です。
—
4. セキュリティ監査の自動化:CISベンチマークの適用
InSpecが伝説的なツールと呼ばれる理由は、コミュニティが提供している「Compliance Profiles」にあります。
ゼロからセキュリティ要件を書く必要はありません。世界標準のセキュリティ基準である「CISベンチマーク」に対応したプロファイルがオープンソースで公開されています。
既存のCISプロファイルをインポートして実行する
inspec exec https://github.com/dev-sec/linux-baseline -t ssh://user@server-ip
これだけで、パスワードの複雑性、不要なサービスの停止、パーミッションの不備など、数百項目に及ぶ監査が数秒で終わります。「監査のたびに徹夜で設定チェック」という悪習とは、今日でお別れです。
—
最後に:エンジニアとしての心得
インフラをコード化する最大のメリットは、作業が楽になることではありません。「いつでも自信を持ってシステムを変更できる」という心理的安全性を手に入れられることです。
InSpecでテストを書き始めれば、サーバーの設定変更が「恐怖」から「ルーチン」に変わります。まずは手元の小さな設定からテストしてみてください。
何か困ったことがあれば、いつでも聞かせてください。あなたのインフラライフが、より堅牢で、より創造的なものになることを心から応援しています。