デフォルトでは、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: クラスタ コントロール プレーンのリージョンまたはゾーン。
次のステップ
- Shielded GKE Nodes の詳細を確認する。
- GKE セキュリティ の概要を確認する。
- クラスタのセキュリティを 強化する方法を確認する。