シールドされた GKE ノードの使用

このページでは、シールドされた GKE ノード機能の使用方法について説明します。シールドされた GKE ノードは、強固で検証可能なノード ID と整合性を備え、Google Kubernetes Engine(GKE)ノードのセキュリティを強化します。

シールドされた GKE ノードの概要

シールドされた GKE ノードは、Compute Engine の Shielded VM 上に構築されます。シールドされた GKE ノードがなければ、攻撃者は Pod の脆弱性を悪用し、ブートストラップ認証情報を抜き取ってクラスタ内のノードになりすますことで、クラスタのシークレットにアクセスできるようになります。シールドされた GKE ノードを有効にすると、GKE コントロール プレーンは暗号を使用して、次の内容を確認します。

  • クラスタ内のすべてのノードが、Google のデータセンター内で実行されている仮想マシンであること。
  • すべてのノードが、クラスタにプロビジョニングされたマネージド インスタンス グループの一部であること。
  • kubelet が、それが実行されているノードの証明書をプロビジョニングしていること。

これにより、攻撃者がノードのブートストラップ認証情報を抜き取った場合でも、攻撃者がクラスタ内のノードになりかわることを制限できます。

必要に応じて、ノードプールでノードの整合性チェックを構成することで、ノードのルートキットとブートキットに対する保護を強化できます。こうしたノードプール設定は、シールドされた GKE ノードから独立しており、クラスタでシールドされた GKE ノードが無効になっていても機能します。

詳細については、Shielded VM のドキュメントをご覧ください。

シールドされた GKE ノードの実行に追加の費用はかかりません。ただし、シールドされた GKE ノードは標準ノードと比較して起動時に生成されるログが約 0.5 KB 多くなります。詳しくは、Cloud Logging の料金ページをご覧ください。

対象

  • シールドされた GKE ノードは、GKE バージョン 1.13.6-gke.0 以降で使用できます。
  • シールドされた GKE ノードはすべてのゾーンとリージョンで使用できます。
  • シールドされた GKE ノードは、すべてのノードイメージで使用できます。
  • シールドされた GKE ノードを GPU で使用できます。

始める前に

作業を始める前に、次のことを確認してください。

次のいずれかの方法で gcloud のデフォルトの設定を指定します。

  • gcloud init。デフォルトの設定全般を確認する場合に使用します。
  • gcloud config。プロジェクト ID、ゾーン、リージョンを個別に設定する場合に使用します。

gcloud init の使用

エラー One of [--zone, --region] must be supplied: Please specify location を受信した場合は、このセクションの内容を実施します。

  1. gcloud init を実行して、次の操作を行います。

    gcloud init

    リモート サーバーで SSH を使用している場合は、--console-only フラグを指定して、コマンドがブラウザを起動しないようにします。

    gcloud init --console-only
  2. 手順に従って gcloud を承認し、Google Cloud アカウントを使用します。
  3. 新しい構成を作成するか、既存の構成を選択します。
  4. Google Cloud プロジェクトを選択します。
  5. ゾーンクラスタの場合はデフォルトの Compute Engine ゾーン、リージョン クラスタまたは Autopilot クラスタの場合はデフォルトの Compute Engine リージョンを選択します。

gcloud config の使用

  • デフォルトのプロジェクト ID を設定します。
    gcloud config set project PROJECT_ID
  • ゾーンクラスタを使用する場合は、デフォルトのコンピューティング ゾーンを設定します。
    gcloud config set compute/zone COMPUTE_ZONE
  • Autopilot クラスタまたはリージョン クラスタを使用する場合は、デフォルトのコンピューティング リージョンを設定します。
    gcloud config set compute/region COMPUTE_REGION
  • gcloud を最新バージョンに更新します。
    gcloud components update

新しいクラスタでシールドされた GKE ノードを有効にする

gcloud ツールまたは Google Cloud Console を使用して、シールドされた GKE ノードが有効である新しいクラスタを作成できます。

gcloud

新しいクラスタを作成する際に、--enable-shielded-nodes オプションを次のように指定します。

gcloud container clusters create CLUSTER_NAME --enable-shielded-nodes

Console

  1. Cloud Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. [ 作成] をクリックします。

  3. ナビゲーション パネルの [クラスタ] の下の [セキュリティ] をクリックします。

  4. [シールドされた GKE ノード] チェックボックスをオンにします。

  5. 必要に応じてクラスタを構成します。

  6. [作成] をクリックします。

クラスタの作成の詳細については、クラスタの作成をご覧ください。

既存のクラスタでシールドされた GKE ノードを有効にする

既存のクラスタでシールドされた GKE ノードを有効にするには、gcloud コマンドライン ツールまたは Google Cloud Console を使用します。

シールドされた GKE ノードを有効にすると、コントロール プレーンとノードが Shielded VM として再作成されます。コントロール プレーンは、再作成中は使用不可になります。ダウンタイムを最小限に抑えるために、ローリング方式でクラスタノードが再作成されます。

gcloud

クラスタを更新するときには、次のように --enable-shielded-nodes オプションを指定します。

