Controllo dell'accesso basato su ruoli (RBAC) per il runtime VM su GDC

Il runtime VM su GDC gestisce un'ampia gamma di risorse relative alle tue VM. Queste risorse includono le risorse definite dalla versione Google Kubernetes Engine (GKE) Enterprise, le risorse definite da KubeVirt e le risorse Kubernetes. Il runtime VM su GDC utilizza il controllo controllo dell'accesso basato sui ruoli (RBAC) per impostare e applicare le autorizzazioni per le risorse gestite. Per aiutarti a utilizzare queste risorse e a gestire le tue VM, abbiamo fornito quattro ClusterRole preconfigurati:

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

Questi ruoli integrati forniscono un modello di accesso generalizzato alle risorse personalizzate relative al runtime VM su GDC. Ogni ruolo dispone di autorizzazioni prestabilite per operare sulle risorse. Questo documento fornisce informazioni sulle risorse gestite da VM Runtime on GDC in modo che gli amministratori dei cluster possano personalizzare il proprio modello di accesso.

ClusterRole predefiniti

Questa sezione descrive ciascuno dei ClusterRole predefiniti. Questi ClusterRole sono disponibili solo quando è abilitato il runtime VM su GDC:

  • Quando il runtime VM su GDC è abilitato, i quattro ClusterRole predefiniti vengono creati automaticamente.
  • Quando il runtime VM su GDC è disabilitato, i quattro ClusterRole predefiniti vengono eliminati.

Nella tabella seguente sono elencati i ruoli del cluster e le relative autorizzazioni:

Ruolo cluster Descrizione Accedi ai verbi
kubevm.admin Concede l'accesso completo a tutte le risorse dell'edizione Google Kubernetes Engine (GKE) Enterprise.
  • get
  • list
  • watch
  • delete
  • create
  • update
  • patch
  • deletecollection
kubevm.edit Concede l'accesso in lettura/scrittura a tutte le risorse dell'edizione Google Kubernetes Engine (GKE) Enterprise.
  • get
  • list
  • watch
  • delete
  • create
  • update
  • patch
kubevm.view Concede l'accesso in lettura a tutte le risorse dell'edizione Google Kubernetes Engine (GKE) Enterprise.
  • get
  • list
  • watch
kubevm.cluster.view Concede l'accesso in lettura alle risorse a livello di cluster. Questo ruolo nel cluster è necessario quando il ruolo di modifica/visualizzazione è associato a uno spazio dei nomi, mentre è necessario l'accesso alle risorse a livello di cluster.
  • get
  • list
  • watch

ClusterRole aggregati

I ClusterRole kubevm.admin, kubevm.view e kubevm.edit non vengono utilizzati direttamente. Questi tre ruoli vengono invece aggregati ai valori predefiniti di Kubernetes admin, view e edit ClusterRole. Questa aggregazione estende i ruoli Kubernetes predefiniti in modo che possano essere utilizzati per gestire le risorse della versione Google Kubernetes Engine (GKE) Enterprise. Con i ClusterRoles aggregati, puoi utilizzare i ruoli predefiniti di Kubernetes per gestire l'accesso alle risorse della versione Google Kubernetes Engine (GKE) Enterprise o creare ruoli personalizzati in base ai ClusterRole predefiniti.

Esempio di etichetta di aggregazione

Il ClusterRole kubevm.edit ha l'etichetta rbac.authorization.k8s.io/aggregate-to-edit: "true", che la aggrega nel ClusterRole edit di Kubernetes. Le autorizzazioni in ClusterRole kubevm.edit vengono concesse al ruolo edit predefinito di Kubernetes. I ClusterRoles kubevm.admin e kubevm.view vengono aggregati in modo simile con le annotazioni aggregate-to-admin o 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"
...

Scenari utente tipici

Le seguenti sezioni descrivono come utilizzare RoleBinding e ClusterRoleBinding per concedere le autorizzazioni specificate nei ClusterRoles predefiniti a un utente o a un insieme di utenti.

Amministratore del cluster

Per concedere le autorizzazioni di amministrazione a un utente o a un insieme di utenti, crea un ClusterRoleBinding con il ClusterRole predefinito admin di Kubernetes.

Esempio di ClusterRoleBinding

Il seguente admin-charlie esempio di ClusterRoleBinding concede all'utente charlie le autorizzazioni di amministrazione. ClusterRoleBinding utilizza le autorizzazioni del ClusterRole admin predefinito di Kubernetes, che include le autorizzazioni del ClusterRole predefinito kubevm.admin tramite l'aggregazione.

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

Visualizzatore cluster

Per concedere le autorizzazioni di visualizzazione a un utente o a un insieme di utenti, crea un ClusterRoleBinding con il ClusterRole predefinito view di Kubernetes. Consulta Esempio di ClusterRoleBinding per un esempio simile di ClusterRoleBinding.

Editor cluster

Per concedere le autorizzazioni di editor a un utente o a un insieme di utenti, crea un ClusterRoleBinding con il ClusterRole predefinito edit di Kubernetes. Consulta Esempio di ClusterRoleBinding per un esempio simile di ClusterRoleBinding.

