Shielded GKE Nodes の使用


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

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

Shielded GKE Nodes の概要

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

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

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

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

料金

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

始める前に

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

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

新しいクラスタで Shielded GKE Nodes を有効にする

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

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. [作成] をクリックします。

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

既存のクラスタで Shielded GKE Nodes を有効にする

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

Shielded GKE Nodes を有効にすると、ワーカーノードがシールドされた 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. [変更を保存] をクリックします。

Shielded GKE Nodes が有効になっていることを確認する

クラスタで Shielded GKE Nodes を使用していることを確認するには、Google Cloud CLI または Google Cloud コンソールを使用します。

gcloud

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

gcloud container clusters describe CLUSTER_NAME

Shielded GKE Nodes が有効化されていると、コマンドの出力に次の行が含まれます。

shieldedNodes:
  enabled: true

コンソール

クラスタが Shielded GKE Nodes を使用していることを確認するには:

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

    Google Kubernetes Engine に移動

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

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

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

Shielded GKE Nodes を無効にする

Google Cloud CLI または Google Cloud コンソールを使用して、Shielded GKE Nodes を無効にできます。

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. [変更を保存] をクリックします。

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

ノードの整合性

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

セキュアブート

セキュアブートは、ブートプロセス中にノード 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. [シールド オプション] で、[整合性のモニタリングを有効にする] チェックボックスをオフにします。

次のステップ