Rollenbasierte Zugriffssteuerung (RBAC) für die Anthos-VM-Laufzeit

Anthos VM Runtime verwaltet eine Vielzahl von Ressourcen im Zusammenhang mit Ihren VMs. Zu diesen Ressourcen gehören Anthos-, KubeVirt-definierte und Kubernetes-Ressourcen. Die Anthos-VM-Laufzeit verwendet die rollenbasierte Zugriffssteuerung (Role-based Access Control, RBAC), um Berechtigungen für verwaltete Ressourcen festzulegen und durchzusetzen. Wir haben vier vorkonfigurierte ClusterRoles bereitgestellt, um Ihnen die Arbeit mit diesen Ressourcen und die Verwaltung Ihrer VMs zu erleichtern:

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

Diese integrierten Rollen bieten ein allgemeines Zugriffsmodell für die benutzerdefinierten Ressourcen im Zusammenhang mit der Anthos-VM-Laufzeit. Jede Rolle hat vordefinierte Berechtigungen, um mit den Ressourcen zu arbeiten. Dieses Dokument enthält Informationen zu Ressourcen, die Anthos VM Runtime verwaltet, damit Clusteradministratoren ihr eigenes Zugriffsmodell anpassen können.

Vordefinierte ClusterRoles

In diesem Abschnitt werden alle vordefinierten ClusterRoles beschrieben. Diese ClusterRoles sind nur verfügbar, wenn die Anthos-VM-Laufzeit aktiviert ist:

  • Wenn die Anthos-VM-Laufzeit aktiviert ist, werden automatisch die vier vordefinierten ClusterRoles erstellt.
  • Wenn die Anthos-VM-Laufzeit deaktiviert ist, werden die vier vordefinierten ClusterRoles gelöscht.

In der folgenden Tabelle sind die Clusterrollen und die zugehörigen Berechtigungen aufgeführt:

Clusterrolle Beschreibung Verben aufrufen
kubevm.admin Gewährt vollständigen Zugriff auf alle Anthos-Ressourcen.
  • get
  • list
  • watch
  • delete
  • create
  • update
  • patch
  • deletecollection
kubevm.edit Gewährt Lese-/Schreibzugriff auf alle Anthos-Ressourcen.
  • get
  • list
  • watch
  • delete
  • create
  • update
  • patch
kubevm.view Gewährt Lesezugriff auf alle Anthos-Ressourcen.
  • get
  • list
  • watch
kubevm.cluster.view Gewährt Lesezugriff auf clusterbezogene Ressourcen. Diese Clusterrolle ist erforderlich, wenn die Bearbeitungs-/Ansichtsrolle an einen Namespace gebunden ist, während Zugriff auf clusterbezogene Ressourcen benötigt wird.
  • get
  • list
  • watch

Aggregierte ClusterRoles

Die ClusterRole-Objekte kubevm.admin, kubevm.view und kubevm.edit werden nicht direkt verwendet. Stattdessen werden diese drei Rollen mit den Kubernetes-Standard-Clusterrollen admin, view und edit zusammengefasst. Diese Aggregation erweitert die Kubernetes-Standardrollen, sodass sie zum Verwalten von Anthos-Ressourcen verwendet werden können. Mit aggregierten ClusterRoles können Sie Kubernetes-Standardrollen verwenden, um den Zugriff auf Anthos-Ressourcen zu verwalten, oder eigene Rollen anhand der vordefinierten ClusterRoles erstellen.

Beispiel für ein Aggregationslabel

Die ClusterRole kubevm.edit hat das Label rbac.authorization.k8s.io/aggregate-to-edit: "true", das sie für die Kubernetes-Clustercluster edit zusammenfasst. Die Berechtigungen in der ClusterRole kubevm.edit werden der Kubernetes-Standardrolle edit gewährt. Die ClusterRole-Objekte kubevm.admin und kubevm.view werden auf ähnliche Weise mit den Annotationen aggregate-to-admin oder aggregate-to-view zusammengefasst.

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

Typische Nutzerszenarien

In den folgenden Abschnitten wird beschrieben, wie Sie einem Nutzer oder einer Gruppe von Nutzern mit Rollen und Clustern die in den vordefinierten ClusterRole-Objekten angegebenen Berechtigungen gewähren.

Clusteradministrator

Wenn Sie einem Nutzer oder einer Gruppe von Nutzern Administratorberechtigungen erteilen möchten, erstellen Sie ClusterRole mit der Kubernetes-Standard-Clustercluster admin.

Beispiel für ClusterRole

Im folgenden admin-charlie-Beispielclustercluster erhält der Nutzer charlie-Administratorberechtigungen. ClusterRole verwendet Berechtigungen aus der standardmäßigen Kubernetes-ClusterRole admin, die Berechtigungen für die vordefinierte ClusterRole kubevm.admin durch Aggregation enthält.

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

Clusterbetrachter

Wenn Sie einem Nutzer oder einer Nutzergruppe Berechtigungen für den Betrachter gewähren möchten, müssen Sie ein ClusterRole-Objekt mit der Kubernetes-Standardclusterclusterrolle view erstellen. Ein ähnliches ClusterRole-Beispiel finden Sie unter ClusterRole-Beispiel.

Cluster editor

Wenn Sie einem Nutzer oder einer Nutzergruppe Bearbeitungsberechtigungen erteilen möchten, erstellen Sie ein ClusterRole-Objekt mit der Kubernetes-Standardclusterclusterrolle edit. Ein ähnliches ClusterRole-Beispiel finden Sie unter ClusterRole-Beispiel.

