GKE ノードとコントロールプレーンのアクセス経路の確認

ノードの外部 IP とコントロールプレーンへの経路を区別し、必要な範囲に制限してください。

説明

プライベートノードは外部 IP を持たず、プライベートなコントロールプレーン IP エンドポイントは管理アクセスをプライベートネットワーク経由に制限します。両者は別の設定であり、公開エンドポイントがあるだけで匿名アクセスや管理権限が許可されるわけではありません。

プライベート IP の設定と DNS ベースのエンドポイントのアクセス制御も別です。実際のエンドポイント、IAM・Kubernetes の権限、接続経路を併せて確認する必要があります。

想定される影響

  • 不要な公開経路は外部からの攻撃対象を広げるおそれがあります。
  • プライベート接続を準備せずに公開経路を無効にすると、管理ツールや自動化が接続できなくなる場合があります。

対処方法

  • 外部 IP が不要なノードには enable_private_nodes = true を使用し、必要な外向き通信の経路を用意してください。
  • IP による管理アクセスを制限する場合は、管理ネットワークを接続した後で enable_private_endpoint = true を適用してください。
  • DNS エンドポイントのアクセス制御を別途確認し、kubectl、CI/CD、管理ツールの接続と権限を検証してください。

例

private_cluster_config の抜粋です。VPC、サブネット、IP 割り当て、そのバージョンで必要なコントロールプレーンのアドレス範囲などは別途用意してください。両方ともプライベートノードを使い、IP エンドポイントの設定だけが異なります。

変更前

hcl
resource "google_container_cluster" "cluster" {
  name               = "marcellus-wallace"
  location           = "us-central1-a"
  initial_node_count = 3

  private_cluster_config {
    enable_private_endpoint = false
    enable_private_nodes    = true
  }

  timeouts {
    create = "30m"
    update = "40m"
  }
}

変更後

hcl
resource "google_container_cluster" "cluster" {
  name               = "marcellus-wallace"
  location           = "us-central1-a"
  initial_node_count = 3

  private_cluster_config {
    enable_private_endpoint = true
    enable_private_nodes    = true
  }

  timeouts {
    create = "30m"
    update = "40m"
  }
}

補足:

  • 変更前: ノードには外部 IP がありませんが、コントロールプレーンの外部 IP エンドポイントは維持します。認証と認可は別途適用されます。
  • 変更後: コントロールプレーンの IP エンドポイントもプライベート経路に制限します。DNS エンドポイントの設定まで自動的に制限するものではありません。

参考資料