目次

91.cloud-init調査

https://cloudinit.readthedocs.io/en/latest/topics/modules.html#modules

設定方針

インフラ構築時の注意点としては、AMI化したインスタンスからリストアする際に、cloud-initによって、設定が初期化されないようにしたい。

cloud_init_modules: モジュール頻度 抑止対象
- disk_setup シンプルなパーティションテーブルとファイルシステムを設定します。 インスタンス別
- migrator cloud-initの古いバージョンを新しいバージョンに移行します。 常時
- bootcmd ブートプロセスの初期段階でコマンドを実行します。 常時
- write-files 任意のファイルを書き込みます。 インスタンス別
- growpart パーティションのサイズを変更して、利用可能なディスク領域を埋めます。 常時
- resizefs ファイルシステムのサイズを変更し、パーティションで利用可能な領域をすべて使用します。 常時
- set_hostname ホスト名および完全修飾ドメイン名(FQDN)を設定します。 常時
- update_hostname ホスト名およびFQDNを更新します。 常時
- update_etc_hosts /etc/hostsを更新します。 常時
- rsyslog rsyslogを使用してリモートシステムロギングを設定します。 インスタンス別
- users-groups ユーザーおよびグループを設定します。 インスタンス別
- ssh SSH、ホスト、および認可されたSSH鍵を設定します。(/etc/ssh、/root/.ssh配下)
SSHパスワード認証を有効または無効にします。(ssh_pwauthに基づき/etc/ssh/sshd_config変更)
インスタンス別
cloud_config_modules: モジュール頻度 抑止対象
- mounts マウントポイントとスワップファイルを設定します。 インスタンス別
- locale システムロケールを設定し、システム全体に適用します。 インスタンス別
- set-passwords ユーザーパスワードを設定します。 インスタンス別
- rh_subscription RedHatEnterpriseLinuxシステムを登録します。 インスタンス別
- yum-add-repo yumリポジトリー設定をシステムに追加します。 常時
- package-update-upgrade-install 起動時にパッケージを更新、アップグレード、またはインストールできます。 インスタンス別
- timezone システムのタイムゾーンを設定します。 インスタンス別
- puppet puppetをインストールおよび設定します。 インスタンス別
- chef CA証明書を追加します。 インスタンス別
- salt-minion saltminionをインストール、設定、および開始します。 インスタンス別
- mcollective mcollectiveをインストール、設定、および起動します。 インスタンス別
- disable-ec2-metadata AWSEC2メタデータを有効または無効にします。 常時
- runcmd 任意のコマンドを実行します。 インスタンス別
cloud_final_modules: モジュール頻度 抑止対象
- rightscale_userdata cloud-initにRightScale設定フックのサポートを追加します。 インスタンス別
- scripts-per-once スクリプトを1回実行します。 1回
- scripts-per-boot 起動スクリプトごとに実行します。 常時
- scripts-per-instance インスタンススクリプトごとに実行します。 インスタンス別
- scripts-user ユーザースクリプトを実行します。 インスタンス別
- ssh-authkey-fingerprints ユーザーのSSH鍵のフィンガープリントをログに記録します。 インスタンス別
- keys-to-console コンソールに書き込むことができるフィンガープリントとキーの制御を許可します。 インスタンス別
- phone-home 起動完了後にリモートホストにデータを投稿します。 インスタンス別
- final-message cloud-initの完了後に出力メッセージを指定します。 常時
- power-state-change すべての設定モジュールの実行後にシャットダウンを完了し、再起動します。 インスタンス別

設定案

設定方針の動作となるように/etc/cloud/cloud.cfgを以下の通り設定。

※抜粋した内容なので、cloud_init_modules:、cloud_config_modules:で、それぞれ対応している項目のみコメントアウトします。
 preserve_hostname: trueは末尾にでも記載ください。

cloud_init_modules:
# - set_hostname
# - update_hostname
# - update_etc_hosts
# - users-groups
# - ssh

cloud_config_modules:
# - locale
# - set-passwords
# - package-update-upgrade-install
# - timezone

preserve_hostname: true

動作確認結果

以下の初期設定項目に対して、AMIから起動した場合の動作について調査してみた。
2021/01/03調査項目以外の実行されてもサーバ設定に影響のないと思われる部分は継続調査とする。

AMIから起動
項目 再起動 対策なし 対策あり 備考
SELinuxの無効化 変化なし 変化なし 変化なし 対象外
ec2-userユーザ削除 変化なし 再設定 変化なし # - users-groups ec2-userユーザが再登録された。(AMIから起動)
ec2-userグループ削除 変化なし 再設定 変化なし # - users-groups ec2-userユーザが再登録された。(AMIから起動)
/etc/sudoersからec2-user行削除 変化なし 変化なし 変化なし # - users-groupsが有効でも追記されない。
/etc/sudoers.d/90-cloud-init-usersから
ec2-user行削除
変化なし 再設定 変化なし # - users-groups
ec2-user ALL=(ALL) NOPASSWD:ALLが追記された(AMIから起動)
rootのSSH鍵変更(/root/.ssh/authorized_keys) 変化なし 再設定 変化なし # - ssh
authorized_keysに追記された。(AMIから起動)※再作成ではなく追記されるため、無効を推奨
ホスト名変更(hostnamectl –static set-hostname) 変化なし 再設定 変化なし # - set_hostname
# - update_hostnameだけではNG、preserve_hostname: trueを追記することで無効とできた。
Hostsファイル(/etc/hosts) 変化なし 変化なし 変化なし # - update_etc_hosts
manage_etc_hostsに設定されたfqdn、hostnameに従って更新される。デフォルトでは何もしない
ロケール設定(localectl set-locale LANG=ja_JP.UTF-8) 変化なし 再設定 変化なし # - locale
デフォルトでLANG=en_US.UTF-8に再設定された。(AMIから起動)
タイムゾーン(timedatectl set-timezone Asia/Tokyo) 変化なし 変化なし 変化なし # - timezone
timezone:を明示的に記載することで再設定された。(AMIから起動)デフォルトでは何もしない。
sshd_config(PasswordAuthentication) 変化なし 再設定 変化なし # - ssh
ssh_pwauthの設定によりPasswordAuthenticationが再設定される
ssh_pwauth:0はPasswordAuthentication=no、ssh_pwauth:1はPasswordAuthentication=yes
sshd_config(PermitRootLogin) 変化なし 変化なし 変化なし # - sshが有効でも変更されない。
rootのauthorized_keysのcommandでログインを抑止していることから、sshd_config(PermitRootLogin)とは関係ない。
※/etc/cloud/cloud.cfgをdisable_root: 0とするとrootのSSH鍵変更(/root/.ssh/authorized_keys)のrootログイン制限
no-port-forwarding...command="echo 'Please login as the user...';echo;sleep 10;exit 142"が消えた。