Namespace-Editor

Wenn Sie einem Nutzer oder einer Nutzergruppe Namespace-Bearbeiter-Berechtigungen gewähren möchten, müssen Sie zwei separate Bindungen erstellen:

  • Erstellen Sie ein KPI für den Namespace und verweisen Sie auf die standardmäßige Kubernetes-ClusterRole edit.

  • Erstellen Sie ein ClusterRole-Objekt, das auf die vordefinierte ClusterRole kubevm.cluster.view verweist. Dieses ClusterBlob ist erforderlich, da einige Ressourcen wie virtualmachinetypes und storageclasses keinen Namespace haben.

Beispiele für Rollenbindungen (Namespace-Editor)

Mit den folgenden Beispielen für Blob und ClusterBlob erhalten Nutzer die Berechtigung charlie Editor für Ressourcen im Namespace default:

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-Betrachter

Wenn Sie einem Nutzer oder einer Nutzergruppe Namespace-Betrachter-Berechtigungen gewähren möchten, müssen Sie zwei separate Bindungen erstellen:

  • Erstellen Sie ein KPI für den Namespace und verweisen Sie auf die standardmäßige Kubernetes-ClusterRole view.

  • Erstellen Sie ein ClusterRole-Objekt, das auf die vordefinierte ClusterRole kubevm.cluster.view verweist.

Unter Rollenbindungsbeispiele (Namespace-Editor) finden Sie weitere Beispiele für Blob und ClusterRole.

Von der Anthos-VM-Laufzeit verwendete Ressourcen

Die folgenden Abschnitte enthalten Ressourcentabellen, die von der Anthos-VM-Laufzeit verwendet werden. Diese Abschnitte dienen nur zu Informationszwecken. Wenn Sie vorhaben, vordefinierte Rollen in den typischen Nutzerszenarien zu verwenden, die in den vorherigen Abschnitten beschrieben wurden, wird diese Information nicht spezifisch verwendet.

Wenn Sie die vordefinierten Rollen jedoch nicht verwenden möchten, können Sie anhand dieser Ressourceninformationen Ihre eigenen benutzerdefinierten Rollen erstellen.

Von Anthos definierte Ressourcen

Der Schwerpunkt der vordefinierten ClusterRoles liegt auf dem Zugriff auf von Anthos definierte Ressourcen. In der folgenden Tabelle sind die Anthos-Ressourcen und die Zugriffsberechtigungen aufgeführt, die von den vordefinierten ClusterRole-Objekten erteilt werden.

Ressource Generiert Clusterbezogen kubevm.admin kubevm.view kubevm.edit kubevm.cluster.view
virtualmachineaccessrequests Vollständig Lesen Lesen/Schreiben
virtualmachinedisks Vollständig Lesen Lesen/Schreiben
virtualmachines Vollständig Lesen Lesen/Schreiben
gpuallocations Vollständig Lesen Lesen/Schreiben
guestenvironmentdata Ja Vollständig Lesen Lesen/Schreiben
vmruntimes Ja Vollständig Lesen Lesen/Schreiben Lesen
virtualmachinetypes Ja Vollständig Lesen Lesen/Schreiben Lesen
vmhighavailabilitypolicies Ja Vollständig Lesen Lesen/Schreiben Lesen
networkinterfaces Ja Vollständig Lesen Lesen/Schreiben
networks Ja Vollständig Lesen Lesen/Schreiben Lesen

KubeVirt-Ressourcen

Die Anthos-VM-Laufzeit basiert auf dem Open-Source-Projekt KubeVirt. Standardmäßig werden die Berechtigungen für die KubeVirt-Ressourcen automatisch in den Kubernetes-Standardrollen zusammengefasst, ähnlich wie bei den von Anthos verwalteten Ressourcen. Verwenden Sie die Ressourceninformationen in der folgenden Tabelle, wenn Sie eigene benutzerdefinierte Rollen erstellen möchten:

Ressource Generiert Clusterbezogen
virtualmachineinstances/Konsole
virtualmachineinstances/VNC
virtualmachineinstances/Portweiterleitung
virtualmachineinstances/Start
virtualmachineinstances/Stopp
virtualmachineinstances/Neustart
virtualmachines Ja
virtualmachineinstances Ja
datavolumes
storageprofiles Ja
cdiconfigs Ja

Kubernetes-Ressourcen

Wenn Sie mit Anthos-VM-Laufzeit und VMs arbeiten, müssen Sie möglicherweise den Zugriff auf die folgenden Kubernetes-Ressourcen verwalten. Verwenden Sie die Ressourceninformationen in der folgenden Tabelle, wenn Sie eigene benutzerdefinierte Rollen erstellen möchten:

Ressource Generiert Clusterbezogen
pods Ja
services
persistentvolumeclaims
secrets
nodes Ja
storageclasses Ja
configmaps

YAML-Beispiele für ClusterRole

Sie können YAML für die ClusterRoles mit dem folgenden kubectl-Befehl abrufen:

kubectl get ClusterRole CLUSTERROLE_NAME -o yaml --kubeconfig KUBECONFIG_PATH

Dabei gilt:

  • CLUSTERROLE_NAME: der Name der ClusterRole, z. B. kubevm.cluster.view.
  • KUBECONFIG_PATH: der Pfad zur kubeconfig-Datei für den Cluster.

Hier sind Beispiele für die Befehlsausgabe für jede der vier vordefinierten ClusterRoles:

  • 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