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


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

GKE Autopilot クラスタでは、シールドされた GKE ノード機能はデフォルトで有効になっており、オーバーライドできません。GKE Standard クラスタの場合、シールドされた GKE ノード機能はデフォルトで有効になっていますが、オーバーライドできます。

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

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

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

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

GKE クラスタのコントロール プレーン ノードは、クラスタでこの機能を無効にしても、常にシールドされた GKE ノードを使用します。シールドされた GKE ノードを有効または無効にすると、ワークロードを実行するワーカーノードがこの機能を使用できるかどうかにのみ影響します。

料金

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

始める前に

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

  • Google Kubernetes Engine API を有効にする。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新のバージョンを取得する。

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

gcloud CLI または Google Cloud コンソールを使用して、シールドされた GKE ノードが有効になった新しいクラスタを作成できます。

gcloud

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

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

コンソール

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

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

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

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

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

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

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

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

Google Cloud CLI または Google Cloud コンソールを使用すると、既存のクラスタでシールドされた GKE ノードを有効にできます。

シールドされた GKE ノードを有効にすると、ワーカーノードがシールドされた VM として再作成されます。ダウンタイムを最小限に抑えるために、ローリング方式でクラスタノードが再作成されます。

gcloud

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

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

コンソール

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

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

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

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

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

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

クラスタがシールドされた GKE ノードを使用していることを確認するには、Google Cloud CLI または Google Cloud コンソールを使用します。

gcloud

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

gcloud container clusters describe CLUSTER_NAME

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

shieldedNodes:
  enabled: true

コンソール

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

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

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

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

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

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

Google Cloud CLI または Google Cloud コンソールを使用して、シールドされた GKE ノードを無効にできます。

gcloud

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

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

コンソール

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

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

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

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

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

シールドされた GKE ノードを無効にすると、ノードは通常のシールドのない VM として再作成されます。ダウンタイムを最小限に抑えるために、ローリング方式でクラスタノードが再作成されます。

ノードの整合性

必要に応じて、ノードプールでノードの整合性チェックを構成することで、ノードのルートキットとブートキットに対する保護を強化できます。シールドされた GKE ノード、セキュアブート、および整合性モニタリングは、個別に有効または無効にできる独立した機能です。

セキュアブート

セキュアブートは、ブートプロセス中にノード VM のブート コンポーネント(カーネルやブートローダーなど)を認証するノードプールの設定です。セキュアブートは、ノードプールでデフォルトで無効になっています。

ノードプールでセキュアブートを有効にする前に、次の点を考慮してください。

  • Ubuntu ノードでセキュアブートを有効にすると、未署名のサードパーティ製カーネル モジュールがノードで読み込まれなくなります。
  • Container-Optimized OS ノードでセキュアブートを有効にしても、カーネル モジュールの読み込みには影響しません。これは、Container-Optimized OS ノードイメージが、セキュアブートとは別に、サードパーティのカーネル モジュールを読み込む機能を制御するためです。

セキュアブートを有効にするには、Google Cloud CLI または Google Cloud コンソールを使用します。

gcloud

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

gcloud container clusters create CLUSTER_NAME \
    --shielded-secure-boot

ノードプールを作成するときにセキュアブートを有効にするには:

gcloud container node-pools create POOL_NAME \
    --shielded-secure-boot

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

コンソール

ノードプールを作成するときにセキュアブートを有効にするには:

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

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

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

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

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

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

整合性モニタリング

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

gcloud

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

gcloud container clusters create CLUSTER_NAME \
    --no-shielded-integrity-monitoring

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

gcloud container node-pools create POOL_NAME \
    --no-shielded-integrity-monitoring

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

コンソール

ノードプールの作成時に整合性モニタリングを無効にするには:

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

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

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

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

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

次のステップ