Kubernetes RBAC

Verrazzanoでのロールベースのアクセス制御の詳細

Verrazzanoは、Kubernetesロールベースのアクセス制御(RBAC)を使用して、Verrazzanoリソースを保護します。

Verrazzanoには、ユーザーに付与できる一連のロールが含まれており、Kubernetesによって管理されるVerrazzanoリソースへのアクセスが可能になります。さらに、Verrazzanoは、様々なVerrazzanoシステム・コンポーネント(オペレータおよびサードパーティ・コンポーネント)に必要な権限を付与する多数のロールを作成します。

Verrazzanoは、インストール中およびプロジェクトについてはプロジェクト作成時または更新時にデフォルトのロール・バインディングを作成します。

Verrazzanoユーザー・ロール

次の表に、定義されているVerrazzanoユーザー・ロールを示します。それぞれが、ユーザーまたはグループに直接付与されるClusterRoleです。(一部のシナリオでは、ユーザー・ロールをサービス・アカウントに付与することが適切である可能性があります。)

Verrazzanoロール バインディング・スコープ 説明
verrazzano-admin Cluster Verrazzanoシステム・コンポーネント、クラスタおよびプロジェクトを管理します。Verrazzanoをインストールして更新します。
verrazzano-monitor Cluster Verrazzanoシステム・コンポーネント、クラスタ、プロジェクトを表示およびモニターします。
verrazzano-project-admin ネームスペース アプリケーションをデプロイおよび管理します。
verrazzano-project-monitor ネームスペース アプリケーションを表示およびモニターします。

Kubernetesユーザー・ロール

Verrazzanoロールには、Kubernetes自体に対する権限は含まれません。かわりに、Kubernetesによって提供されるデフォルトのユーザー・ロールに依存します。これにより、Verrazzanoは、Verrazzanoロールで詳細なKubernetes権限のリストを維持することなく、Verrazzanoロールに適したKubernetesアクセス権を簡単に付与できます。

次の表に、各Verrazzanoロールに対してデフォルトで付与されるデフォルトのKubernetesロールを示します。

Verrazzanoロール Kubernetesロール バインディング・スコープ
verrazzano-admin admin Cluster
verrazzano-monitor 表示 Cluster
verrazzano-project-admin admin ネームスペース
verrazzano-project-monitor 表示 ネームスペース

デフォルトのロール・バインディング

Verrazzanoは、システムおよびプロジェクトのロール・バインディングを作成し、Verrazzano ClusterRoleを1つ以上のKubernetes Subjectにバインドします。デフォルトでは、各ロールはKeycloakグループにバインドされるため、そのグループのメンバーであるすべてのKeycloakユーザーにそのロールが付与されます。

また、Verrazzanoは、対応するKubernetesユーザー・ロールのロール・バインディングを作成します。特定のVerrazzanoロールに適したKubernetesロールは、対応するVerrazzanoロールと同じSubjectセットにバインドされます。

デフォルトのバインディングは、ロールをバインドする1つ以上のKubernetes Subjectを指定することでオーバーライドできます。有効な任意のSubject(ユーザー、グループまたはサービス・アカウント)を指定できますが、次の2つの注意が必要です:

  • 一般に、特定のユーザーではなくグループにロールを付与することをお薦めします。これにより、ロール・バインディングを削除して新しいメンバーシップを作成するのではなく、ユーザーのグループ・メンバーシップを編集することで役割を付与(または取消し)できます。
  • ロールを特定のユーザーに直接付与する場合は、ユーザー名ではなく一意のIDを使用してユーザーを指定する必要があります。これは、認証プロキシが、IDを含むユーザーのトークンからsub (サブジェクト)フィールドを偽装するためです。KeycloakユーザーIDは、ユーザー名とは異なり、一意であることが保証されます。

デフォルトのシステム・ロール・バインディング

Verrazzanoは、インストール中にシステム・ユーザーのロール・バインディングを作成します。デフォルトのロール・バインディングは次のとおりです:

ロール デフォルト・バインディング・サブジェクト
verrazzano-admin group: verrazzano-admins
verrazzano-monitor group: verrazzano-monitors

デフォルトのプロジェクト・ロール・バインディング

Verrazzanoは、プロジェクトの作成または更新時にプロジェクト・ユーザーのロール・バインディングを作成します。デフォルトのロール・バインディングは次のとおりです:

ロール デフォルト・バインディング・サブジェクト
verrazzano-project-admin group: verrazzano-project-<proj_name>-admins
verrazzano-project-monitor group: verrazzano-project-<proj_name>-monitors

デフォルトのロール・バインディングのオーバーライド

システム・ロールとプロジェクト・ロールに対して作成されるデフォルトのロール・バインディングをオーバーライドできます。

システム・ロール・バインディングのオーバーライド

インストール中にVerrazzano(およびKubernetes)ロールにバインドされたサブジェクト・セットをオーバーライドするには、次の例に示すように、Verrazzanoのインストールに使用するVerrazzano CRにSubjectsを追加します:

apiVersion: install.verrazzano.io/v1beta1
kind: Verrazzano
metadata:
  name: example-verrazzano
spec:
  ...
  security:
    adminSubjects:
    - name: admin-group
      kind: Group
    monitorSubjects:
    - name: view-group
      kind: Group
  ...
管理ロールとモニター・ロールの両方に複数のサブジェクトを指定できます。一方のロールに1つまたは複数のサブジェクトを指定することもできますが、他方にはできません。ロールにサブジェクトが指定されていない場合、デフォルトのバインディング・サブジェクトが使用されます。

プロジェクト・ロール・バインディングのオーバーライド

プロジェクトのVerrazzano(およびKubernetes)ロールにバインドされている一連のサブジェクトをオーバーライドするには、次の例に示すように、SubjectsをプロジェクトのVerrazzanoProject CRに追加します:

VerrazzanoProject CRを更新し、いずれかのロールに指定されたサブジェクトを変更すると、生成されたロール・バインディングが更新されることに注意してください。

apiVersion: clusters.verrazzano.io/v1beta1
kind: VerrazzanoProject
metadata:
  name: my-project
spec:
  ...
  security:
    projectAdminSubjects:
    - name: my-project-admin-group
      kind: Group
    projectMonitorSubjects:
    - name: my-project-view-group
      kind: Group
  ...
システム・ロール・バインディングと同様に、project-adminロールとproject-monitorロールの両方に複数のサブジェクトを指定できます。一方のロールに1つまたは複数のサブジェクトを指定することもできますが、他方にはできません。ロールにサブジェクトが指定されていない場合、デフォルトのバインディング・サブジェクトが使用されます。