IAM ポリシーを作成する


このページでは、Google Kubernetes Engine(GKE)での認可に使用する Identity and Access Management(IAM)ポリシーの作成方法について説明します。

概要

Google Cloud、GKE、Kubernetes API の呼び出しのすべてにおいて、リクエストを行うアカウントに必要な権限が付与されている必要があります。デフォルトでは、自身以外のユーザーはプロジェクトやそのリソースにアクセスできません。IAM を使用すると、プロジェクトにアクセスできるユーザーとそのユーザーに許可する操作を管理できます。IAM 権限は、クラスタまたは Namespace の特定のオブジェクトに対するアクセスを詳細に制御する Kubernetes RBAC と連携します。IAM では、プロジェクト レベルと組織レベルの権限が重視されますが、GKE に固有の事前定義ロールもいくつか用意されています。

ユーザーとサービス アカウントに Google Cloud プロジェクトへのアクセス権を付与するには、それらをプロジェクト チームメンバーとして追加してから、チームメンバーにロールを割り当てます。ロールでは、アカウントからのアクセスが可能な Google Cloud リソースと実行可能なオペレーションが定義されます。

GKE では、IAM を使用して、クラスタへのアクセスと操作を許可するユーザーおよびサービス アカウントを管理することもできます。

始める前に

作業を始める前に、次のことを確認してください。

  • Google Kubernetes Engine API を有効にします。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化します。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新のバージョンを取得します。

Kubernetes RBAC との連携

Kubernetes 独自のロールベースのアクセス制御(RBAC)システムも、クラスタ内のリソースへのアクセスを管理します。IAM はプロジェクト レベルでアクセスを制御するのに対し、RBAC はクラスタレベルと Namespace レベルでアクセスを制御します。

IAM と RBAC は連携して使用できます。エンティティには、クラスタ内のリソースを操作するのに十分な RBAC と IAM 権限が必要です。

IAM ロール

以降のセクションでは、Google Cloud で使用できる IAM ロールについて説明します。

事前定義された GKE ロール

IAM には事前定義ロールが用意されています。こうしたロールを使用すると、特定の Google Cloud リソースに対するアクセス権を付与し、それ以外のリソースへの無認可のアクセスを防止できます。

IAM には、GKE 用に次の事前定義ロールが用意されています。

Role Title Description Lowest resource
roles/container.admin Kubernetes Engine Admin

Provides access to full management of clusters and their Kubernetes API objects.

To set a service account on nodes, you must also have the Service Account User role (roles/iam.serviceAccountUser) on the user-managed service account that your nodes will use.

  • Project
roles/container.clusterAdmin Kubernetes Engine Cluster Admin

Provides access to management of clusters.

To set a service account on nodes, you must also have the Service Account User role (roles/iam.serviceAccountUser) on the user-managed service account that your nodes will use.

  • Project
roles/container.clusterViewer Kubernetes Engine Cluster Viewer

Provides access to get and list GKE clusters.

roles/container.defaultNodeServiceAccount Kubernetes Engine Default Node Service Account Alpha Least privilege role to use as the default service account for GKE Nodes.
roles/container.developer Kubernetes Engine Developer

Provides access to Kubernetes API objects inside clusters.

  • Project
roles/container.hostServiceAgentUser Kubernetes Engine Host Service Agent User

Allows the Kubernetes Engine service account in the host project to configure shared network resources for cluster management. Also gives access to inspect the firewall rules in the host project.

roles/container.viewer Kubernetes Engine Viewer

Provides read-only access to resources within GKE clusters, such as nodes, pods, and GKE API objects.

  • Project

各ロールの個別の権限の完全なリストについては、Google Kubernetes Engine のロールをご覧ください。gcloud CLI または Google Cloud コンソールを使用して各 IAM ロールの権限を表示することもできます。手順については、IAM ロールによって付与される権限を表示するをご覧ください。

IAM の基本ロール

IAM の基本ロールは、すべての Google Cloud リソースへのグローバルなプロジェクト レベルのアクセス権をユーザーに付与します。プロジェクトとクラスタを安全に保つため、できるだけ事前定義ロールを使用してください。

基本ロールの詳細については、IAM ドキュメントの基本ロールをご覧ください。

サービス アカウント ユーザーのロール

