~~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 実践的}}