GDC 上の VM ランタイム用ロールベース アクセス制御(RBAC)

GDC 上の VM ランタイムは、VM に関連するリソースを幅広く管理します。これらのリソースには、Google Kubernetes Engine(GKE)Enterprise エディション定義のリソース、KubeVirt 定義のリソース、Kubernetes リソースが含まれます。GDC 上の VM ランタイムは、ロールベース アクセス制御(RBAC)を使用して、マネージド リソースに対する権限を設定および適用します。これらのリソースを扱い、また VM を管理するために、4 つの ClusterRole を事前に構成して用意しています。

  • kubevm.admin
  • kubevm.edit
  • kubevm.view
  • kubevm.cluster.view

この 4 つの組み込みのロールは、GDC 上の VM ランタイムに関連するカスタム リソースに対して一般化されたアクセスモデルを提供します。各ロールには、リソースを操作するための事前設定済みの権限があります。このドキュメントでは、クラスタ管理者が独自のアクセスモデルをカスタマイズできるように、GDC 上の VM ランタイムで管理されるリソースについて説明します。

事前定義 ClusterRole

このセクションでは、事前定義 ClusterRole についてそれぞれ説明します。これらの ClusterRole は、GDC 上の VM ランタイムが有効になっている場合にのみ使用できます。

  • GDC 上の VM ランタイムを有効にすると、4 つの事前定義 ClusterRole が自動的に作成されます。
  • GDC 上の VM ランタイムを無効にすると、この 4 つの事前定義 ClusterRole は削除されます。

次の表に、これらのクラスタロールと各ロールに関連する権限を示します。

クラスタロール 説明 アクセス動詞
kubevm.admin すべての Google Kubernetes Engine(GKE)Enterprise エディション リソースに対する完全アクセス権を付与します。
  • get
  • list
  • watch
  • delete
  • create
  • update
  • patch
  • deletecollection
kubevm.edit すべての Google Kubernetes Engine(GKE)Enterprise エディション リソースに対する読み取り / 書き込みアクセス権を付与します。
  • get
  • list
  • watch
  • delete
  • create
  • update
  • patch
kubevm.view すべての Google Kubernetes Engine(GKE)Enterprise エディション リソースに対する読み取りアクセス権を付与します。
  • get
  • list
  • watch
kubevm.cluster.view クラスタレベルのリソースに対する読み取りアクセス権を付与します。このクラスタロールが必要となるのは、編集 / 閲覧のロールが Namespace にバインドされた状態でクラスタレベルのリソースへのアクセス権が必要となる場合です。
  • get
  • list
  • watch

集約された ClusterRole

kubevm.adminkubevm.viewkubevm.edit の ClusterRole は、直接は使用できません。これらの 3 つのロールは、Kubernetes のデフォルトである adminviewedit の ClusterRole にそれぞれ集約されます。この集約により、Kubernetes のデフォルト ロールが拡張され、Google Kubernetes Engine(GKE)Enterprise エディションのリソースの管理に使用できるようになります。集約された ClusterRole により、Kubernetes のデフォルト ロールを使用した Google Kubernetes Engine(GKE)Enterprise エディション リソースへのアクセス権の管理や、事前定義 ClusterRole に基づいた独自のロールの作成が可能です。

集約ラベルの例

kubevm.edit ClusterRole には、このロールを Kubernetes edit ClusterRole に集約する rbac.authorization.k8s.io/aggregate-to-edit: "true" ラベルがあります。kubevm.edit ClusterRole の権限は、Kubernetes のデフォルトの edit ロールに付与されます。kubevm.admin ClusterRole と kubevm.view ClusterRole は、同様に aggregate-to-admin アノテーションまたは aggregate-to-view アノテーションに集約されます。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
    name: kubevm.edit
    labels:
      kubevm: kubevm.edit
      rbac.authorization.k8s.io/aggregate-to-edit: "true"
...

一般的なユーザー シナリオ

以下のセクションでは、RoleBinding と ClusterRoleBinding を使用して、事前定義 ClusterRole で指定した権限をユーザーまたはユーザーのグループに付与する方法について説明します。

クラスタ管理者

ユーザーまたはユーザーのグループに管理者権限を付与するには、Kubernetes のデフォルト admin ClusterRole を使用して ClusterRoleBinding を作成します。

ClusterRoleBinding の例

