GKEクラスタで自動ノード修復機能の有効化について

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、 「どうやって直すのか?」 という具体的な修復手順(コンソール、gcloud CLI、Terraformなど)まで、分かりやすく解説します。
この記事では、GKEクラスタで自動ノード修復機能が無効化されているリスクについて、リスクと対策を解説します。

ポリシーの説明
GKEの自動ノード修復機能は、クラスタ内のノードの健全性を自動的に監視し、問題が発生したノードを自動的に修復する重要な機能です。この機能が有効化されていると、GKEは約10分ごとに各ノードのヘルスチェックを実行し、以下の条件に該当する場合に自動的にノードを修復します:
- ノードが「NotReady」状態が約10分間継続した場合
- ノードがクラスタと通信できない状態が続いた場合
- ノードのディスク使用率が100%に達した場合
- ノードのプロセスがクラッシュした場合
修復プロセスでは、影響のあるノードを安全にドレイン(Pod を他のノードに退避)してから、ノードを再作成します。
なぜ危険なのか?
自動ノード修復機能が無効化されている場合、以下のリスクが発生します:
1. セキュリティリスクの増大
- 異常な状態のノードが長期間放置される可能性があり、攻撃者に悪用される恐れがあります
- 侵害されたノードや誤動作しているノードが自動的に置き換えられないため、未知の脆弱性が残存する可能性があります
2. 可用性の低下
- 「NotReady」状態のノードが無期限に残り続け、クラスタのパフォーマンスに影響を与えます
- サービスの中断や性能劣化が発生する可能性があります
3. 運用負荷の増大
- 管理者が手動で異常なノードを特定し、修復する必要があり、運用コストが大幅に増加します
- 24時間365日の監視体制が必要となり、人的エラーのリスクも高まります
修復方法
コンソールでの修復手順
Google Cloud コンソールを使用して、既存のノードプールで自動修復を有効にする手順:
- Google Cloud Consoleにログインし、「Kubernetes Engine」ページに移動します
- 対象のクラスタ名をクリックして、クラスタの詳細ページを開きます
- 上部のタブから「ノード」タブをクリックします
- 「ノードプール」セクションで、修正したいノードプールの名前をクリックします
- ノードプールの詳細ページで、右上の「編集」ボタン(鉛筆アイコン)をクリックします
- 「管理」セクションまでスクロールし、「自動修復を有効にする」のチェックボックスをオンにします

- 画面下部の「保存」ボタンをクリックして変更を適用します
- 変更が正常に適用されたことを確認するため、ノードプールの詳細ページで「自動修復」が「有効」になっていることを確認します
注意事項:
- 2020年5月28日以降に作成された新しいノードプールでは、自動修復がデフォルトで有効になっています
- 修復中のノードは新しい外部IPアドレスを取得するため、IPホワイトリストを使用している場合は注意が必要です
Terraformでの修復手順
Terraformを使用してGKEノードプールで自動修復を有効にする設定例と、主要な修正ポイントを説明します。
# ------------------ ① GKEクラスタの定義 ------------------
resource "google_container_cluster" "primary" {
name = "secure-gke-cluster"
location = var.region
# デフォルトノードプールを削除し、個別管理のノードプールを使用
remove_default_node_pool = true
initial_node_count = 1
# クラスタレベルのセキュリティ設定
workload_identity_config {
workload_pool = "${var.project_id}.svc.id.goog"
}
}
# ------------------ ② サービスアカウント ------------------
resource "google_service_account" "kubernetes" {
account_id = "gke-node-sa"
display_name = "GKE Node Service Account"
description = "Service account for GKE nodes with minimal permissions"
}
# ------------------ ③ 自動修復を有効にしたノードプール ------------------
resource "google_container_node_pool" "primary_nodes" {
name = "secure-node-pool"
location = var.region
cluster = google_container_cluster.primary.name
node_count = var.node_count
# ノード構成
node_config {
machine_type = var.machine_type
disk_size_gb = 100
disk_type = "pd-standard"
# 最小権限のサービスアカウントを使用
service_account = google_service_account.kubernetes.email
oauth_scopes = [
"<https://www.googleapis.com/auth/cloud-platform>"
]
# セキュリティ強化設定
shielded_instance_config {
enable_secure_boot = true
enable_integrity_monitoring = true
}
# メタデータ保護
metadata = {
disable-legacy-endpoints = "true"
}
}
# --- 自動修復と自動アップグレードの有効化 ---
management {
auto_repair = true # 自動修復を有効化
auto_upgrade = true # 自動アップグレードも推奨
}
# オートスケーリング設定(オプション)
autoscaling {
min_node_count = 2
max_node_count = 10
}
# アップグレード設定
upgrade_settings {
max_surge = 1
max_unavailable = 0
}
}
# ------------------ ④ 既存ノードプールの更新(既存環境の場合) ------------------
# 既存のノードプールがある場合は、以下のように更新
resource "google_container_node_pool" "existing_pool" {
name = "existing-node-pool"
location = var.region
cluster = google_container_cluster.primary.name
# 既存の設定を維持しつつ、management ブロックを追加または更新
management {
auto_repair = true # この行を追加して自動修復を有効化
auto_upgrade = true # 推奨:自動アップグレードも有効化
}
# その他の既存設定...
}
自動修復と関連する設定
リリースチャンネルの設定(推奨)
# クラスタをリリースチャンネルに登録
# rapid: 最新機能を早期に利用(開発環境向け)
# regular: バランスのとれた更新(一般的な本番環境向け)
# stable: 最も安定した更新(ミッションクリティカルな環境向け)
gcloud container clusters update [クラスタ名] \
--location=[ゾーンまたはリージョン] \
--release-channel=regular
gcloud CLIでの有効化(既存ノードプールの場合):
# 自動修復を有効化
gcloud container node-pools update [ノードプール名] \
--cluster [クラスタ名] \
--location=[ゾーンまたはリージョン] \
--enable-autorepair
# 自動修復の状態を確認
gcloud container node-pools describe [ノードプール名] \
--cluster [クラスタ名] \
--location=[ゾーンまたはリージョン] \
--format="value(management.autoRepair)"
# すべてのノードプールの自動修復状態を一括確認
gcloud container node-pools list \
--cluster [クラスタ名] \
--location=[ゾーンまたはリージョン] \
--format="table(name,management.autoRepair:label='AUTO_REPAIR',management.autoUpgrade:label='AUTO_UPGRADE')"
最後に
この記事では、GKEクラスタで自動ノード修復機能が無効化されているリスクについて、リスクと対策を解説しました。
自動ノード修復を有効化することで、セキュリティリスクの低減、可用性の向上、運用負荷の軽減を実現できます。特に本番環境では、この機能を必ず有効化することを強く推奨します。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。 最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。