GKE のアクセス スコープ


このページでは、Google Kubernetes Engine(GKE)クラスタ内のノードに付与されるデフォルトのアクセス スコープについて説明します。

アクセス スコープとは

アクセス スコープは、ノードと、ノードで実行されるワークロード(ワークロードがアプリケーションのデフォルト認証情報(ADC)を使用する場合)の権限を付与する従来の方法です。アクセス スコープは、クライアント ライブラリまたは gcloud CLI からの API 呼び出しで使用される OAuth スコープを定義します。

独自のアクセス スコープは指定しないことをおすすめします。代わりに、IAM 権限または Kubernetes ロールベースのアクセス制御(RBAC)を使用して、特定の IAM サービス アカウントまたは Kubernetes サービス アカウントにアクセスを付与します。

デフォルトのアクセス スコープ

新しい GKE クラスタを作成すると、Google Cloud は、ノードで使用されるサービス アカウントに基づいて、ノードにデフォルトのアクセス スコープ セットを割り当てます。これらのアクセス スコープは、GKE の特定の機能を有効にします。Standard クラスタを作成するときに、--scopes フラグを使用してアクセス スコープを手動で設定することもできます。Autopilot クラスタ、またはノードプール。既存のノードプールのアクセス スコープは変更できません。代わりに、新しいスコープで新しいノードプールを作成し、そのノードプールにワークロードを移行します。

以降のセクションでは、カスタム サービス アカウントを指定するかどうかと、アクセス スコープを手動で指定するかどうかに基づいて、GKE がノードに追加するデフォルトのアクセス スコープについて説明します。

Autopilot クラスタ

サービス アカウント アクセス スコープを手動で指定したか。 GKE によって追加されるアクセス スコープ
Compute Engine のデフォルトのサービス アカウント いいえ
  • https://www.googleapis.com/auth/devstorage.read_only
  • https://www.googleapis.com/auth/service.management.readonly
  • https://www.googleapis.com/auth/servicecontrol
  • https://www.googleapis.com/auth/trace.append
  • https://www.googleapis.com/auth/logging.write: Cloud Logging が有効な場合に追加
  • https://www.googleapis.com/auth/monitoring: Cloud Monitoring が有効な場合に追加
はい 手動で指定したスコープ
カスタム サービス アカウント いいえ https://www.googleapis.com/auth/cloud-platform
はい 手動で指定したスコープ

Standard クラスタ

サービス アカウント 手動で指定したアクセス スコープ GKE アクセス スコープ
Compute Engine のデフォルトのサービス アカウント いいえ
  • https://www.googleapis.com/auth/devstorage.read_only
  • https://www.googleapis.com/auth/service.management.readonly
  • https://www.googleapis.com/auth/servicecontrol
  • https://www.googleapis.com/auth/trace.append
  • https://www.googleapis.com/auth/logging.write: Cloud Logging が有効な場合に追加
  • https://www.googleapis.com/auth/monitoring: Cloud Monitoring が有効な場合に追加
はい
  • 手動で指定したスコープ
  • https://www.googleapis.com/auth/monitoring.write
  • https://www.googleapis.com/auth/logging.write: Cloud Logging が有効な場合に追加
  • https://www.googleapis.com/auth/monitoring: Cloud Monitoring が有効な場合に追加
カスタム サービス アカウント いいえ
  • https://www.googleapis.com/auth/userinfo.email
  • https://www.googleapis.com/auth/cloud-platform
はい
  • 手動で指定したスコープ
  • https://www.googleapis.com/auth/monitoring.write
  • https://www.googleapis.com/auth/logging.write: Cloud Logging が有効な場合に追加
  • https://www.googleapis.com/auth/monitoring: Cloud Monitoring が有効な場合に追加

ワークロード用にカスタム サービス アカウントを構成する

IAM は、Google Cloud プロジェクト内のユーザーとサービス アカウントに承認済みのロールを付与するためのアクセス制御システムです。サービス アカウントは、ユーザーに代わってアプリケーションのデプロイなどのタスクを実行する特別な Google アカウントです。IAM を使用してサービス アカウントを作成し、IAM ポリシー バインディングを使用してアカウントを保護します。

ワークロードが Compute Engine にアクセスする必要がある場合は、サービス アカウントに Compute Engine 管理者のロールを付与します。ワークロードが Artifact Registry から非公開イメージを pull する必要がある場合は、Artifact Registry リポジトリのアクセス制御の構成をご覧ください。

サービス アカウントを作成する

名前を kubernetes-engine-node-sa としてカスタム サービス アカウントを作成するには、次のコマンドを実行します。

export NODE_SA_NAME=kubernetes-engine-node-sa
gcloud iam service-accounts create $NODE_SA_NAME \
  --display-name "GKE Node Service Account"
export NODE_SA_EMAIL=`gcloud iam service-accounts list --format='value(email)' \
  --filter='displayName:GKE Node Service Account'`

最小限のロールを付与する

サービス アカウントを必要最小限の GKE のロールと権限で構成するには、次のコマンドを実行します。ここで、$PROJECTプロジェクト ID です。

export PROJECT=`gcloud config get-value project`
gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/monitoring.metricWriter
gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/monitoring.viewer
gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/logging.logWriter

追加のロールを付与する

サービス アカウントに Compute Engine 管理者のロールを付与するには、次のコマンドを実行します。

gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/compute.admin

Artifact Registry に保存されている非公開イメージへのアクセス権をサービス アカウントに付与する方法については、Google Kubernetes Engine クラスタへのアクセス権の付与をご覧ください。

カスタム サービス アカウントを使用するクラスタまたはノードプールを作成する

カスタム サービス アカウントを使用するクラスタを作成するには、次のコマンドを実行します。

gcloud container clusters create --service-account=$NODE_SA_EMAIL

既存のクラスタにノードプールを作成するには、次のコマンドを実行します。

gcloud container node-pools create --service-account=$NODE_SA_EMAIL