Compute Engine に仮想ディスクを手動でインポートしたら、それらのイメージを最適化して、Compute Engine 環境固有の機能を使用できるようにする必要があります。
目次
Compute Engine ゲスト環境をインストールする
Compute Engine の主要な機能を使用する前に、ゲスト環境をインストールする必要があります。ゲスト環境を手動でインストールする必要がある状況を確認するには、ゲスト環境を手動でインストールまたは更新する場合を参照してください。
既存のイメージを手動でインポートしたら、作成した実行中の VM インスタンスにゲスト環境をインストールします。インポートする前に作成したユーザー アカウントを使用して SSH 経由で、あるいは、シリアル コンソールを使った操作で VM インスタンスにアクセスして、インストールを実行します。
Compute Engine 用にインポートしたイメージを構成する
追加の変更を行うことなく Compute Engine でブートディスク イメージを実行できますが、Compute Engine 内で最適に実行され、Compute Engine のすべての機能にアクセスできるようにそのイメージを最適化できます。
server metadata.google.internal iburst
Google NTP サーバー エントリのみが含まれるようにntp.conf
ファイルを編集します。タイムゾーンを UTC に設定します。
sudo ln -sf /usr/share/zoneinfo/UTC /etc/localtime
高パフォーマンスのネットワーク機能を確保するには、次に示す推奨のネットワーク構成を使用します。
- ISC DHCP クライアントを使用します。
- DHCP MTU をネットワーク MTU に設定します。Compute Engine DHCP サーバーは、このパラメータを、ほとんどのクライアントで考慮される
interface-mtu
オプションとして処理します。ネットワーク MTU の詳細については、最大伝送単位の概要をご覧ください。 - IPv6 アドレスの構成を行う予定がない場合は、IPv6 を無効にします。
永続的なネットワーク ルールを削除して、インスタンスで MAC アドレスが記憶されないようにします。次に例を示します。
rm -f /etc/udev/rules.d/70-persistent-net.rules
Compute Engine ファイアウォール ルールでサポートされない特定の要件がある場合を除き、オペレーティング システムのファイアウォールを無効にします。Compute Engine には、送受信トラフィック用のファイアウォールが用意されています。ファイアウォールの詳細については、ファイアウォール ルールの概要をご覧ください。
高パフォーマンスのネットワーク機能とディスク機能を確保するには、
irqbalance
デーモンを無効にするか、削除します。このデーモンは、仮想マシン(VM)インスタンス上のゲスト オペレーティング システムに対する IRQ リクエストを正しく分散しません。仮想 CPU に対する IRQ 設定を正しく分散するには、代わりにゲスト環境の一部であるスクリプトを使用します。ベースイメージへの SSH アクセスを構成します。
- root での SSH ログインを無効にします。
- パスワード認証を無効にします。
- ホストベースの認証を無効にします。
- 厳密なホスト鍵チェックを有効にします。
ServerAliveInterval
を使用して接続を開いたままにします。イメージから SSH 認証鍵を削除して、イメージ内の公開鍵や秘密鍵に他のユーザーがアクセスできないようにします。代わりに、Compute Engine を使用してインスタンスへのアクセスを管理します。
/etc/ssh/ssh_config
ファイルを編集して、次の構成を使用します。Host * Protocol 2 ForwardAgent no ForwardX11 no HostbasedAuthentication no StrictHostKeyChecking no Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc Tunnel no # Compute Engine times out connections after 10 minutes of inactivity. # Keep alive ssh connections by sending a packet every 7 minutes. ServerAliveInterval 420
/etc/ssh/sshd_config
ファイルを編集して、次の構成を使用します。# Disable PasswordAuthentication because ssh keys are more secure. PasswordAuthentication no # Disable root login. Using sudo provides better auditing. PermitRootLogin no PermitTunnel no AllowTcpForwarding yes X11Forwarding no # Compute Engine times out connections after 10 minutes of inactivity. # Keep alive ssh connections by sending a packet every 7 minutes. ClientAliveInterval 420
Compute Engine でブートディスクを構成して最適化した後、そのブートディスクからイメージを作成して、イメージを作成するたびに各インスタンスを構成するのではなく、イメージの完全に最適化されたバージョンからインスタンスを作成できます。
セキュリティのベスト プラクティスを構成する
常に安全なオペレーティング システム環境を提供する必要がありますが、安全な環境とアクセス可能な環境を両立することは困難です。攻撃を受けやすい仮想マシンは消費するリソースが高コストになる可能性があります。イメージに関して次のセキュリティのベスト プラクティスに従うことを強くおすすめします。
- デフォルトでインストールされるソフトウェアの量を最小限に抑えます(たとえば、OS の最小インストールを実行します)。
- 自動更新を有効にします。
- デフォルトでは、SSH、DHCP、NTPD 以外のすべてのネットワーク サービスを無効にします。Postfix などのメールサーバーがローカルホストからの接続のみを受け入れている場合は、そのメールサーバーを実行できます。
- sshd 以外の外部リスニング ポートは許可しないでください。
- SSH ブルート フォース ログイン試行を防ぐため、denyhosts パッケージをインストールします。
- デフォルトのインストールからユーザー以外の不要なアカウントをすべて削除します。
/etc/passwd
で、ユーザー以外のすべてのアカウントのシェルを/sbin/nologin
または/usr/sbin/nologin
に設定します(nologin がインストールされている場所に応じて設定します)。/etc/shadow
で、パスワードにソルト付き SHA512 を使用するように OS を構成します。- パスワードの安全度を高めるため、pam_cracklib の設定と構成を行います。
- ログインに 3 回失敗したアカウントを 5 分間ロックするように、pam_tally の設定と構成を行います。
/etc/shadow
で、root アカウントがデフォルトでロックされるように構成します。root アカウントをロックするには、次のコマンドを実行します。usermod -L root
/etc/ssh/sshd_config
に次の行を追加して root を拒否します。PermitRootLogin no
デフォルトで実行されるすべてのネットワーク接続サービス用に AppArmor プロファイルまたは SELinux プロファイルを作成します。
可能な場合はファイル システム機能を使用して、S*ID ビットの必要性をなくし、より詳細に制御できるようにします。
ネットワーク接続ソフトウェアのコンパイル時に、コンパイラとランタイムのエクスプロイト対策を有効にします。例として、GNU Compiler Collection(GCC)で提供される対策の一部と、それを有効にする方法を次に示します。
- スタック スマッシュの防止:
-fstack-protector
で有効にします。デフォルトでは、このオプションは 8 バイトを超えるスタック割り当てバッファを持つ関数を保護します。4 バイト以上のバッファを持つ関数を対象にして保護を強化するには、--param=ssp-buffer-size=4
を追加します。 - アドレス空間配置のランダム化(ASLR): これを有効にするには、
-fPIC -pie
で位置に依存しない実行可能ファイルをビルドします。 - glibc の保護: この保護は
-D_FORTIFY_SOURCE=2
で有効にします。 - グローバル オフセット テーブル(GOT)の保護: このランタイム ローダー機能は
-Wl,-z,relro,-z,now
で有効にします。 - フォーマット文字列が欠落している場合のコンパイル時エラーは
-Wformat -Wformat-security -Werror=format-security
です。
- スタック スマッシュの防止:
カーネル モジュールの読み込みと読み込み解除を可能にする
CAP_SYS_MODULE
を無効にします。この機能を無効にするには、/etc/sysctl.conf
ファイルを編集して次の設定を含めます。kernel.modules_disabled = 1
カーネル シンボル テーブルを削除します。
sudo rm /boot/System.map
次のステップ
- イメージの本番環境稼働の準備が整ったら、カスタム イメージの最終版を作成し、イメージ ファミリーにイメージを追加する。これにより、カスタム イメージのバージョン更新を簡単に管理できるようになります。
- イメージからインスタンスを起動する方法を理解する。