Editor del ritmo dei nomi

Per concedere le autorizzazioni di editor con spazio dei nomi a un utente o a un insieme di utenti, devi creare due associazioni separate:

  • Crea un RoleBinding nello spazio dei nomi e fai riferimento al ClusterRole edit predefinito di Kubernetes.

  • Crea un ClusterRoleBinding che fa riferimento al ClusterRole kubevm.cluster.view predefinito. Questo ClusterRoleBinding è necessario perché alcune risorse, come virtualmachinetypes e storageclasses, non presentano spazi dei nomi.

Esempi di associazione dei ruoli (editor con spazio dei nomi)

I seguenti esempi di RoleBinding e ClusterRoleBinding concedono all'utente charlie le autorizzazioni di editor per le risorse nello spazio dei nomi 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

Spettatore con pacing dei nomi

Per concedere autorizzazioni di visualizzatore con spazio dei nomi a un utente o a un insieme di utenti, devi creare due associazioni separate:

  • Crea un RoleBinding nello spazio dei nomi e fai riferimento al ClusterRole view predefinito di Kubernetes.

  • Crea un ClusterRoleBinding che fa riferimento al ClusterRole kubevm.cluster.view predefinito.

Consulta Esempi di associazione dei ruoli (editor con spazio dei nomi) per esempi di RoleBinding e ClusterRoleBinding simili.

Risorse utilizzate dal runtime VM su GDC

Le seguenti sezioni contengono le tabelle di risorse utilizzate dal runtime VM su GDC. Queste sezioni sono solo a scopo informativo. Se prevedi di utilizzare i ruoli predefiniti negli scenari utente tipici descritti nelle sezioni precedenti, queste informazioni non possono essere utilizzate in modo specifico.

Se, tuttavia, non vuoi utilizzare i ruoli predefiniti, puoi utilizzare queste informazioni sulle risorse per creare ruoli personalizzati.

Risorse definite per la versione Google Kubernetes Engine (GKE) Enterprise

I ClusterRole predefiniti sono incentrati sull'accesso alle risorse definite dalla versione Google Kubernetes Engine (GKE) Enterprise. La seguente tabella elenca le risorse della versione Google Kubernetes Engine (GKE) Enterprise e le autorizzazioni di accesso concesse da ciascuno dei ClusterRoles predefiniti.

Risorsa Generato A livello di cluster kubevm.admin kubevm.view kubevm.edit kubevm.cluster.view
virtualmachineaccessrequests Completa Lettura Lettura/scrittura
virtualmachinedisks Completa Lettura Lettura/scrittura
virtualmachines Completa Lettura Lettura/scrittura
gpuallocations Completa Lettura Lettura/scrittura
guestenvironmentdata Completa Lettura Lettura/scrittura
vmruntimes Completa Lettura Lettura/scrittura Lettura
virtualmachinetypes Completa Lettura Lettura/scrittura Lettura
vmhighavailabilitypolicies Completa Lettura Lettura/scrittura Lettura
networkinterfaces Completa Lettura Lettura/scrittura
networks Completa Lettura Lettura/scrittura Lettura

Risorse di KubeVirt

Il runtime VM su GDC si basa sul progetto open source KubeVirt. Per impostazione predefinita, le autorizzazioni per le risorse KubeVirt vengono aggregate automaticamente nei ruoli Kubernetes predefiniti, in modo simile alle risorse gestite dalla versione Google Kubernetes Engine (GKE) Enterprise. Utilizza le informazioni sulle risorse nella seguente tabella se vuoi creare ruoli personalizzati:

Risorsa Generato A livello di cluster
virtualmachineinstances/console
virtualmachineinstances/vnc
virtualmachineinstances/portforward
virtualmachineinstances/inizio
virtualmachineinstances/scalo
virtualmachineinstances/riavvio
virtualmachines
virtualmachineinstances
datavolumes
storageprofiles
cdiconfigs

Risorse Kubernetes

Quando utilizzi il runtime VM su GDC e sulle VM, potrebbe essere necessario gestire l'accesso alle seguenti risorse Kubernetes. Utilizza le informazioni sulle risorse nella tabella seguente se vuoi creare ruoli personalizzati:

Risorsa Generato A livello di cluster
pods
services
persistentvolumeclaims
secrets
nodes
storageclasses
configmaps

Esempi YAML ClusterRole

Puoi recuperare YAML per i ClusterRoles con il seguente comando kubectl:

kubectl get ClusterRole CLUSTERROLE_NAME -o yaml --kubeconfig KUBECONFIG_PATH

Sostituisci quanto segue:

  • CLUSTERROLE_NAME: il nome del ClusterRole, ad esempio kubevm.cluster.view.
  • KUBECONFIG_PATH: il percorso del file kubeconfig per il cluster.

Ecco alcuni esempi dell'output comando per ciascuno dei quattro ClusterRoles predefiniti:

  • 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