Kubernetes RBAC
Verrazzanoは、Kubernetesロールベースのアクセス制御(RBAC)を使用して、Verrazzanoリソースを保護します。
Verrazzanoには、ユーザーに付与できる一連のロールが含まれており、Kubernetesによって管理されるVerrazzanoリソースへのアクセスが可能になります。さらに、Verrazzanoは、様々なVerrazzanoシステム・コンポーネント(オペレータおよびサードパーティ・コンポーネント)に必要な権限を付与する多数のロールを作成します。
Verrazzanoは、インストール中およびプロジェクトについてはプロジェクト作成時または更新時にデフォルトのロール・バインディングを作成します。
ノート
Kubernetes RBACは、Verrazzanoがデプロイされるすべてのクラスタで有効にする必要があります。有効にしないと、アクセス制御が機能しません。RBACは、ほとんどのKubernetes環境でデフォルトで有効になっています。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 |
ノート
プロジェクト・ロールのロール・バインディングは自動的に作成されますが、参照するプロジェクト固有のグループは自動的には作成されません。KeycloakコンソールまたはAPIを使用してこれらのグループを作成するか、プロジェクトに異なるバインディング・サブジェクトを指定する必要があります。デフォルトのロール・バインディングのオーバーライド
システム・ロールとプロジェクト・ロールに対して作成されるデフォルトのロール・バインディングをオーバーライドできます。
システム・ロール・バインディングのオーバーライド
インストール中に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
...
プロジェクト・ロール・バインディングのオーバーライド
プロジェクトの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
...