閉域網でChefを操る:エアーギャップ環境における「完全自律型」構成管理術
こんにちは。インフラの世界へようこそ。
クラウドの恩恵を享受し、インターネット経由でパッケージを`apt install`や`yum install`する日常は非常に快適です。しかし、金融、医療、あるいは極秘の研究機関といった現場では、「インターネットから完全に遮断された環境(エアーギャップ環境)」でシステムを構築しなければならない場面が必ず訪れます。
今日は、そんな過酷な環境下で、Chefを用いた「真の構成管理」を実現するためのロードマップを授けましょう。これをマスターすれば、外部依存のない、堅牢で再現性の高いインフラをあなたの手元で完結させることができます。
—
1. なぜ「閉域網Chef」が必要なのか?
通常、Chefはインターネット上のChef SupermarketやGitHubからレシピをダウンロードします。しかし、外部接続が断たれると、これらのソースにアクセスできず、インフラの自動化は停止します。
解決策はシンプルです。「全てを自分の庭(閉域網内)に持ち込む」こと。
具体的には、以下の3つのコンポーネントを閉域網内に構築します。
1. Chef Server: ノードの司令塔。
2. Private Supermarket: Cookbookのプライベートリポジトリ。
3. Local Repository (Artifactory等): 依存ライブラリやOSパッケージのミラー。
—
2. 構築の鉄則:依存関係を「静的」に管理する
エアーギャップ環境で最大の敵は「依存関係の欠如」です。Chefの実行にはRubyやGemが必要ですが、これらを都度インストールするのは非効率です。
現場の知見: 「ポータブルな環境」を作るために、必要なバイナリとGemを全てローカルのディレクトリに固め、それをChefの配布物として含めるのが定石です。
—
3. 実践:閉域網Chefサーバー構築のステップ
手順①:Chef Serverのオフラインインストール
インターネットに繋がる環境で `chef-server-core` のパッケージをダウンロードし、閉域網内のサーバーへ転送します。
インターネット側でダウンロードしたパッケージを転送後、インストール
sudo rpm -ivh chef-server-core-
サーバーの初期化(これがChefの心臓部となります)
sudo chef-server-ctl reconfigure
手順②:Private Supermarketの構築
Chefのレシピ共有基盤であるSupermarketも、独自のローカルインスタンスを立てます。これにより、インターネット上のリポジトリにアクセスせずとも、組織内のCookbookを管理できます。
手順③:Workstationの整備
あなたの作業用PC(Workstation)も閉域網内に置く必要があります。`knife`コマンドがChef Serverと通信できるように、`config.rb`を適切に設定します。
~/.chef/config.rb
閉域網内のChef Server URLを指定
chef_server_url ‘https://chef-server.internal/organizations/my-org’
ローカルで検証した証明書を指定(SSLエラーを避けるため必須)
ssl_verify_mode :verify_none
—
4. Hello World:ローカルCookbookのデプロイ
では、実際に閉域網内で「Webサーバーを起動する」というシンプルなタスクを自動化してみましょう。
1. Cookbookの作成 (Workstation)
chef generate cookbook hello_world
2. レシピの記述 (`hello_world/recipes/default.rb`)
パッケージインストールを宣言
package ‘httpd’ do
action :install
end
設定ファイルを配布
file ‘/var/www/html/index.html’ do
content ‘
Hello, Air-Gap World!
‘
mode ‘0644’
end
サービス起動
service ‘httpd’ do
action [:enable, :start]
end
3. アップロードと実行
閉域網内のChef Serverへアップロード
knife cookbook upload hello_world
ターゲットノードに適用(各ノード上のchef-clientが定期実行)
sudo chef-client
—
5. 現場で震えるほど役立つ「極限の知見」
最後に、ベテランエンジニアとしてこれだけは伝えておきたい「現場の知恵」を共有します。
- 冪等性(べきとうせい)を信じるな、検証せよ: エアーギャップ環境では、失敗した時の再インストールコストが極めて高いです。`chef-client –local-mode` を使い、本番投入前に必ずローカルのVMでレシピの挙動を完全にテストしてください。
- キャッシュサーバーの活用: 全てのノードが個別にパッケージをダウンロードしようとすると、閉域網内のトラフィックを圧迫します。`Squid`や`Nexus`をキャッシュサーバーとして配置し、Chefの実行を「ローカルミラー」経由で行うように設計しましょう。
- バージョン固定の厳守: 公開リポジトリに繋がらない以上、ライブラリのバージョンアップは手動です。`Berksfile.lock` を用いて、依存関係を完全に固定(Lock)し、環境の再現性を担保してください。
—
まとめ
エアーギャップ環境でのChef構築は、一見すると面倒で古臭い作業に見えるかもしれません。しかし、「インターネットという外部要因に一切依存せず、自分のインフラを完全に制御下に置く」という経験は、あなたのエンジニアとしての視座を確実に引き上げます。
「繋がらないなら、自分で繋がる場所を作ればいい」。その精神こそが、インフラエンジニアの真髄です。
さあ、あなたの閉域網という名の「聖域」で、最高の自動化環境を構築してください。応援しています。