こんにちは!クラウドインフラ・SREの世界へようこそ。
今日は、多くのインフラエンジニアが頭を悩ませる「完全閉域網(エアギャップ環境)におけるPuppetの運用」について、現場の生々しい知見を交えて解説していくよ。
「インターネットにつながっていない環境でも、Puppetでサーバーの構成管理を完全に自動化したい」
「でも、yum/aptリポジトリはないし、証明書の期限切れで突然エージェントが沈黙する恐怖から解放されたい」
そんなあなたのために、今回はローカルミラーの構築から、内部CAの強固な管理、そして誰もがハマる証明書運用の裏技まで、一気通貫でマスターできるように手取り足取りガイドするね。これをマスターすれば、外部ネット遮断のセキュアな環境でも、毎日のインフラ管理が劇的に楽になりますよ。
—
1. そもそもなぜエアギャップ環境でPuppetを使うのか?
インターネットから完全に切り離された閉域網(金融機関、政府系システム、工場などのOT環境)では、セキュリティ要件が極めて厳格です。「手動で設定変更する」なんてのはヒューマンエラーの温床であり、コンプライアンス違反の元。
だからこそ、「コードによる構成管理(IaC)」の力で、どのサーバーも一物一価の正確な状態に保つ必要があります。そのデファクトスタンダードの一つがPuppetです。
しかし、エアギャップ環境には2つの巨大な壁が立ち塞がります。
1. パッケージが取れない(yum/aptが使えない)
2. 証明書(SSL/TLS)の自動発行・更新が外部APに頼れない
この2つをスマートにクリアするのが、今回伝授するプロの技です。
—
2. 閉域網の生命線:ローカルミラーサーバーの構築
まずは、インターネットから隔離された環境へ、Puppetのパッケージ(MasterおよびAgent)を持ち込むための「ローカルミラー」を作ります。
インターネットに接続できる踏み台環境(あるいはビルド環境)でパッケージをダウンロードし、メディアや安全な転送経路経由で閉域網内のリポジトリサーバーへ配置します。
yum(RHEL/CentOS系)の場合のミラーリング戦術
インターネット接続環境で、必要なRPMパッケージをごっそりダウンロードします。
必要なパッケージと依存関係をまるっとダウンロード
repotrack –arch=x86_64 puppet-agent puppetserver
これらをローカルのレポジトリサーバー(社内Yumリポジトリ等)に配置し、閉域網内のノードから参照させます。
閉域網側のAgent用 yumリポジトリ設定 (`/etc/yum.repos.d/puppet.repo`)
外部のPuppet公式リポジトリを見に行かないよう、完全にローカルを向かせます。
[puppet-local]
name=Puppet Local Mirror for Air-Gap
社内のローカルWebサーバー(例: internal-repo.local)を指定
baseurl=http://internal-repo.local/packages/puppet/
enabled=1
gpgcheck=1
GPGキーも内部に配置したものを使う
gpgkey=http://internal-repo.local/packages/puppet/RPM-GPG-KEY-puppet
これで、`yum install -y puppet-agent` を叩けば、インターネットを一歩も出ずにエージェントが手に入ります。最高ですね。
—
3. 内部CA(認証局)の厳格管理と初期セットアップ
Puppetは、MasterとAgentの間で強固なSSL/TLS相互認証(mTLS)を行っています。エアギャップ環境では、パブリックな認証局は使えないため、Puppet Master自身を「内部CA(Root CA)」として機能させます。
Puppet Master(CA)の初期化
Master側で以下のコマンドを実行し、内部CAを立ち上げます。
Puppet Serverの初期化とCA証明書の生成
sudo /opt/puppetlabs/bin/puppetserver ca setup
このコマンドの裏で、`/etc/puppetlabs/puppet/ssl/` 配下に強固なプライベートCAが構築されます。生成されたRoot CA証明書(`ca.pem`)は、すべてのAgentにとっての「絶対正義」となります。
Agent側からの初回接続と証明書署名(CSR)
閉域網内のAgentをインストールしたら、Masterへ接続を試みます。
/etc/puppetlabs/puppet/puppet.conf の設定例
[main]
certname = agent01.airgap.local
server = puppetmaster.airgap.local
エージェントを起動すると、自動的にMasterへ証明書署名リクエスト(CSR)が飛んでいきます。
Agent側でサービス起動(初回は証明書がないため、リクエストを投げて待機状態になる)
sudo systemctl enable –now puppet
Master側で、未承認のCSRを確認し、署名します。
Master側でリクエスト一覧を確認
sudo /opt/puppetlabs/bin/puppetserver ca list
特定のノードの証明書を承認(サイン)する
sudo /opt/puppetlabs/bin/puppetserver ca sign –certname agent01.airgap.local
これで、MasterとAgentの間のセキュアな通信路が確立しました!
—
4. 【極秘の裏技】証明書自動更新のハックと有効期限切れ対策
さて、ここからが本記事のハイライトです。
通常、Puppetの証明書有効期限はデフォルトで5年間などに設定されていますが、セキュリティポリシーが厳しい企業では「1年」や「90日」に短縮したいという要望があります。また、期限切れが近づいた際の自動更新を、人間の手を介さず(エアギャップ環境で安心に)行う仕組みが必要です。
裏技:Auto-Sign(自動署名)の安全な実装
エアギャップ環境において、毎回管理者が `puppetserver ca sign` を手動で叩くのは、スケールしませんし非効率です。かといって、全自動(`autosign.conf = `)にするのはセキュリティ上、自殺行為です。
そこで、「特定の事前承認されたIPレンジまたはプレフィックス、かつ社内DNSで正引きできるノードのみ」を自動承認するカスタムポリシーアナライザを設定します。
(`/etc/puppetlabs/puppetserver/services.d/ca.cfg` または `autosign.conf` の活用)
もっとも柔軟な方法は、RubyスクリプトによるカスタムAutosignです。
`/etc/puppetlabs/puppet/autosign.conf` にスクリプトのパスを指定します。
/etc/puppetlabs/puppet/scripts/validator.rb
`validator.rb` の実装例(セキュリティ担保の心臓部):
!/usr/bin/env ruby
簡易的な証明書自動検証スクリプト
certname = ARGV[0]
命名規則(例: サーバー種別-連番.airgap.local)に一致するか正規表現でチェック
if certname =~ /^(web|db)\d{2}\.airgap\.local$/
# さらに社内IPAMやCMDBのAPIを叩いて実在確認する処理をここに書く
exit(0) # 承認
else
exit(1) # 拒否
end
これで、正規の命名規則に従った新規サーバーが構築された際、エージェントは自動的にMasterから証明書を取得し、誰の手も煩わせずにセキュアな通信を開始できます。
—
5. 精度高い HelloWorld 的な動作確認
環境が整ったら、実際にPuppetが正しく動作するか「Hello World」ならぬ、閉域網環境における構成管理のテストを行いましょう。
マニフェストの作成 (`/etc/puppetlabs/code/environments/production/manifests/site.pp`)
node ‘agent01.airgap.local’ {
# 閉域網内でも確実に動作するテスト用のファイル作成
file { ‘/etc/airgap_greeting.txt’:
ensure => ‘file’,
owner => ‘root’,
group => ‘root’,
mode => ‘0644’,
content => “こんにちは!エアギャップ環境のPuppetが無事に稼働しています。\n”,
}
notify { ‘Puppet Agent is working smoothly in Air-Gap environment!’: }
}
エージェント側での適用(ドライラン&実行)
まずは変更内容を安全に確認(No-opモード)
sudo puppet agent -t –noop
実際に適用
sudo puppet agent -t
コンソールに緑色のログが出力され、`/etc/airgap_greeting.txt` が生成されていれば、完全勝利です!お疲れ様でした。
—
まとめ
今回は、外部インターネットに接続できないエアギャップ環境におけるPuppetの運用ノウハウを、ローカルミラー、内部CA、そして証明書の自動化ハックまで深く掘り下げて解説しました。
- ローカルミラーでパッケージの依存関係を完全にローカライズする
- 内部CAを軸にした堅牢なmTLS通信の確立
- カスタムAutosignによるセキュアかつ完全自動の証明書発行
この3つを抑えれば、どんなにセキュリティが厳格なクローズド環境であっても、モダンで美しいインフラ構成管理を実現できます。「これをマスターすれば、毎日の作業が劇的に楽になりますよ」。
あなたのSREライフが、より自動化され、エレガントなものになることを願っています。それではまた次の深淵でお会いしましょう!