インフラ構築時の注意点としては、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"が消えた。 |