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 がインストールされていることを確認します。
  • 次のいずれかの方法で、プロジェクトにデフォルトの Google Cloud CLI 設定をセットアップします。
    • プロジェクトのデフォルトの設定全般を確認する場合は、gcloud init を使用します。
    • gcloud config を使用して、プロジェクト ID、ゾーン、リージョンを個別に設定します。

    gcloud init

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

      gcloud init

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

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

    gcloud config

    1. デフォルトのプロジェクト ID を設定します。
      gcloud config set project PROJECT_ID
    2. デフォルトの Compute Engine リージョン(例: us-central1)を設定します。
      gcloud config set compute/region COMPUTE_REGION
    3. デフォルトの Compute Engine ゾーン(例: us-central1-c)を設定します。
      gcloud config set compute/zone COMPUTE_ZONE
    4. gcloud を最新バージョンに更新します。
      gcloud components update

    デフォルトの場所を設定することで、gcloud CLI のエラー(One of [--zone, --region] must be supplied: Please specify location など)を防止できます。

Kubernetes RBAC との連携

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

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

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 クラスタ閲覧者

GKE クラスタを取得して一覧表示するためのアクセス権を付与します。

roles/container.developer Kubernetes Engine 開発者

クラスタ内の Kubernetes API オブジェクトへのアクセス権を付与します。

  • プロジェクト
roles/container.hostServiceAgentUser Kubernetes Engine Host サービス エージェント ユーザー

クラスタ管理用に共有ネットワーク リソースを構成することを、ホスト プロジェクトの Kubernetes Engine サービス アカウントに許可します。また、ホスト プロジェクトのファイアウォール ルールを調べるためのアクセス権も付与します。

roles/container.viewer Kubernetes Engine 閲覧者

ノード、Pod、GKE API オブジェクトなどの GKE クラスタ内のリソースへの読み取り専用アクセス権を付与します。

  • プロジェクト

各ロールの個別の権限の完全なリストについては、Google Kubernetes Engine のロールをご覧ください。gcloud CLI または Google Cloud Console を使用して各 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 Console を使用して、各ロールによって付与される権限を表示できます。

gcloud

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

gcloud iam roles describe roles/ROLE

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

Console

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

  1. Google 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 のデフォルトのサービス アカウントにアクセスできるようにします。このサービス アカウントには編集者の役割があり、これにより広範な権限が与えられます。

次のステップ