サービス アカウント ユーザーは、サービス アカウントによる実行と同様にサービスを実行する権限を Google Cloud ユーザー アカウントに付与します。

  • プロジェクトのユーザーに iam.serviceAccountUser 役割を付与すると、今後作成される可能性があるサービス アカウントを含み、プロジェクト内のすべてのサービス アカウントに付与されている役割のすべてがユーザーに付与されます。

  • 特定のサービス アカウントの iam.serviceAccountUser 役割をユーザーに付与すると、そのサービス アカウントに付与されているすべての役割がそのユーザーに付与されます。

このロールには次の権限が含まれます。

  • iam.serviceAccounts.actAs
  • iam.serviceAccounts.get
  • iam.serviceAccounts.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list

ServiceAccountUser ロールの詳細については、IAM ドキュメントの ServiceAccountUser を参照してください。

次のコマンドは、サービス アカウント ユーザーのロールを付与するための構文を示しています。

gcloud iam service-accounts add-iam-policy-binding \
  SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
  --member=user:USER \
  --role=roles/iam.serviceAccountUser

以下を置き換えます。

  • SA_NAME: サービス アカウントの名前。
  • PROJECT_ID: Google Cloud プロジェクトの ID。
  • USER: ユーザーのメールアドレス。

Host サービス エージェント ユーザーのロール

Host サービス エージェント ユーザーのロールは、共有 VPC クラスタでのみ使用されます。この役割には次の権限が含まれます。

  • compute.firewalls.get
  • container.hostServiceAgent.*
  • dns.networks.bindDNSResponsePolicy
  • dns.networks.bindPrivateDNSPolicy
  • dns.networks.bindPrivateDNSZone

カスタムロール

事前定義ロールがニーズに合わない場合は、定義した権限を使用してカスタムロールを作成できます。

カスタムロールを作成して割り当てる方法については、カスタムロールの作成と管理をご覧ください。

IAM ロールによって付与される権限を表示する

gcloud CLI または Google Cloud コンソールを使用して、各ロールによって付与される権限を表示できます。

gcloud

特定のロールで付与される権限を確認するには、次のコマンドを実行します。

gcloud iam roles describe roles/ROLE

ROLE は任意の IAM ロールに置き換えます。GKE のロールには接頭辞 roles/container が付いています(例: gcloud iam roles describe roles/container.admin)。

Console

特定のロールで付与される権限を確認するには、次の操作を行います。

  1. Google Cloud コンソールの [IAM と管理] ページの [ロール] セクションに移動します。

    [IAM と管理] に移動

  2. GKE ロールを表示するには、[表をフィルタリング] フィールドに「Kubernetes Engine」と入力します。

  3. 表示するロールを選択します。ロールの説明と割り当てられている権限のリストが表示されます。

IAM ロールの管理

ユーザーの IAM ロールと権限を管理する方法については、IAM ドキュメントのプロジェクト メンバーに対するアクセス権の付与、変更、取り消しをご覧ください。

サービス アカウントについては、サービス アカウントへのロールの付与をご覧ください。

GKE と IAM の連携の例を以下にご紹介します。

  • 新しい社員が入社したとします。新入社員を Google Cloud プロジェクトに追加する必要がありますが、この社員に必要な権限は、プロジェクトのクラスタ、それ以外の Google Cloud リソースの閲覧のみです。プロジェクトのオーナーは、プロジェクト レベルの Compute 閲覧者の役割を割り当てます。このロールは、Compute Engine リソースであるノードを取得して一覧表示する読み取り専用アクセスを付与します。
  • オペレーション担当の社員は、gcloud や Google Cloud コンソールを使用してクラスタを更新する必要があります。このオペレーションには container.clusters.update 権限が必要であるため、プロジェクトのオーナーは当該の社員に Kubernetes Engine Cluster 管理者ロールを割り当てます。これで、この社員は Kubernetes Engine Cluster 管理者の役割と Compute 閲覧者の役割の両方によって付与された権限を使用できます。
  • デプロイの問題の発生原因の調査が求められる社員がいます。当該の社員は、kubectl get pods を実行して、クラスタ内で実行されているポッドを確認する必要があります。この社員にはすでに Compute 閲覧者の役割が付与されていますが、これはポッドをリストするには不十分です。Kubernetes Engine 閲覧者の役割が必要です。
  • 新しいクラスタの作成が求められる社員がいます。プロジェクト オーナーは、この社員に PROJECT_NUMBER-compute@developer.gserviceaccount.com サービス アカウントのサービス アカウント ユーザーの役割を付与して、この社員のアカウントで Compute Engine のデフォルトのサービス アカウントにアクセスできるようにします。このサービス アカウントには編集者の役割があり、これにより広範な権限が与えられます。

次のステップ