cloud-init とマシンイメージ
手動インストールを省く方法は 2 つあります。VPS を作成するときに cloud-init テンプレートを 貼り付ける方法と、すべてがすでにインストールされた マシンイメージ を作る方法です。
cloud-init(1 度に 1 台)
panel/deploy/cloud-init.yaml は user-data テンプレートです。先頭のいくつかの設定を編集し、
サーバー作成時にプロバイダーの「user data」欄へ貼り付けると、サーバーの起動が終わる頃には
パネルが立ち上がっています。進捗とすべての失敗は
/var/log/nimbopanel-provision.log に記録されます。
user data を秘密の保管場所として扱わないこと
ここは 2 度読む価値のある部分です。すべての主要プロバイダーで、user data は 稼働中の
インスタンスの内部から 169.254.169.254 の HTTP 経由で取得可能なままです — そしてその
アドレスは、ホスティング顧客の PHP スクリプトを含め、マシン上の あらゆる プロセスから
到達できます。
つまり、user data に貼り付けたライセンスキーは、何かがそれを止めない限り、あなたがホストする すべての顧客から読み取れます。テンプレートはこれを 2 段階で、この順序で止めます。
- キーがディスクに到達する 前 に、root 以外のすべてからメタデータサービスを閉じる。
- インストーラーがキーを root 専用の設定に保存したあと、user data のディスク上のコピーを シュレッドする。
そもそもキーをそこに置きたくないなら、空欄のままにして、あとからパネルで入力してください。 そうするまでサーバーは未ライセンスで稼働しますが、これはサポートされた状態です。
マシンイメージ(1 回のビルドから多数のサーバー)
panel/deploy/packer/nimbopanel.pkr.hcl は、スタック全体をインストールしたイメージをビルド
します。時間がかかるのはそこ — パッケージ、PHP、メール、DNS、データベース — であり、
その内容はサーバー間で違いません。
すべてのクローンを同じサーバーにしてしまう間違い
イメージには アイデンティティが含まれてはなりません。含まれていると、そのイメージから 作るすべてのサーバーがそのアイデンティティを共有します。
| 誤って焼き込まれたもの | 各クローンで起きること |
|---|---|
| SSH ホスト鍵 | すべてが同じ鍵を提示します。顧客とそのサーバーの間に入った者は、そのすべてを、何の警告もなくなりすませます |
| Nimbopanel の instance-id | ライセンスフィンガープリント がそこから導出され、インストーラーはすでに存在する id を再生成しないため — 数千のサーバーが 1 つのアクティベーションに見えます |
/etc/machine-id |
systemd、DHCP リース、journald のアイデンティティが衝突します |
| パネルのデータベースと設定 | 管理者パスワード、ライセンスキー、そしてすべてのアカウントが、見知らぬ人がダウンロードするファイルの中に載って出荷されます |
| DKIM 鍵、TLS 証明書 | ビルドマシン用に発行されたもので、クローン上では無意味であり、イメージを持つ全員に漏れます |
これらはどれも自らを名乗りません。あとで、別の誰かによって見つかります。
panel/deploy/image-deidentify.sh はそのすべてを削除し、Packer のビルドはそれを 最後の
ステップとして実行したうえで --check 付きで再実行するので、見た目だけきれいなスナップショットを
作るのではなく、ビルドが失敗します。削除されたものはすべてクローンの初回起動時に再作成されます。
sshd は新しいホスト鍵を生成し、systemd は新しい machine-id を書き、インストーラーは新しい
instance-id を種づけします。
/etc/machine-id は削除ではなく 空 のまま残されます — systemd は空のファイルを「起動時に
生成する」と読みますが、ファイルがないと一部のイメージがまったく起動しなくなるためです。
公開する前に検証する
sudo ./image-deidentify.sh # remove
sudo ./image-deidentify.sh --check # confirm, exits non-zero if anything survives
ビルド時だけでなく、起動したクローン上でもこのチェックを実行してください。何かが報告された なら、そのイメージを公開しないでください。
マーケットプレイスへの掲載
プロバイダーの「1-click app」プログラム(Vultr、DigitalOcean、Linode、Contabo)は、それぞれ 独自の申請フォーマットと審査を持っています。上のイメージは彼らが求める成果物ですが、 書類手続きはプロバイダーごとに異なり、このツールが代わりに行えるものではありません。