役割ベースのアクセス制御

このページでは、Kubernetes Engine の役割ベースのアクセス制御の概要を説明します。

概要

Kubernetes Engine の役割ベースのアクセス制御(RBAC)を使用すると、コンテナ クラスタで稼働している Kubernetes API リソースにユーザーがどのようにアクセスできるかをきめ細かく制御できます。RBAC では、クラスタのユーザーに与える権限を動的に設定し、ユーザーが使用可能なリソースの種類を定義できます。

RBAC 権限は、クラスタ全体に適用することも、クラスタ内の特定の名前空間だけに適用することもできます。クラスタ全体の権限は、特定のユーザーのアクセスを特定の API リソース(セキュリティ ポリシーやシークレットなど)に制限する場合に便利です。名前空間固有の権限は、たとえば、複数のユーザー グループがそれぞれの名前空間内で作業している場合に便利です。RBAC は、ユーザーが自分の名前空間内のクラスタ リソースにのみアクセスできるようにするのに役立ちます。

Identity and Access Management とのやり取り

Kubernetes Engine は、コンテナ クラスタへのアクセスの制御に Identity and Access Management(IAM)も使用します。ただし、IAM の動作はプロジェクト単位です。つまり、ユーザーが特定の Cloud Platform プロジェクトのクラスタにアクセスするには、IAM レベルの権限が必要です。

RBAC 権限を使用すると、各クラスタ内のリソースへのアクセスをきめ細かく制御できます。そのため、IAM と RBAC は連携して動作でき、クラスタ内のリソースを操作するには、ユーザーは各レベルの十分な権限を持っている必要があります。

役割ベースのアクセス制御を使用する場合の前提条件

Kubernetes バージョン 1.6 または 1.7 を実行している Kubernetes Engine クラスタで役割ベースのアクセス制御の権限を有効にするには、--no-enable-legacy-authorization オプションを使用してクラスタを作成またはアップグレードする必要があります。

クラスタで以前の承認機構が無効になったら、次の Kubernetes コマンドを実行して承認役割の作成権限をユーザーに付与します。

kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin [--user=<user-name>]

Kubernetes バージョン 1.8 以降を実行している Kubernetes Engine クラスタは、デフォルトで以前の承認システムを無効にするため、特別な操作を必要とせずに役割ベースのアクセス制御の権限が有効になります。

役割ベースのアクセス制御の設定

RBAC 権限を定義するには、クラスタで rbac.authorization.k8s.io API グループからオブジェクトを作成します。kubectl コマンドライン インターフェースまたはプログラムを使用して、オブジェクトを作成できます。

2 種類のオブジェクトを作成する必要があります。

  1. Role または ClusterRole オブジェクトは、ユーザーのセットに対して許可されるリソースの種類とオペレーションを定義します。
  2. RoleBinding または ClusterRoleBinding は、Role(または ClusterRole)を 1 人以上の特定のユーザーと関連付けます。

RBAC 権限は純粋に付加的なものであり、「拒否」ルールはありません。RBAC 権限を構成するときは、クラスタ リソースへのアクセスをユーザーに「許可する」ことについて考える必要があります。

Role での権限の定義

Kubernetes の Role または ClusterRole API オブジェクト内で権限を定義する必要があります。Role が 1 つの名前空間内のリソースへのアクセスを許可するのに対し、ClusterRole はクラスタ全体のリソースへのアクセスを許可します。

Role(または ClusterRole)オブジェクトでは、rules のセットとして権限を定義します。rules によって、その役割の名前空間リソースの種類許可されるオペレーションが決まります。たとえば、特定の名前空間内のすべてのポッドリソースに対する読み取りアクセス(getwatchlist などのオペレーション)を許可する Role を作成できます。

RoleClusterRole の比較

ClusterRole の権限はクラスタ全体に適用されるため、Role とは異なる種類のリソースへのアクセスを制御するために使用できます。たとえば、次のような場合です。

  • ノードなどのクラスタ スコープのリソース
  • /healthz などの非リソース エンドポイント
  • 名前空間全体の名前空間を指定されたリソース(名前空間に関係なく、クラスタ全体のすべてのポッド)

RoleBinding によるユーザーへの権限の割り当て

Role(または ClusterRole)を作成した後は、RoleBinding(または ClusterRoleBinding)オブジェクトを作成して、ユーザーのセットに Role(または ClusterRole)の権限を付与する必要があります。ユーザーは、個別ユーザーまたは Kubernetes サービス アカウントのいずれでもかまいません。

RoleBinding(または ClusterRoleBinding)には、ユーザーのリストと、そのユーザーに付与される Role(または ClusterRole)への参照が含まれます。

API の使用法と例

Kubernetes API を使用して RBAC に必要な RoleClusterRoleRoleBindingClusterRoleBinding オブジェクトを作成する方法については、Kubernetes のドキュメントで役割ベースのアクセス制御による承認をご覧ください。

次のステップ

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

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