アクセス制御

Google Cloud プロジェクトを作成した時点で、プロジェクトに参加しているのは作成したそのユーザーのみです。デフォルトの場合、他のユーザーはプロジェクトや Google Kubernetes Engine(GKE)などのリソースにアクセスできません。GKE では、ロールベースのアクセス制御(RBAC)を使用して、プロジェクトとクラスタ内のリソースへのアクセス権を管理する複数のオプションをサポートしています。

こうしたメカニズムは機能的に重複していますが、さまざまな種類のリソースを対象としています。それぞれについて、以下のセクションで簡単に説明します。

  • Kubernetes RBAC は、Kubernetes に組み込まれており、Kubernetes クラスタ内のオブジェクトに詳細な権限を付与します。権限は、クラスタ内に ClusterRole オブジェクトまたは Role オブジェクトとして存在します。RoleBinding オブジェクトは、Kubernetes ユーザー、連携ユーザー アカウント、または IAM サービス アカウントにロールを付与します。

    主に GKE を使用していて、クラスタ内のすべてのオブジェクトとオペレーションに対してきめ細かいアクセス許可が必要な場合は、Kubernetes RBAC が最善の選択です。

  • IAM は、クラスタを含む Google Cloud リソース、クラスタ内のオブジェクトのタイプを管理します。権限は IAM のプリンシパルに割り当てられます。

    IAM 内の特定の Kubernetes オブジェクトに権限を付与するメカニズムはありません。たとえば、CustomResourceDefinition(CRD)を作成するユーザー権限を付与することはできますが、特定の CustomResourceDefinition を 1 つのみの作成や、プロジェクト内の特定の Namespace や特定のクラスタに対してのみ作成できるようにする限定のユーザー権限は付与できません。ロールがフォルダレベルで適用される場合、IAM のロールはプロジェクト内のすべてのクラスタ、またはすべての子プロジェクト内の全クラスタに対して権限を付与します。

    複数の Google Cloud コンポーネントを使用していて、Kubernetes 固有のきめ細かい権限を管理する必要がない場合は、IAM が最適です。

Kubernetes RBAC

Kubernetes には RBAC のサポートが組み込まれているため、Kubernetes クラスタ内できめ細かい役割を作成できます。役割では、特定の Kubernetes オブジェクトや Kubernetes オブジェクト タイプにスコープを設定し、そのオブジェクトに関連して役割が付与するアクション(動詞)を定義できます。RoleBinding は Kubernetes オブジェクトでもあり、ロールをユーザーに付与します。GKE ユーザーは以下のいずれかになります。

  • 連携ユーザー アカウント
  • IAM サービス アカウント
  • Kubernetes サービス アカウント
  • Google Workspace ユーザー
  • X509 クライアント証明書を使用して認証されたユーザー

詳細については、ロールベースのアクセス制御をご覧ください。

IAM

IAM では、ロールを定義して、プリンシパルに割り当てることができます。ロールは権限の集合体であり、ロールをプリンシパルに割り当てることで、1 つ以上の Google Cloud リソースへのアクセス権を制御できます。ロールは大きく 3 つのカテゴリに分類されます。

プリンシパルは次のいずれかです。

  • ユーザー アカウント
  • サービス アカウント
  • Google Workspace ドメイン
  • Cloud Identity ドメイン

IAM ポリシーは、一連の権限を 1 つ以上の Google Cloud プリンシパルに割り当てます。

IAM を使用してサービス アカウントを作成し、構成することもできます。サービス アカウントは、ユーザーに代わってタスクを実行可能な、プロジェクトに関連付けられた Google Cloud アカウントです。サービス アカウントには、人間のユーザーと同じようにロールと権限が割り当てられます。

サービス アカウントは他の機能も提供します。詳しくは、IAM ポリシーの作成をご覧ください。

IAM の推奨事項

次の IAM 事前定義ロールを使用して、一般的なシナリオを促進することを検討してください。

  • Kubernetes Engine クラスタ閲覧者roles/container.clusterViewer): クラスタに接続することだけが必要な DevOps、エンジニア、アプリケーション デベロッパー。
  • Kubernetes Engine クラスタ管理者roles/container.clusterAdmin): Google Cloud プロジェクトで 1 つ以上のクラスタを管理する必要があるプラットフォーム管理者とクラスタ オペレーター。

使用可能な IAM 事前定義ロールの一覧については、GKE の事前定義ロールをご覧ください。

また、Compute Engine のデフォルトのサービス アカウントの代わりに、ノードで使用するカスタム IAM サービス アカウントを作成することも検討してください。カスタム サービス アカウントには、GKE が機能するために必要な最小限の権限を付与します。手順については、最小権限の IAM サービス アカウントを使用するをご覧ください。

IAM と Kubernetes RBAC の連携

IAM と Kubernetes RBAC は連携して、クラスタへのアクセスを管理します。IAM はプロジェクト レベルでアクセスを制御するのに対し、RBAC はクラスタレベルと名前空間レベルでアクセスを制御します。エンティティには、いずれのレベルでも、クラスタ内のリソースを操作するための十分な権限が必要です。

次のステップ