Cloud IAM ポリシーの作成

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

概要

Google Cloud Platform(GCP)、GKE、Kubernetes API のすべての呼び出しにおいて、リクエストを行うアカウントには必要な権限が付与されている必要があります。デフォルトでは、フォルダレベルと組織レベルのポリシーで権限が付与されているユーザー以外は、認証や承認を受けずにプロジェクトやそのリソースにアクセスすることはできません。Cloud IAM を使用すると、プロジェクトにアクセスできるユーザーとそのユーザーに許可する操作を管理できます。

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

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

始める前に

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

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

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

Cloud IAM の役割

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

事前定義された GKE の役割

Cloud IAM には事前定義された役割が用意されています。これらの役割を使用すると、特定の GCP リソースへのアクセス権を付与したり、その他のリソースへの許可されていないアクセスを防いだりできます。

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

Kubernetes Engine roles

Role Title Description Permissions Lowest Resource
roles/
container.admin
Kubernetes Engine Admin Provides access to full management of Container Clusters and their Kubernetes API objects. container.*
resourcemanager.projects.get
resourcemanager.projects.list
Project
roles/
container.clusterAdmin
Kubernetes Engine Cluster Admin Provides access to management of Container Clusters. container.clusters.create
container.clusters.delete
container.clusters.get
container.clusters.list
container.clusters.update
container.operations.*
resourcemanager.projects.get
resourcemanager.projects.list
Project
roles/
container.clusterViewer
Kubernetes Engine Cluster Viewer Read-only access to Kubernetes Clusters. container.clusters.get
container.clusters.list
resourcemanager.projects.get
resourcemanager.projects.list
roles/
container.developer
Kubernetes Engine Developer Provides full access to Kubernetes API objects inside Container Clusters. container.apiServices.*
container.backendConfigs.*
container.bindings.*
container.certificateSigningRequests.create
container.certificateSigningRequests.delete
container.certificateSigningRequests.get
container.certificateSigningRequests.list
container.certificateSigningRequests.update
container.certificateSigningRequests.updateStatus
container.clusterRoleBindings.get
container.clusterRoleBindings.list
container.clusterRoles.get
container.clusterRoles.list
container.clusters.get
container.clusters.list
container.componentStatuses.*
container.configMaps.*
container.controllerRevisions.get
container.controllerRevisions.list
container.cronJobs.*
container.customResourceDefinitions.*
container.daemonSets.*
container.deployments.*
container.endpoints.*
container.events.*
container.horizontalPodAutoscalers.*
container.ingresses.*
container.initializerConfigurations.*
container.jobs.*
container.limitRanges.*
container.localSubjectAccessReviews.*
container.namespaces.*
container.networkPolicies.*
container.nodes.*
container.persistentVolumeClaims.*
container.persistentVolumes.*
container.petSets.*
container.podDisruptionBudgets.*
container.podPresets.*
container.podSecurityPolicies.get
container.podSecurityPolicies.list
container.podTemplates.*
container.pods.*
container.replicaSets.*
container.replicationControllers.*
container.resourceQuotas.*
container.roleBindings.get
container.roleBindings.list
container.roles.get
container.roles.list
container.scheduledJobs.*
container.secrets.*
container.selfSubjectAccessReviews.*
container.serviceAccounts.*
container.services.*
container.statefulSets.*
container.storageClasses.*
container.subjectAccessReviews.*
container.thirdPartyObjects.*
container.thirdPartyResources.*
container.tokenReviews.*
resourcemanager.projects.get
resourcemanager.projects.list
Project
roles/
container.hostServiceAgentUser
Kubernetes Engine Host Service Agent User Use access of the Kubernetes Engine Host Service Agent. compute.firewalls.get
container.hostServiceAgent.*
roles/
container.viewer
Kubernetes Engine Viewer Provides read-only access to GKE resources. container.apiServices.get
container.apiServices.list
container.backendConfigs.get
container.backendConfigs.list
container.bindings.get
container.bindings.list
container.certificateSigningRequests.get
container.certificateSigningRequests.list
container.clusterRoleBindings.get
container.clusterRoleBindings.list
container.clusterRoles.get
container.clusterRoles.list
container.clusters.get
container.clusters.list
container.componentStatuses.*
container.configMaps.get
container.configMaps.list
container.controllerRevisions.get
container.controllerRevisions.list
container.cronJobs.get
container.cronJobs.getStatus
container.cronJobs.list
container.customResourceDefinitions.get
container.customResourceDefinitions.list
container.daemonSets.get
container.daemonSets.getStatus
container.daemonSets.list
container.deployments.get
container.deployments.getStatus
container.deployments.list
container.endpoints.get
container.endpoints.list
container.events.get
container.events.list
container.horizontalPodAutoscalers.get
container.horizontalPodAutoscalers.getStatus
container.horizontalPodAutoscalers.list
container.ingresses.get
container.ingresses.getStatus
container.ingresses.list
container.initializerConfigurations.get
container.initializerConfigurations.list
container.jobs.get
container.jobs.getStatus
container.jobs.list
container.limitRanges.get
container.limitRanges.list
container.namespaces.get
container.namespaces.getStatus
container.namespaces.list
container.networkPolicies.get
container.networkPolicies.list
container.nodes.get
container.nodes.getStatus
container.nodes.list
container.operations.*
container.persistentVolumeClaims.get
container.persistentVolumeClaims.getStatus
container.persistentVolumeClaims.list
container.persistentVolumes.get
container.persistentVolumes.getStatus
container.persistentVolumes.list
container.petSets.get
container.petSets.list
container.podDisruptionBudgets.get
container.podDisruptionBudgets.getStatus
container.podDisruptionBudgets.list
container.podPresets.get
container.podPresets.list
container.podSecurityPolicies.get
container.podSecurityPolicies.list
container.podTemplates.get
container.podTemplates.list
container.pods.get
container.pods.getStatus
container.pods.list
container.replicaSets.get
container.replicaSets.getScale
container.replicaSets.getStatus
container.replicaSets.list
container.replicationControllers.get
container.replicationControllers.getScale
container.replicationControllers.getStatus
container.replicationControllers.list
container.resourceQuotas.get
container.resourceQuotas.getStatus
container.resourceQuotas.list
container.roleBindings.get
container.roleBindings.list
container.roles.get
container.roles.list
container.scheduledJobs.get
container.scheduledJobs.list
container.serviceAccounts.get
container.serviceAccounts.list
container.services.get
container.services.getStatus
container.services.list
container.statefulSets.get
container.statefulSets.getStatus
container.statefulSets.list
container.storageClasses.get
container.storageClasses.list
container.thirdPartyObjects.get
container.thirdPartyObjects.list
container.thirdPartyResources.get
container.thirdPartyResources.list
container.tokenReviews.*
resourcemanager.projects.get
resourcemanager.projects.list
Project

