GKE ノードのサービスアカウント権限の確認

ノード専用のサービスアカウントに、必要な IAM 権限だけを付与してください。

説明

デフォルトのサービスアカウントは複数の用途で共有されたり、過剰な権限を持っていたりする場合があります。デフォルトだから必ず管理者権限を持つわけではないため、実際の IAM の付与内容を確認してください。

GKE ノードには専用のサービスアカウントを使い、最小権限で運用することを推奨します。アプリケーションの Google Cloud へのアクセスは、Workload Identity Federation for GKE などでノードの権限から分離してください。

想定される影響

  • ノードの認証情報が漏えいすると、そのアカウントに許可された別の Google Cloud リソースにもアクセスされるおそれがあります。
  • 共有アカウントは権限の分離や責任の追跡を難しくする場合があります。

対処方法

  • 実際に運用するノードプールの node_config.service_account に専用アカウントを指定してください。
  • 必要なノード運用用 IAM ロールを事前に用意し、不要なロールを削除してください。
  • アカウント変更によるノード置換やサービスへの影響を確認し、ワークロードのクラウド権限は別途管理してください。

例

デフォルトのノードプールを作成してから削除する設定の抜粋です。google_service_account.myserviceaccount と IAM ロールを別途用意し、実際に使う別のノードプールの node_config.service_account にもアカウントを指定してください。

変更前

hcl
resource "google_container_cluster" "example" {
  name                     = "my-gke-cluster"
  location                 = "us-central1"
  remove_default_node_pool = true
  initial_node_count       = 1

  node_config {
    oauth_scopes = [
      "https://www.googleapis.com/auth/cloud-platform"
    ]
  }
}

変更後

hcl
resource "google_container_cluster" "example" {
  name                     = "my-gke-cluster"
  location                 = "us-central1"
  remove_default_node_pool = true
  initial_node_count       = 1

  node_config {
    service_account = google_service_account.myserviceaccount.email
    oauth_scopes = [
      "https://www.googleapis.com/auth/cloud-platform"
    ]
  }
}

補足:

  • 変更前: 一時的なデフォルトプールのアカウントを指定していません。削除後に別のプールが使うアカウントは、この抜粋では決まりません。
  • 変更後: 一時的なデフォルトプールのアカウントを指定します。運用するプールにも適用し、cloud-platform スコープとは別に IAM ロールを最小化してください。

参考資料