GKE クラスタでノードのセルフ登録を防ぐ

デフォルトでは、Google Kubernetes Engine(GKE)ノードは、各ノードの kubelet プロセスを使用して、Kubernetes API サーバーに Node オブジェクトを登録します。このドキュメントでは、シールドされた GKE ノードでこの 自己登録 を防止し、信頼できる GKE コントロール プレーン コンポーネントに登録オペレーションを実行させる方法について説明します。セキュリティ エンジニアとプラットフォーム管理者は、コントロール プレーン ノードの作成を使用してノードの権限を制限できます。

次のコンセプトに精通している必要があります。

GKE のノード作成モード

すべての GKE クラスタで有効になっている Shielded GKE Nodes は、ノード登録プロセス中にノード ID の暗号検証を強制します。この検証により、正当なノードのみが Kubernetes API サーバーに登録してワークロードを実行できるようになります。

GKE クラスタのデフォルトの登録ワークフローでは、各ノードの kubelet が API サーバーで Node オブジェクトを作成して変更するため、ノードが侵害された場合にリスクが生じます。たとえば、 CVE-2025-5187では、脆弱性 によりノードユーザーが対応する Node オブジェクトを削除し、 侵害されたノードを登録できました。

コントロール プレーン ノードの作成

GKE バージョン 1.35.3-gke.1189000 以降では、kubelet がノードを自己登録するのではなく、gcp-controller-manager という名前の信頼できる GKE コントロール プレーン コンポーネントに Node オブジェクトの作成を要求できます。kubelet が暗号で検証されたノード ID を使用して API サーバーとの TLS 接続を確立すると、gcp-controller-manager コンポーネントが Node オブジェクトを作成します。アドミッション コントローラは、kubelet からの Node オブジェクトの作成リクエストを拒否します。コントロール プレーン コンポーネントを使用して Node オブジェクトを作成することで、侵害された可能性のあるノードが任意の Node オブジェクトを作成したり、その Node 仕様を操作したりするリスクを軽減できます。

デフォルトのノード作成と登録の動作を変更するには、Standard クラスタまたは Autopilot クラスタを作成するときに、次のいずれかを行います。

  • Google Cloud CLI: --node-creation-mode フラグに CONTROL_PLANE の値を指定します。
  • Kubernetes Engine API: NodeCreationConfig メソッドの node-creation-mode フィールドに VIA_CONTROL_PLANE の値を指定します。

制限事項

gcp-controller-manager が Kubernetes API に Node オブジェクトを作成してから、kubelet がその Node オブジェクトをノードラベルとアノテーションの完全なセットで更新するまでに、わずかな遅延が発生します。ノードの作成直後にラベルまたはアノテーションの完全なセットに依存するワークロードまたはコントローラは、予期しない動作を示す可能性があります。特定のラベルとアノテーションは、kubelet の登録とは異なるタイミングで調整される場合があります。ワークロードと DaemonSet が、アクションを実行する前にラベルとアノテーションの存在チェックを使用していることを確認してください。

  • すべてのノード taint の許容値を持つ DaemonSet とワークロードをデプロイしないでください。これにより、準備ができていないノードで Pod が実行される可能性があります。
  • initContainer を使用して、メイン コンテナを実行する前にノードラベルを確認します。

始める前に

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

  • Google Kubernetes Engine API を有効にする。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、 インストールして 初期化する gcloud CLI。gcloud CLI をインストール済みの場合は、最新の バージョンをgcloud components updateコマンドを実行して取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。

コントロール プレーン ノードの作成を有効にする

クラスタを作成するとき、または既存のクラスタを更新するときに、gcp-controller-manager コンポーネントを使用してノードの作成を有効にできます。既存のクラスタの場合、更新はクラスタ内の新しいノードにのみ影響します。既存のノードは変更の影響を受けません。

次のコマンドを使用すると、既存のクラスタでコントロール プレーン ノード作成モードが有効になります。

gcloud container clusters update CLUSTER_NAME \
    --node-creation-mode=CONTROL_PLANE \
    --location=CONTROL_PLANE_LOCATION \

次のように置き換えます。

  • CLUSTER_NAME: クラスタの名前。
  • CONTROL_PLANE_LOCATION: クラスタ コントロール プレーンのリージョンまたはゾーン。

clusters create コマンドclusters create-auto コマンド--node-creation-mode フラグを指定することもできます。

コントロール プレーン ノードの作成を無効にする

kubelet がいつでもノードを作成するデフォルトの GKE の動作に戻すことができます。これを行うには、KUBELET --node-creation-mode Google Cloud CLI フラグに値を指定するか、VIA_KUBELET NodeCreationConfig GKE API メソッドに値を指定します。既存のクラスタの場合、この変更はそのクラスタ内の新しいノードにのみ影響します。

次のコマンドは、コントロール プレーン ノードの作成を無効にするようにクラスタを更新します。

gcloud container clusters update CLUSTER_NAME \
    --node-creation-mode=KUBELET \
    --location=CONTROL_PLANE_LOCATION \

次のように置き換えます。

  • CLUSTER_NAME: クラスタの名前。
  • CONTROL_PLANE_LOCATION: クラスタ コントロール プレーンのリージョンまたはゾーン。

次のステップ