次の admin-charlie という ClusterRoleBinding の例では、charlie というユーザーに管理者権限を付与します。この ClusterRoleBinding は Kubernetes のデフォルト admin ClusterRole の権限を使用します。これには、事前定義 kubevm.admin ClusterRole の権限が集約を通じて含まれています。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-charlie
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: admin
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: charlie

クラスタ閲覧者

ユーザーまたはユーザーのグループに閲覧者権限を付与するには、Kubernetes のデフォルト view ClusterRole を使用して ClusterRoleBinding を作成します。同様の ClusterRoleBinding の例については、ClusterRoleBinding の例をご覧ください。

クラスタ編集者

ユーザーまたはユーザーのグループに編集者権限を付与するには、Kubernetes のデフォルト edit ClusterRole を使用して ClusterRoleBinding を作成します。同様の ClusterRoleBinding の例については、ClusterRoleBinding の例をご覧ください。

Namespace が指定された編集者

Namespace が指定された編集者権限をユーザーまたはユーザーのグループに付与するには、次のように、個別のバインディングを 2 つ作成する必要があります。

  • Namespace に RoleBinding を作成し、Kubernetes のデフォルト edit ClusterRole を参照します。

  • 事前定義 kubevm.cluster.view ClusterRole を参照する ClusterRoleBinding を作成します。virtualmachinetypesstorageclasses などの一部のリソースは Namespace が指定されていないため、この ClusterRoleBinding が必要になります。

ロール バインディングの例(Namespace が指定された編集者)

次の RoleBinding と ClusterRoleBinding の例では、default Namespace 内のリソースに対する編集者権限をユーザー charlie に付与します。

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: edit-charlie
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: edit
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: charlie
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubevm-cluster-view-charlie
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kubevm.cluster.view
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: charlie

Namespace が指定された閲覧者

Namespace が指定された閲覧者の権限をユーザーまたはユーザーのグループに付与するには、次のように、個別のバインディングを 2 つを作成する必要があります。

  • Namespace に RoleBinding を作成し、Kubernetes のデフォルト view ClusterRole を参照します。

  • 事前定義 kubevm.cluster.view ClusterRole を参照する ClusterRoleBinding を作成します。

同様の RoleBinding と ClusterRoleBinding の例については、ロール バインディングの例(Namespace が指定された編集者)をご覧ください。

GDC 上の VM ランタイムで使用されるリソース

次のセクションでは、GDC 上の VM ランタイムで使用されるリソースの表を示します。このセクションは情報提供のみを目的としています。前のセクションで説明した一般的なユーザー シナリオで事前定義ロールを使用する場合は、この情報は不要です。

ただし、事前定義ロールを使用しない場合は、このリソース情報を利用して独自のカスタムロールを作成できます。

Google Kubernetes Engine(GKE)Enterprise エディション定義のリソース

事前定義 ClusterRole では、Google Kubernetes Engine(GKE)Enterprise エディション定義のリソースへのアクセスに重点を置いています。次の表に、Google Kubernetes Engine(GKE)Enterprise エディションのリソースと、各事前定義 ClusterRole によって付与されるアクセス権を示します。

リソース 生成済み クラスタレベル kubevm.admin kubevm.view kubevm.edit kubevm.cluster.view
virtualmachineaccessrequests フル 読み取り 読み取りと書き込み
virtualmachinedisks フル 読み取り 読み取りと書き込み
virtualmachines フル 読み取り 読み取りと書き込み
gpuallocations フル 読み取り 読み取りと書き込み
guestenvironmentdata フル 読み取り 読み取りと書き込み
vmruntimes フル 読み取り 読み取りと書き込み 読み取り
virtualmachinetypes フル 読み取り 読み取りと書き込み 読み取り
vmhighavailabilitypolicies フル 読み取り 読み取りと書き込み 読み取り
networkinterfaces フル 読み取り 読み取りと書き込み
networks フル 読み取り 読み取りと書き込み 読み取り

KubeVirt リソース

GDC 上の VM ランタイムは、KubeVirt オープンソース プロジェクトに基づいています。デフォルトでは、KubeVirt リソースに対する権限は、Google Kubernetes Engine(GKE)Enterprise エディションのマネージド リソースと同様に、Kubernetes のデフォルト ロールに自動的に集約されます。次の表のリソース情報は、独自のカスタムロールの作成に使用できます。

リソース 生成済み クラスタレベル
virtualmachineinstances/console
virtualmachineinstances/vnc
virtualmachineinstances/portforward
virtualmachineinstances/start
virtualmachineinstances/stop
virtualmachineinstances/restart
virtualmachines
virtualmachineinstances
datavolumes
storageprofiles
cdiconfigs

