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 エディション リソースに対する完全アクセス権を付与します。 |
|
kubevm.edit |
すべての Google Kubernetes Engine(GKE)Enterprise エディション リソースに対する読み取り / 書き込みアクセス権を付与します。 |
|
kubevm.view |
すべての Google Kubernetes Engine(GKE)Enterprise エディション リソースに対する読み取りアクセス権を付与します。 |
|
kubevm.cluster.view |
クラスタレベルのリソースに対する読み取りアクセス権を付与します。このクラスタロールが必要となるのは、編集 / 閲覧のロールが Namespace にバインドされた状態でクラスタレベルのリソースへのアクセス権が必要となる場合です。 |
|
集約された ClusterRole
kubevm.admin
、kubevm.view
、kubevm.edit
の ClusterRole は、直接は使用できません。これらの 3 つのロールは、Kubernetes のデフォルトである admin
、view
、edit
の 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 を作成します。virtualmachinetypes
やstorageclasses
などの一部のリソースは 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