IAM ポリシーの作成

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

概要

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

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

GKE では、IAM を使用して、クラスタへのアクセスを許可するユーザーとサービス アカウント、これらのユーザーとサービス アカウントがクラスタ内で実行できるオペレーションを管理できます。

始める前に

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

次のいずれかの方法で gcloud のデフォルトの設定を指定します。

  • gcloud init。デフォルトの設定全般を確認する場合に使用します。
  • gcloud config。プロジェクト ID、ゾーン、リージョンを個別に設定する場合に使用します。

gcloud init の使用

エラー One of [--zone, --region] must be supplied: Please specify location を受信した場合は、このセクションの内容を実施します。

  1. gcloud init を実行して、次の操作を行います。

    gcloud init

    リモート サーバーで SSH を使用している場合は、--console-only フラグを指定して、コマンドがブラウザを起動しないようにします。

    gcloud init --console-only
  2. 手順に従って gcloud を承認し、Google Cloud アカウントを使用します。
  3. 新しい構成を作成するか、既存の構成を選択します。
  4. Google Cloud プロジェクトを選択します。
  5. デフォルトの Compute Engine ゾーンを選択します。

gcloud config の使用

  • デフォルトのプロジェクト ID を設定します。
    gcloud config set project project-id
  • ゾーンクラスタを使用する場合は、デフォルトのコンピューティング ゾーンを設定します。
    gcloud config set compute/zone compute-zone
  • リージョン クラスタを使用する場合は、デフォルトのコンピューティング リージョンを設定します。
    gcloud config set compute/region compute-region
  • gcloud を最新バージョンに更新します。
    gcloud components update

Kubernetes RBAC との連携

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

IAM と RBAC は連携して動作できるため、クラスタ内のリソースを操作するには、エンティティが各レベルの十分な権限を持っている必要があります。

IAM の役割

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

事前定義された GKE の役割

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

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

ロール 役職 説明 最下位のリソース
roles/container.admin Kubernetes Engine 管理者

クラスタとその Kubernetes API オブジェクトを完全に管理するためのアクセス権を付与します。

ノードでサービス アカウントを設定するには、サービス アカウント ユーザーロール(roles/iam.serviceAccountUser)も付与する必要があります。

プロジェクト
roles/container.clusterAdmin Kubernetes Engine クラスタ管理者

クラスタを管理するための権限を付与します。

ノードでサービス アカウントを設定するには、サービス アカウント ユーザーロール(roles/iam.serviceAccountUser)も付与する必要があります。

プロジェクト
roles/container.clusterViewer Kubernetes Engine Cluster 閲覧者 GKE クラスタの取得と一覧表示のアクセス権。
roles/container.developer Kubernetes Engine デベロッパー クラスタ内の Kubernetes API オブジェクトへのアクセス権を付与します。 プロジェクト
roles/container.hostServiceAgentUser Kubernetes Engine Host サービス エージェント ユーザー クラスタ管理用に共有ネットワーク リソースを構成することを、ホスト プロジェクトの Kubernetes Engine サービス アカウントに許可します。また、ホスト プロジェクトのファイアウォール ルールを調べるためのアクセス権も付与します。
roles/container.viewer Kubernetes Engine 閲覧者 GKE リソースに対する読み取り専用アクセス権を付与します。 プロジェクト

各 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

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

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

  • compute.firewalls.get
  • container.hostServiceAgent.*

カスタムの役割

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

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

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

それぞれの役割によって付与される権限は、gcloud コマンドライン ツールまたは Cloud Console を使用して表示できます。

gcloud

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

gcloud iam roles describe roles/role

ここで、role は IAM ロールです。GKE 役割には接頭辞 roles/container. が付けられます。

例:

gcloud iam roles describe roles/container.admin

Console

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

  1. Cloud Console の IAM ページの [ロール] セクションに移動します。

    [IAM] ページに移動

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

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

IAM 役割の管理

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

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

GKE での IAM の使用例を以下にご紹介します。

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

次のステップ