GKE の各役割によって付与される権限の詳細は、Cloud IAM の役割によって付与される権限をご覧ください。

Cloud IAM の基本の役割

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

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

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

サービス アカウント ユーザーは、GCP サービス アカウントを使用して特定のタスクを完了する権限をユーザーに付与します。GKE では、クラスタの作成や更新を行うユーザーにこの役割が必要となる場合があります。エンティティが必要とするアクセスレベルに応じて、サービス アカウント ユーザーの役割と他の役割を組み合わせてください。

たとえば、クラスタ管理者の役割を持つユーザーがクラスタを作成する必要がある場合、クラスタノードのサービス アカウントにアクセスする必要があります。そのサービス アカウントの Cloud IAM ポリシーに対するサービス アカウント ユーザー役割をユーザーに付与することで、そのユーザーがサービス アカウントを使用する権限を持つことが保証されます。

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
Service Account User Run operations as the service account. iam.serviceAccounts.actAs
iam.serviceAccounts.get
iam.serviceAccounts.list
resourcemanager.projects.get
resourcemanager.projects.list
Service Account
役割 タイトル 説明 権限 最下位のリソース

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

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

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

カスタムの役割

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

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

Cloud IAM の役割で付与される権限

gcloud コマンドライン ツールまたは GCP Console を使用して、各役割で付与される権限を確認できます。

gcloud

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

gcloud iam roles describe roles/[ROLE]

例:

gcloud iam roles describe roles/container.admin

Console

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

  1. GCP Console で、IAM メニューの [役割] セクションにアクセスします。

    IAM メニューにアクセスする

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

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

Cloud IAM ポリシーの管理

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

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

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

  • 新しい社員が入社したとします。この新入社員を GCP プロジェクトに追加する必要がありますが、この社員に許可するのは、プロジェクトのクラスタと他の GCP リソースの閲覧のみです。そこでプロジェクト オーナーは、プロジェクト レベルの閲覧者の役割をこの社員に割り当てます。この役割には、プロジェクトとそのリソースの閲覧に必要な compute.projects.get 権限が含まれています。
  • この社員は運用を担当しており、gcloud や Google Cloud Platform Console を使用してクラスタを更新する必要があります。この操作には container.clusters.update 権限が必要です。そこでプロジェクト オーナーは、この社員にクラスタ管理者の役割を割り当てます。これで、この社員にはクラスタ管理者と閲覧者の役割が付与されました。
  • この社員は、Deployment に発生している問題の原因を調査することになりました。kubectl get pods を実行して、クラスタ内で実行されているポッドを確認する必要があります。この社員はすでに閲覧者の役割を持っているため、この権限は付与されています。
  • この社員は新しいクラスタを作成することになりました。そこでプロジェクト オーナーは、この社員にサービス アカウント ユーザーの役割を付与します。これで、この社員のアカウントで GKE のデフォルトのサービス アカウントにアクセスできます。

次のステップ

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

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

Kubernetes Engine のドキュメント