デフォルトでは、Google Kubernetes Engine(GKE)ノードは各ノードで kubelet プロセスを使用して、Kubernetes API サーバーに Node オブジェクトを登録します。このドキュメントでは、Shielded GKE Nodes のこの自己登録を防止し、代わりに信頼できる 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 の toleration を持つ 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 フラグを指定することもできます。
コントロール プレーン ノードの作成を無効にする
--node-creation-mode Google Cloud CLI フラグで KUBELET の値、または NodeCreationConfig GKE API メソッドで VIA_KUBELET の値を指定すると、kubelet がいつでもノードを作成するデフォルトの GKE 動作に戻すことができます。既存のクラスタの場合、この変更はクラスタ内の新しいノードにのみ影響します。
次のコマンドは、コントロール プレーン ノードの作成を無効にするようにクラスタを更新します。
gcloud container clusters update CLUSTER_NAME \
--node-creation-mode=KUBELET \
--location=CONTROL_PLANE_LOCATION \
次のように置き換えます。
CLUSTER_NAME: クラスタの名前。CONTROL_PLANE_LOCATION: クラスタ コントロール プレーンのリージョンまたはゾーン。
次のステップ
- Shielded GKE ノードの詳細を確認する。
- GKE セキュリティの概要を確認する。
- クラスタのセキュリティを強化する方法について理解する。