~~NOCACHE~~ ## 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"%%が消えた。 | {{tag>AWS RHEL 実践的}}