Cloud IAM ポリシーの作成

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

概要

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

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

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

始める前に

このタスクの準備として、次の手順を行います。

  • Google Kubernetes Engine API が有効になっていることを確認します。
  • Enable Google Kubernetes Engine API を有効にする
  • Cloud SDK がインストール済みであることを確認します。
  • デフォルトのプロジェクト 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)システムでも、クラスタへのアクセスを管理します。Cloud IAM はプロジェクト レベルでアクセスを制御するのに対し、RBAC はクラスタレベルと名前空間レベルでアクセスを制御します。

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

Cloud IAM の役割

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

事前定義された GKE の役割

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

GKE 用に Cloud IAM で提供されている事前定義の役割は次のとおりです。

役割 役職 説明 最下位のリソース
roles/
container.admin
Kubernetes Engine 管理者 コンテナ クラスタと、それらの Kubernetes API オブジェクトのすべてを管理できるアクセス権を付与します。 プロジェクト
roles/
container.clusterAdmin
Kubernetes Engine Cluster 管理者 コンテナ クラスタを管理できるアクセス権を付与します。 プロジェクト
roles/
container.clusterViewer
Kubernetes Engine Cluster 閲覧者 Kubernetes クラスタへの読み取り専用アクセス権。
roles/
container.developer
Kubernetes Engine デベロッパー コンテナ クラスタ内の Kubernetes API オブジェクトに対する完全アクセス権を付与します。 プロジェクト
roles/
container.hostServiceAgentUser
Kubernetes Engine Host サービス エージェント ユーザー Kubernetes Engine Host サービス エージェントの使用アクセス権。
roles/
container.viewer
Kubernetes Engine 閲覧者 GKE リソースに対する読み取り専用アクセス権を付与します。 プロジェクト

Cloud IAM 役割のそれぞれによって付与される権限については、Cloud IAM 役割によって付与される権限を参照してください。

Cloud IAM の基本の役割

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

基本の役割について詳しくは、Cloud IAM ドキュメントの基本の役割をご覧ください。

サービス アカウント ユーザーの役割

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

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

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

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

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

gcloud iam service-accounts add-iam-policy-binding \
  [SA_NAME]@[PROJECT_ID].iam.gserviceaccount.com \
  --member=user:[USER] \
  --role=roles/iam.serviceAccountUser
roles/
iam.serviceAccountUser
サービス アカウント ユーザー 操作をサービス アカウントとして実行します。 iam.serviceAccounts.actAs
iam.serviceAccounts.get
iam.serviceAccounts.list
resourcemanager.projects.get
resourcemanager.projects.list
サービス アカウント
役割 役職 説明 権限 最下位のリソース

Host サービス エージェント ユーザーの役割

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

roles/
container.hostServiceAgentUser
Kubernetes Engine Host サービス エージェント ユーザー Kubernetes Engine Host サービス エージェントの使用権限。 compute.firewalls.get
container.hostServiceAgent.*
役割 役職 説明 権限 最下位のリソース

カスタムの役割

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

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

Cloud IAM の役割によって付与される権限を表示する

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

gcloud

特定の役割で付与される権限を確認するには、次のコマンドを実行します。[ROLE] は Cloud IAM の役割です。 GKE 役割には接頭辞 roles/container. が付けられます。

gcloud iam roles describe roles/[ROLE]

例:

gcloud iam roles describe roles/container.admin

Console

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

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

    Cloud IAM ページに移動

  2. [表をフィルタリング] フィールドに「GKE」と入力します。

  3. 目的の役割を選択します。

Cloud IAM の役割の管理

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

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

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

次のステップ

このページは役立ちましたか?評価をお願いいたします。

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

Kubernetes Engine のドキュメント