Kubernetes のリソース

GDC 上の VM ランタイムと VM を使用する際には、Kubernetes の次のリソースへのアクセス管理が必要となる場合があります。次の表のリソース情報は、独自のカスタムロールの作成に使用できます。

リソース 生成済み クラスタレベル
pods
services
persistentvolumeclaims
secrets
nodes
storageclasses
configmaps

ClusterRole YAML の例

ClusterRole の YAML は、次の kubectl コマンドを使用して取得できます。

kubectl get ClusterRole CLUSTERROLE_NAME -o yaml --kubeconfig KUBECONFIG_PATH

次のように置き換えます。

  • CLUSTERROLE_NAME: ClusterRole の名前(kubevm.cluster.view など)。
  • KUBECONFIG_PATH: クラスタの kubeconfig ファイルへのパス。

4 つの事前定義 ClusterRole について、それぞれコマンド出力の例を次に示します。

  • kubevm.admin

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      creationTimestamp: "2022-10-11T21:10:31Z"
      labels:
        kubevm: kubevm.admin
        rbac.authorization.k8s.io/aggregate-to-admin: "true"
      name: kubevm.admin
      resourceVersion: "16654950"
      uid: 3296c279-6e85-4ea6-b250-548bf0c3e935
    rules:
    - apiGroups:
      - vm.cluster.gke.io
      resources:
      - virtualmachineaccessrequests
      - virtualmachinedisks
      - virtualmachines
      - gpuallocations
      - guestenvironmentdata
      - vmruntimes
      - virtualmachinetypes
      - vmhighavailabilitypolicies
      verbs:
      - get
      - delete
      - create
      - update
      - patch
      - list
      - watch
      - deletecollection
    - apiGroups:
      - networking.gke.io
      resources:
      - networkinterfaces
      - networks
      verbs:
      - get
      - delete
      - create
      - update
      - patch
      - list
      - watch
      - deletecollection
    
  • kubevm.edit

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      creationTimestamp: "2022-10-11T21:10:31Z"
      labels:
        kubevm: kubevm.edit
        rbac.authorization.k8s.io/aggregate-to-edit: "true"
      name: kubevm.edit
      resourceVersion: "16654951"
      uid: 237bf9ae-b2c8-4303-94dc-e6425a2df331
    rules:
    - apiGroups:
      - vm.cluster.gke.io
      resources:
      - virtualmachineaccessrequests
      - virtualmachinedisks
      - virtualmachines
      - gpuallocations
      - guestenvironmentdata
      - vmruntimes
      - virtualmachinetypes
      - vmhighavailabilitypolicies
      verbs:
      - get
      - delete
      - create
      - update
      - patch
      - list
      - watch
    - apiGroups:
      - networking.gke.io
      resources:
      - networkinterfaces
      - networks
      verbs:
      - get
      - delete
      - create
      - update
      - patch
      - list
      - watch
    
  • kubevm.view

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      creationTimestamp: "2022-10-11T21:10:31Z"
      labels:
        kubevm: kubevm.view
        rbac.authorization.k8s.io/aggregate-to-view: "true"
      name: kubevm.view
      resourceVersion: "16654953"
      uid: b5b54e2d-0097-4698-abbd-aeac212d0a34
    rules:
    - apiGroups:
      - vm.cluster.gke.io
      resources:
      - virtualmachineaccessrequests
      - virtualmachinedisks
      - virtualmachines
      - gpuallocations
      - guestenvironmentdata
      - vmruntimes
      - virtualmachinetypes
      - vmhighavailabilitypolicies
      verbs:
      - get
      - list
      - watch
    - apiGroups:
      - networking.gke.io
      resources:
      - networkinterfaces
      - networks
      verbs:
      - get
      - list
      - watch
    
  • kubevm.cluster.view

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      creationTimestamp: "2022-10-11T21:10:31Z"
      labels:
        kubevm: kubevm.cluster.view
      name: kubevm.cluster.view
      resourceVersion: "16654956"
      uid: b25dde64-67da-488b-81d2-1a08f9a4a7c1
    rules:
    - apiGroups:
      - vm.cluster.gke.io
      resources:
      - vmruntimes
      - virtualmachinetypes
      - vmhighavailabilitypolicies
      verbs:
      - get
      - list
      - watch
    - apiGroups:
      - networking.gke.io
      resources:
      - networks
      verbs:
      - get
      - list
      - watch