このページでは、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/ |
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/ |
Kubernetes Engine KMS Crypto Key User | Allow the Kubernetes Engine service agent in the cluster project to call KMS with user provided crypto keys to sign payloads. | |
roles/ |
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/ |
Kubernetes Engine Cluster Viewer |
Provides access to get and list GKE clusters. |
|
roles/ |
Kubernetes Engine Default Node Service Account | Least privilege role to use as the default service account for GKE Nodes. | |
roles/ |
Kubernetes Engine Developer |
Provides access to Kubernetes API objects inside clusters. |
|
roles/ |
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/ |
Kubernetes Engine Viewer |
Provides read-only access to resources within GKE clusters, such as nodes, pods, and GKE API objects. |
|
各ロールの個別の権限の完全なリストについては、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 コンソールを使用して、各ロールによって付与される権限を表示できます。
gcloud
特定のロールで付与される権限を確認するには、次のコマンドを実行します。
gcloud iam roles describe roles/ROLE
ROLE
は任意の IAM ロールに置き換えます。GKE のロールには接頭辞 roles/container
が付いています(例: gcloud iam roles describe roles/container.admin
)。
コンソール
特定のロールで付与される権限を確認するには、次の操作を行います。
Google Cloud コンソールの [IAM と管理] ページの [ロール] セクションに移動します。
GKE ロールを表示するには、[表をフィルタリング] フィールドに「
Kubernetes Engine
」と入力します。表示するロールを選択します。ロールの説明と割り当てられている権限のリストが表示されます。
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 のデフォルトのサービス アカウントにアクセスできるようにします。GKE はデフォルトでこのサービス アカウントをノードに接続するため、システム ワークロードはログや指標などのデータを Google Cloud に送信できます。