gcloud container clusters update CLUSTER_NAME --enable-shielded-nodes

Console

  1. Cloud Console で、Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. 変更するクラスタの名前をクリックします。

  3. [セキュリティ] の [シールドされた GKE ノード] フィールドで、 [シールドされた GKE ノードを編集] をクリックします。

  4. [シールドされた GKE ノード] チェックボックスをオンにします。

  5. [変更を保存] をクリックします。

シールドされた GKE ノードが有効になっていることを確認する

クラスタでシールドされた GKE ノードを使用していることを確認するには、gcloud コマンドライン ツールまたは Google Cloud Console を使用します。

gcloud

クラスタの説明を表示します。

gcloud container clusters describe CLUSTER_NAME

シールドされた GKE ノードが有効化されていると、コマンドの出力に次の行が含まれます。

shieldedNodes:
  enabled: true

Console

クラスタがシールドされた GKE ノードを使用していることを確認するには:

  1. Cloud Console で、Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. 検査するクラスタの名前をクリックします。

  3. [セキュリティ] の [シールドされた GKE ノード] フィールドで、シールドされた GKE ノードが [有効] になっていることを確認します。

ノードの基盤となる Shielded VM の整合性のモニタリングもできます。手順については、Shielded VM インスタンス上の整合性モニタリングをご覧ください。

シールドされた GKE ノードを無効にする

シールドされた GKE ノードは、gcloud コマンドライン ツールまたは Google Cloud Console を使用して無効にできます。

gcloud

クラスタを更新するときには、次のように --no-enable-shielded-nodes オプションを指定します。

gcloud container clusters update CLUSTER_NAME --no-enable-shielded-nodes

Console

  1. Cloud Console で、Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. 変更するクラスタの名前をクリックします。

  3. [セキュリティ] の [シールドされた GKE ノード] フィールドで、 [シールドされた GKE ノードを編集] をクリックします。

  4. [シールドされた GKE ノードを有効にする] チェックボックスをオフにします。

  5. [変更を保存] をクリックします。

シールドされた GKE ノードを無効にすると、コントロール プレーンとノードがシールドなし VM として再作成されます。コントロール プレーンは、再作成中は使用不可になります。ダウンタイムを最小限に抑えるために、ローリング方式でクラスタノードが再作成されます。

ノードの整合性

セキュアブートと整合性モニタリングは、シールドされた GKE ノードとともに使用できるノードプール設定です。シールドされた GKE ノード、セキュアブート、および整合性モニタリングは、個別に有効または無効にできる独立した機能です。

セキュアブート

セキュアブートが有効であるとサードパーティの未署名カーネル モジュールを読み込めないので、GKE のデフォルトではセキュアブートが無効になっています。

サードパーティ製の未署名のカーネル モジュールを使用していない場合でも、gcloud コマンドライン ツールまたは Google Cloud Console を使用してセキュアブートを有効にできます。

gcloud

クラスタを作成するときにセキュアブートを有効にするには、次のコマンドを実行します。

gcloud container cluster create CLUSTER_NAME --shielded-secure-boot

ノードプールを作成するときにセキュアブートを有効にするには、次のようにします。

gcloud container node-pool create POOL_NAME --shielded-secure-boot

セキュアブートはデフォルトで無効になっています。クラスタまたはノードプールを作成するときに、--no-shielded-secure-boot オプションを使用してセキュアブートを明示的に無効化できます。

Console

ノードプールを作成するときにセキュアブートを有効にするには、次のようにします。

  1. Cloud Console で、Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. 変更するクラスタの名前をクリックします。

  3. [ノードプールを追加] をクリックします。

  4. ナビゲーション メニューから [セキュリティ] をクリックします。

  5. [シールド オプション] で [セキュアブートを有効にする] チェックボックスをオンにします。

  6. [作成] をクリックします。

整合性モニタリング

整合性モニタリングは、ノードプール設定の 1 つで、GKE ではデフォルトで有効になっています。整合性モニタリングを無効にするには、gcloud コマンドライン ツールまたは Google Cloud Console を使用します。

gcloud

クラスタの作成時にシステム コンポーネントの整合性モニタリングを無効にするには、次のコマンドを実行します。

gcloud container cluster create CLUSTER_NAME --no-shielded-integrity-monitoring

ノードプールの作成時にシステム コンポーネントの整合性モニタリングを無効にするには、次のコマンドを実行します。

gcloud container node-pool create POOL_NAME --no-shielded-integrity-monitoring

整合性モニタリングはデフォルトで有効になっています。クラスタやノードプールを作成するときに、--shielded-integrity-monitoring オプションを使ってこれを明示的に有効化できます。

Console

ノードプールの作成時に整合性モニタリングを無効にするには、次の手順を行います。

  1. Cloud Console で、Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. 変更するクラスタの名前をクリックします。

  3. [ノードプールを追加] をクリックします。

  4. ナビゲーション パネルで [セキュリティ] をクリックします。

  5. [シールド オプション] で、[整合性のモニタリングを有効にする] チェックボックスをオフにします。

次のステップ