カスタムイメージを Alibaba Cloud にインポートしたり、Alibaba Cloud Marketplace で公開したりする前に、イメージがこのトピックの仕様を満たし、Elastic Compute Service (ECS) インスタンスタイプとの互換性テストに合格していることを確認してください。これらの仕様に従うことで、カスタムイメージの可用性とインポート効率が向上し、ビジネスニーズに合わせた ECS インスタンスを作成できます。このトピックでは、Linux イメージを作成するための仕様について説明します。
ディスクパーティション
ディスクパーティションは、次の要件を満たす必要があります。
ディスクのサイズ変更
物理パーティションを使用してディスクをパーティション分割します。システムディスクのサイズ変更時に障害が発生しないように、ルートパーティションは最後のパーティションにする必要があります。
クラウドディスクのオンラインサイズ変更をサポートするシステムの場合は、
growpartコマンドを使用してパーティションのサイズを変更します。そのためには、cloud-utils-growpartパッケージをインストールする必要があります。詳細については、「パーティションとファイルシステムのサイズ変更 (Linux)」をご参照ください。
スワップパーティション
スワップパーティションは作成しないでください。
Logical Volume Management (LVM)
ディスクパーティションに Logical Volume Management (LVM) を使用しないでください。
ディスクのマウント
fstabファイルとgrubファイルを設定するには、UUID を使用する必要があります。詳細については、「UUID を使用して /etc/fstab ファイル内のデータディスクを自動的にマウントする」および「GRUB 設定ファイルでディスクパーティションの識別方法を UUID に変更する」をご参照ください。重要fstabファイルが正しく設定されていない場合、ECS インスタンスは再起動後に起動に失敗することがあります。ディスクサイズ
システムディスクの最小容量は 20 GiB です。
イメージの起動モードの設定
異なる起動モードを使用するインスタンスタイプとの互換性を確保するために、ローカルイメージの起動モード (BIOS または UEFI) を設定してください。イメージをインポートする際は、選択した起動モードがイメージの実際の起動モードと一致していることを確認してください。
ローカルイメージの作成時に起動モードを設定する方法については、「VM を作成してオペレーティングシステムをインストールする」をご参照ください。
イメージのインポート時に起動モードを設定する方法については、「カスタムイメージのインポート」をご参照ください。
インスタンスタイプの起動モードは、DescribeInstanceTypes API のレスポンスに含まれる
SupportedBootModesパラメーターの値から確認できます。
説明ローカルイメージが BIOS と UEFI の両方をサポートしている場合は、起動モードを UEFI-Preferred に設定できます。これにより、イメージはすべてのインスタンスタイプの起動モードに自動的に適応でき、イメージ作成のコスト削減にもつながります。
必要なソフトウェアとツール
virtio ドライバーのインストール
イメージを公開する前に、virtio ドライバーがインストールされ、初期 RAM ファイルシステム (initramfs) に追加されていることを確認してください。virtio ドライバーは、イメージを Alibaba Cloud インスタンスで実行するために必要です。詳細については、「virtio ドライバーのインストール」をご参照ください。
NVMe ドライバーのインストール
ecs.g8iやecs.g7seなどの新しい世代の ECS インスタンスファミリーは、NVMe プロトコルを使用してクラウドディスクをマウントします。 イメージには NVMe ドライバーがインストールされている必要があります。インストールされていない場合、そのイメージから作成されたインスタンスは起動に失敗します。 これらのタイプの ECS インスタンスでイメージを使用できるように、ローカルイメージに NVMe ドライバーをインストールすることをお勧めします。 手順については、「カスタムイメージに NVMe ドライバーをインストールする」をご参照ください。 イメージをインポートした後、イメージの [NVMe ドライバー] プロパティを 対応 に設定します。 詳細については、「イメージのプロパティとタグを変更する」をご参照ください。cloud-init のインストール
イメージから作成された ECS インスタンスを初期化するには、cloud-init をインストールする必要があります。詳細については、「cloud-init のインストール」をご参照ください。セキュリティ強化モードでのメタデータアクセスに対応するために、cloud-init 23.2.2 以降をインストールすることを推奨します。これにより、インスタンスメタデータアクセスのセキュリティが確保されます。
説明cloud-init を使用してパスワードを変更するには、オペレーティングシステムのカーネルが
CONFIG_FW_CFG_SYSFS機能をサポートしている必要があります。この機能は、Linux コミュニティカーネルのバージョン 4.6 以降、および CentOS カーネルのバージョン 3.10.0-826.el7 以降でデフォルトでサポートされています。イメージを使用するサーバーでgrep -nr CONFIG_FW_CFG_SYSFS /boot/config-$(uname -r)コマンドを実行できます。コマンドの出力にCONFIG_FW_CFG_SYSFS=yが含まれている場合、イメージ内のカーネルはCONFIG_FW_CFG_SYSFS機能をサポートしています。Cloud Assistant のインストール
イメージを作成する際に、Cloud Assistant Agent をインストールする必要があります。Cloud Assistant は ECS 向けのネイティブな自動化ツールであり、パスワード、ログイン、またはジャンプサーバーを必要とせずに、コマンド (Shell、PowerShell、Bat コマンドなど) を一括で実行できます。Cloud Assistant を使用して、自動化された運用保守スクリプトの実行、プロセスのポーリング、ソフトウェアのインストールまたはアンインストール、サービスの開始または停止、パッチまたはセキュリティ更新プログラムのインストールを行うことができます。詳細については、「Cloud Assistant Agent のインストール」をご参照ください。
サーバーのセキュリティ保護
イメージを作成する際には、Security Center を使用してサーバーを保護することを推奨します。Security Center は、アラート通知、マルウェアのスキャンと駆除、Webシェルの検出と駆除、クライアントの自己保護、イメージの脆弱性スキャンなど、包括的なセキュリティ機能を提供し、クラウド資産とオンプレミスサーバーを完全に保護します。
システム設定
クロックの設定
イメージのハードウェアクロックは、UTC と LocalTime のタイムゾーンをサポートしています。イメージを作成する際には、標準の協定世界時 (UTC) モードを使用する必要があります。クロックの設定例を次に示します。
cat > /etc/adjtime << EOF 0.0 0 0.0 0 UTC EOF timedatectl set-local-rtc 0詳細については、「Linux の時刻とタイムゾーン」をご参照ください。
SSHD サービスの設定
SSHD サービスを設定する必要があります。
SSHD サービスは、Linux システムにリモートでログインして管理するためのもので、暗号化通信には SSH プロトコルを使用します。以下に
/etc/ssh/sshd_configの設定変更例を示します。UseDNS no AddressFamily inet SyslogFacility AUTHPRIV PermitRootLogin yes PasswordAuthentication yesChrony または NTP サービスの設定
イメージを作成する際には、Chrony サービスまたは NTP サービスのいずれかを設定することを推奨します。
Chrony と NTP は、コンピューターのクロックを同期し、時刻のずれを防ぐために使用されるツールです。以下にサンプルコマンドを示します。
Chrony サービス
chrony_file=/etc/chrony.conf cat >$chrony_file <<EOF # Alibaba Cloud NTP サーバーを使用 # パブリック NTP # Alibaba Cloud NTP server ntp.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp.aliyun.com minpoll 4 maxpoll 10 iburst server ntp1.aliyun.com minpoll 4 maxpoll 10 iburst server ntp1.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp10.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp11.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp12.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp2.aliyun.com minpoll 4 maxpoll 10 iburst server ntp2.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp3.aliyun.com minpoll 4 maxpoll 10 iburst server ntp3.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp4.aliyun.com minpoll 4 maxpoll 10 iburst server ntp4.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp5.aliyun.com minpoll 4 maxpoll 10 iburst server ntp5.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp6.aliyun.com minpoll 4 maxpoll 10 iburst server ntp6.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp7.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp8.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp9.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst # ソース選択時に stratum を無視 stratumweight 0.05 # システムクロックの進み/遅れのレートを記録 driftfile /var/lib/chrony/drift # カーネル RTC 同期を有効化 rtcsync # 調整が 10 秒を超える場合、最初の 3 回の更新では slew の代わりにシステムクロックを step します makestep 10 3 # ローカルネットワークからの NTP クライアントアクセスを許可 #allow 192.168/16 # localhost でのみコマンドをリッスン bindcmdaddress 127.0.0.1 bindcmdaddress ::1 # クライアントアクセスのログ記録を無効化 noclientlog # クロック調整が 0.5 秒を超える場合に syslog へメッセージを送信 logchange 0.5 logdir /var/log/chrony # 測定、統計、追跡のログを記録 EOFNTP サービス
ntp_conf=/etc/ntp.conf cat > $ntp_conf << EOF driftfile /var/lib/ntp/drift pidfile /var/run/ntpd.pid logfile /var/log/ntp.log # アクセス制御のサポート restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap nopeer noquery restrict 172.16.0.0 mask 255.240.0.0 nomodify notrap nopeer noquery restrict 100.64.0.0 mask 255.192.0.0 nomodify notrap nopeer noquery restrict 10.0.0.0 mask 255.0.0.0 nomodify notrap nopeer noquery # ローカルクロック server 127.127.1.0 fudge 127.127.1.0 stratum 10 restrict ntp.aliyun.com nomodify notrap nopeer noquery restrict ntp.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp1.aliyun.com nomodify notrap nopeer noquery restrict ntp1.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp10.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp11.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp12.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp2.aliyun.com nomodify notrap nopeer noquery restrict ntp2.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp3.aliyun.com nomodify notrap nopeer noquery restrict ntp3.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp4.aliyun.com nomodify notrap nopeer noquery restrict ntp4.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp5.aliyun.com nomodify notrap nopeer noquery restrict ntp5.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp6.aliyun.com nomodify notrap nopeer noquery restrict ntp6.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp7.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp8.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp9.cloud.aliyuncs.com nomodify notrap nopeer noquery server ntp.aliyun.com iburst minpoll 4 maxpoll 10 server ntp.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp1.aliyun.com iburst minpoll 4 maxpoll 10 server ntp1.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp10.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp11.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp12.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp2.aliyun.com iburst minpoll 4 maxpoll 10 server ntp2.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp3.aliyun.com iburst minpoll 4 maxpoll 10 server ntp3.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp4.aliyun.com iburst minpoll 4 maxpoll 10 server ntp4.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp5.aliyun.com iburst minpoll 4 maxpoll 10 server ntp5.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp6.aliyun.com iburst minpoll 4 maxpoll 10 server ntp6.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp7.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp8.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp9.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 EOFMOTD サービスの設定
イメージを作成する際には、Message of the Day (MOTD) サービスを設定することを推奨します。
Linux の MOTD サービスは、ユーザーがログインした後にメッセージを表示します。以下にサンプルコマンドを示します。
echo -e "\nWelcome to Alibaba Cloud Elastic Compute Service ! \n" > /etc/motdFirewalld サービスの無効化
Firewalld サービスを無効にすることを推奨します。Firewalld は、Linux でファイアウォールルールを管理するサービスです。クラウドではセキュリティグループがサーバーを保護するため、ローカルファイアウォールは無効化できます。以下にサンプルコマンドを示します。
systemctl stop firewalld systemctl disable firewalldpip ソースの設定
システムに pip ソースが設定されている場合は、Alibaba Cloud の pip ソースアドレスを使用して最新のソフトウェアパッケージを取得することを推奨します。
~/.pip/pip.confファイルの内容は次のとおりです。[global] index-url=http://mirrors.cloud.aliyuncs.com/pypi/simple/ [install] trusted-host=mirrors.cloud.aliyuncs.comネットワークの設定
NetworkManager またはネットワークサービスを使用する場合は、
/etc/sysconfig/network-scripts/ifcfg-eth0ファイルを次のように設定してください。DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes他のネットワークサービスの設定方法については、「セカンダリ Elastic Network Interface の設定」をご参照ください。
カーネルパラメーター
kernelopt の設定
システムが正しく起動するように、GRUB でカーネル起動パラメーターを設定する必要があります。以下に Debian システムでのコマンド例を示します。
/etc/default/grubファイルのGRUB_CMDLINE_LINUX=行に次の情報を追加してください。x86_64 アーキテクチャ
net.ifnames=0 console=tty0 console=ttyS0,115200n8Arm64 アーキテクチャ
net.ifnames=0 console=tty0 console=ttyAMA0,115200n8
sudo update-grub2コマンドを実行して GRUB 設定を適用してください。説明GRUB 設定ファイルのパスと設定を適用するコマンドは、オペレーティングシステムによって異なります。詳細については、「カスタムイメージに NVMe ドライバーをインストールする」をご参照ください。
sysctl の設定
Linux カーネルの動作を調整および最適化するために、
sysctlパラメーターを設定することを推奨します。/etc/sysctl.confファイルを次のように変更してください。vm.swappiness = 0 kernel.sysrq = 1 net.ipv4.neigh.default.gc_stale_time = 120 net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_announce = 2 net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 1024 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_slow_start_after_idle = 0sudo sysctl -pコマンドを実行して、カーネルパラメーターへの変更を有効にしてください。
システムのセキュリティに関する推奨事項
システムのセキュリティを向上させるために、イメージをインポートする前に次のアクションを実行することを推奨します。
root アカウントをロックしてください。これにより、パスワードが設定されていても、root パスワードを使用してシステムに直接ログインできなくなります。
SSH の
PasswordAuthentication設定を変更して、パスワードベースのログインを無効にしてください。説明インスタンスの初期化中に root パスワードを設定すると、SSH の
PasswordAuthenticationがデフォルトで有効になる場合があります。
以下にサンプルコードを示します。
dst=/etc/ssh/sshd_config
sed -i 's/^SyslogFacility.*//' $dst
sed -i 's/^PermitRootLogin.*//' $dst
sed -i 's/^PasswordAuthentication.*//' $dst
echo UseDNS no >> $dst
echo SyslogFacility AUTHPRIV >> $dst
echo PasswordAuthentication no >> $dst
passwd -l root
sed -i -e 's/root:[^:]*:/root:*:/g' /etc/shadowイメージ情報のクリーンアップ
イメージを公開する前に、コマンド履歴やログなどの機密情報をクリアしてください。