インポートしたディスクを手動で構成する

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 を 1460 に設定します。Compute Engine DHCP サーバーは、このパラメータを、ほとんどのクライアントで考慮される interface-mtu オプションとして処理します。
    • IPv6 は Compute Engine でサポートされていないため、無効にします。
    • 永続的なネットワーク ルールを削除して、インスタンスで 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 を無効にします。Linux カーネルでは、この機能は非推奨になりました。この機能を無効にするには、次のコマンドを実行します。

    echo 1 > /proc/sys/kernel/modules_disabled
  • カーネル シンボル テーブルを削除します。

    sudo rm /boot/System.map

次のステップ