Google Distributed Cloud 上の VM ランタイムは、VM に関連する幅広いリソースを管理します。これらのリソースには、GKE Enterprise 定義のリソース、KubeVirt 定義リソース、Kubernetes リソースが含まれます。Google Distributed Cloud 上の VM ランタイムは、ロールベースのアクセス制御(RBAC)を使用して、マネージド リソースに対する権限を設定および適用します。これらのリソースを使用して VM を管理するために、事前構成済みの 4 つの ClusterRole が用意されています。
kubevm.admin
kubevm.edit
kubevm.view
kubevm.cluster.view
これらの組み込みロールは、Google Distributed Cloud 上の VM ランタイムに関連するカスタム リソースに対して一般化されたアクセスモデルを提供します。各ロールには、リソースを操作するための事前設定済みの権限があります。このドキュメントでは、Google Distributed Cloud 上の VM ランタイムが管理し、クラスタ管理者が独自のアクセスモデルをカスタマイズできるようにする方法について説明します。
事前定義された ClusterRole
このセクションでは、事前に定義された各 ClusterRole について説明します。これらの ClusterRole は、Google Distributed Cloud 上の VM ランタイムが有効な場合にのみ使用できます。
- Google Distributed Cloud で VM ランタイムを有効にすると、事前定義された 4 つの ClusterRole が自動的に作成されます。
- Google Distributed Cloud 上の VM ランタイムを無効にすると、事前定義された 4 つの ClusterRole が削除されます。
次の表に、クラスタロールとそれに関連する権限を示します。
クラスタロール | 説明 | アクセス動詞 |
---|---|---|
kubevm.admin |
すべての GKE Enterprise リソースに対する完全アクセス権を付与します。 |
|
kubevm.edit |
すべての GKE Enterprise リソースに対する読み取り/書き込みアクセス権を付与します。 |
|
kubevm.view |
すべての GKE Enterprise リソースに対する読み取りアクセス権を付与します。 |
|
kubevm.cluster.view |
クラスタレベルのリソースに対する読み取りアクセス権を付与します。このクラスタロールは、編集/ビューのロールが名前空間にバインドされていて、クラスタ全体のリソースへのアクセスが必要な場合に必要です。 |
|
集約された ClusterRole
kubevm.admin
、kubevm.view
、kubevm.edit
の ClusterRole は直接使用できません。代わりに、これらの 3 つのロールは、それぞれ Kubernetes のデフォルトである admin
、view
、edit
の ClusterRole に集約されます。この集計により、デフォルトの Kubernetes ロールが拡張され、GKE Enterprise リソースの管理に使用できるようになります。集計された ClusterRole を使用すると、Kubernetes のデフォルト ロールを使用して、GKE Enterprise リソースへのアクセスを管理できます。または、事前定義された ClusterRole に基づいて独自のロールを作成することもできます。
集約ラベルの例
kubevm.edit
ClusterRole には、それを Kubernetes edit
ClusterRole に集約する rbac.authorization.k8s.io/aggregate-to-edit: "true"
ラベルがあります。kubevm.edit
ClusterRole の権限は、Kubernetes のデフォルトの edit
ロールに付与されます。kubevm.admin
と 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 の例をご覧ください。
名前空間が指定された編集者
名前空間が指定された編集者権限をユーザーまたはユーザーセットに付与するには、2 つの別個のバインディングを作成する必要があります。
名前空間に RoleBinding を作成し、デフォルトの Kubernetes
edit
ClusterRole を参照します。事前定義済みの
kubevm.cluster.view
ClusterRole を参照する ClusterRoleBinding を作成します。virtualmachinetypes
やstorageclasses
などの一部のリソースが名前空間ではないため、この ClusterRoleBinding が必要になります。
ロール バインディングの例(名前空間編集者)
次の RoleBinding と ClusterRoleBinding の例は、default
名前空間内のリソースに対する 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 閲覧者
名前空間に属する閲覧者権限を 1 人のユーザーまたは複数のユーザーに付与するには、2 つの別個のバインディングを作成する必要があります。
名前空間に RoleBinding を作成し、デフォルトの Kubernetes
view
ClusterRole を参照します。事前定義済みの
kubevm.cluster.view
ClusterRole を参照する ClusterRoleBinding を作成します。
同様の RoleBinding と ClusterRoleBinding の例については、ロール バインディングの例(名前空間編集者)をご覧ください。
Google Distributed Cloud 上の VM ランタイムで使用されるリソース
以下のセクションでは、Google Distributed Cloud 上の VM ランタイムで使用されるリソースの表を示します。以下のセクションは情報提供のみを目的としています。前のセクションで説明した一般的なユーザー シナリオで事前定義ロールを使用する場合は、特にこの情報を使用する必要はありません。
ただし、事前定義済みロールを使用しない場合は、このリソース情報を使用して独自のカスタムロールを作成できます。
GKE Enterprise 定義リソース
事前定義された ClusterRole は、GKE Enterprise 定義のリソースへのアクセスに重点を置いています。次の表に、GKE Enterprise リソースと、事前定義された各 ClusterRole によって付与されるアクセス権を示します。
リソース | 生成済み | クラスタレベル | kubevm.admin |
kubevm.view |
kubevm.edit |
kubevm.cluster.view |
---|---|---|---|---|---|---|
virtualmachineaccessrequests |
– | – | フル | Read | 読み取りと書き込み | – |
virtualmachinedisks |
– | – | フル | Read | 読み取りと書き込み | – |
virtualmachines |
– | – | フル | Read | 読み取りと書き込み | – |
gpuallocations |
– | – | フル | Read | 読み取りと書き込み | – |
guestenvironmentdata |
あり | – | フル | Read | 読み取りと書き込み | – |
vmruntimes |
– | あり | フル | Read | 読み取りと書き込み | Read |
virtualmachinetypes |
– | あり | フル | Read | 読み取りと書き込み | Read |
vmhighavailabilitypolicies |
– | あり | フル | Read | 読み取りと書き込み | Read |
networkinterfaces |
あり | – | フル | Read | 読み取りと書き込み | – |
networks |
– | あり | フル | Read | 読み取りと書き込み | Read |
KubeVirt リソース
Google Distributed Cloud 上の VM ランタイムは、KubeVirt オープンソース プロジェクトに基づいています。デフォルトでは、KubeVirt リソースの権限は、GKE Enterprise マネージド リソースと同様に、デフォルトの Kubernetes ロールに自動的に集約されます。次の表のリソース情報は、独自のカスタムロールを作成するときに使用してください。
リソース | 生成済み | クラスタレベル |
---|---|---|
virtualmachineinstances /console |
– | – |
virtualmachineinstances /vnc |
– | – |
virtualmachineinstances /portforward |
– | – |
virtualmachineinstances /start |
– | – |
virtualmachineinstances /stop |
– | – |
virtualmachineinstances /restart |
– | – |
virtualmachines |
あり | – |
virtualmachineinstances |
あり | – |
datavolumes |
– | – |
storageprofiles |
– | あり |
cdiconfigs |
– | あり |
Kubernetes のリソース
Google Distributed Cloud と 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