レガシー アクセス スコープからの移行

このページでは、Kubernetes バージョン 1.10 以降を実行しているクラスタのアクセス スコープの変更について説明します。このような変更は、クラスタと Cloud Storage および Compute Engine とのインタラクションにのみ影響します。

アクセス スコープとは

アクセス スコープとは、ノードの権限と、ノードで実行するワークロードの権限(ワークロードがアプリケーションのデフォルト認証情報(ADC)を使用している場合)を指定するためのレガシーな方法です。1.10 よりも前のバージョンの Kubernetes を実行しているクラスタでは、クラスタのデフォルト サービス アカウントに一連のデフォルトのアクセス スコープが付与されました。このクラスタには、gcloud と Google Cloud Platform Console によって compute-rw および storage-ro アクセス スコープが付与されていました。

  • compute-rw により、すべての Compute Engine API メソッドに対する完全なアクセス権が付与されます。
  • storage-ro により、すべての Cloud Storage リソース(Container Registry に保存された非公開イメージを含む)に対する読み取り専用アクセス権が付与されます。

アクセス スコープの変更

Kubernetes バージョン 1.10 から、gcloud と GCP Console で compute-rw アクセス スコープが新しいクラスタと新しいノードプールにデフォルトで付与されなくなりました。 さらに、--scopesgcloud container create で指定されていると、gcloudcompute-rwstorage-ro が暗黙で追加されなくなりました。

これらの変更により、デフォルト サービス アカウントはクラスタを実行するために必要な権限のみを持つため、プロジェクトのセキュリティが向上します。

ワークロードへの影響

これらのスコープによりアクセス権が許可されている API の呼び出しがワークロードで不要な場合は、何もする必要がありません。

ただし、ワークロードが Compute Engine または Cloud Storage とインタラクションする権限を必要とする場合は、ワークロードに影響が及ぶ可能性があります。同等の Cloud Identity 役割および Access Management 役割を持つカスタム サービス アカウントを作成することをおすすめします。

スコープをオーバーライドする際、ワークロードで Cloud Storage とインタラクションする(Container Registry から非公開コンテナ イメージを pull するなど)権限が必要であれば、storage-ro スコープも含める必要があります。

あるいは、1.10 より前のクラスタの動作を再現するには、レガシー アクセス スコープに戻すをご覧ください。

効果

Compute Engine と Cloud Storage は、必要なスコープを持たない Kubernetes 1.10 クラスタで動作するアプリケーションに対して 403 エラーを返します。

さらに、スコープが不十分なリクエストに対するレスポンスには、必要なスコープが詳述された HTTP ヘッダーが含まれます。例:

WWW-Authenticate: Bearer realm="https://accounts.google.com/", error=insufficient_scope, scope="https://www.googleapis.com/auth/compute.readonly"

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

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

ワークロードが Compute Engine にアクセスする必要がある場合は、サービス アカウントに Compute Engine 管理者の役割を付与します。ワークロードが Container Registry から非公開イメージを pull する必要がある場合は、ストレージ オブジェクト閲覧者の役割を付与します。

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

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: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

ストレージ オブジェクト閲覧者の役割を付与するには、次のコマンドを実行します。

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

Container Registry に保存されている非公開イメージに対するアクセス権をサービス アカウントに付与する方法については、ユーザーと他のプロジェクトにレジストリへのアクセスを許可するをご覧ください。

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

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

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

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

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

レガシー アクセス スコープに戻す

Kubernetes バージョン 1.10 以降を実行しているクラスタでレガシー アクセス スコープを引き続き使用する場合は、手動でスコープを追加する必要があります。

Console

GCP Console を使用してクラスタを作成するには、次の手順に従います。

  1. GCP Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. [クラスタを作成] をクリックします。

  3. [マスターのバージョン] から、最新の Kubernetes 1.10 バージョンを選択します。

  4. 必要に応じてクラスタを構成します。まだ [作成] はクリックしないでください。

  5. デフォルトのノードプールの [高度な編集] をクリックします。

  6. [アクセス スコープ] セクションで、[各 API にアクセス権を設定] を選択します。

  7. Compute Engine で [読み取り / 書き込み] を選択します。ストレージはデフォルトでは [読み取りのみ] です。

  8. [保存] をクリックして [高度な編集] オーバーレイを終了します。

  9. [作成] をクリックします。

gcloud

クラスタを作成するには、次のコマンドを実行します。

gcloud container clusters create example-cluster --scopes compute-rw,gke-default

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

gcloud container node-pools create example-pool --scopes compute-rw,gke-default
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Kubernetes Engine のドキュメント