ドキュメント / cloud-init とマシンイメージ

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 段階で、この順序で止めます。

  1. キーがディスクに到達する 前 に、root 以外のすべてからメタデータサービスを閉じる。
  2. インストーラーがキーを 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)は、それぞれ 独自の申請フォーマットと審査を持っています。上のイメージは彼らが求める成果物ですが、 書類手続きはプロバイダーごとに異なり、このツールが代わりに行えるものではありません。