アクセス制御

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

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

  • Kubernetes RBAC は、Kubernetes に組み込まれており、Kubernetes クラスタ内のオブジェクトに詳細な権限を付与します。権限は、クラスタ内に ClusterRole オブジェクトまたは Role オブジェクトとして存在します。RoleBinding オブジェクトは、Kubernetes ユーザー、Google Cloud ユーザー、Google Cloud サービス アカウント、Google グループ(ベータ版)に役割を付与します。

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

  • IAM は、クラスタを含む Google Cloud リソース、クラスタ内のオブジェクトのタイプを管理します。権限は、Google Cloud、G Suite、Cloud Identity 内に存在する IAM メンバーに割り当てられます。

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

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

Kubernetes RBAC

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

  • Google Cloud ユーザー
  • Google Cloud サービス アカウント
  • Kubernetes サービス アカウント
  • G Suite ユーザー
  • G Suite Google グループ(ベータ版)

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

IAM

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

メンバーは以下のいずれかです。

  • Google アカウント
  • サービス アカウント
  • Google グループ
  • G Suite ドメイン
  • Cloud Identity ドメイン

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

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

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

IAM と Kubernetes RBAC の連携

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

次のステップ