Control de acceso basado en roles (RBAC) para el entorno de ejecución de máquinas virtuales en GDC

El entorno de ejecución de máquinas virtuales de GDC gestiona una amplia gama de recursos relacionados con tus máquinas virtuales. Estos recursos incluyen recursos definidos por GKE, recursos definidos por KubeVirt y recursos de Kubernetes. VM Runtime en GDC usa el control de acceso basado en roles (RBAC) para definir y aplicar permisos a los recursos gestionados. Para ayudarte a trabajar con estos recursos y gestionar tus VMs, hemos proporcionado cuatro ClusterRoles preconfigurados:

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

Estos roles integrados proporcionan un modelo de acceso generalizado a los recursos personalizados relacionados con el entorno de ejecución de máquinas virtuales en GDC. Cada rol tiene permisos predefinidos para operar en los recursos. En este documento se proporciona información sobre los recursos que gestiona VM Runtime en GDC para que los administradores de clústeres puedan personalizar su propio modelo de acceso.

ClusterRoles predefinidos

En esta sección se describe cada uno de los ClusterRoles predefinidos. Estos ClusterRoles solo están disponibles cuando se habilita el tiempo de ejecución de VM en GDC:

  • Cuando se habilita VM Runtime en GDC, se crean automáticamente los cuatro ClusterRoles predefinidos.
  • Cuando se inhabilita el tiempo de ejecución de VM en GDC, se eliminan los cuatro ClusterRoles predefinidos.

En la siguiente tabla se enumeran los roles de clúster y sus permisos relacionados:

Rol de clúster Descripción Verbos de acceso
kubevm.admin Concede acceso completo a todos los recursos de GKE.
  • get
  • list
  • watch
  • delete
  • create
  • update
  • patch
  • deletecollection
kubevm.edit Concede acceso de lectura y escritura a todos los recursos de GKE.
  • get
  • list
  • watch
  • delete
  • create
  • update
  • patch
kubevm.view Concede acceso de lectura a todos los recursos de GKE.
  • get
  • list
  • watch
kubevm.cluster.view Concede acceso de lectura a los recursos de todo el clúster. Este rol de clúster es necesario cuando el rol de edición o de visualización se vincula a un espacio de nombres y se necesita acceso a los recursos de todo el clúster.
  • get
  • list
  • watch

Aggregated ClusterRoles

Los ClusterRoles kubevm.admin, kubevm.view y kubevm.edit no se usan directamente. En su lugar, estos tres roles se agregan a los ClusterRoles admin, view y edit predeterminados de Kubernetes, respectivamente. Esta agregación amplía los roles predeterminados de Kubernetes para que se puedan usar para gestionar recursos de GKE. Con los ClusterRoles agregados, puedes usar los roles predeterminados de Kubernetes para gestionar el acceso a los recursos de GKE o crear tus propios roles basados en los ClusterRoles predefinidos.

Etiqueta de agregación de ejemplo

El ClusterRole kubevm.edit tiene la etiqueta rbac.authorization.k8s.io/aggregate-to-edit: "true", que lo agrega al ClusterRole edit de Kubernetes. Los permisos del kubevm.edit ClusterRole se conceden al rol edit predeterminado de Kubernetes. Los ClusterRoles kubevm.admin y kubevm.view se agregan de forma similar con las anotaciones 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"
...

Situaciones de usuario habituales

En las siguientes secciones se describe cómo usar RoleBinding y ClusterRoleBinding para conceder los permisos especificados en los ClusterRoles predefinidos a un usuario o a un conjunto de usuarios.

Administrador de clústeres

Para conceder permisos de administrador a un usuario o a un conjunto de usuarios, crea un ClusterRoleBinding con el admin ClusterRole predeterminado de Kubernetes.

Ejemplo de ClusterRoleBinding

El siguiente admin-charlieejemplo de ClusterRoleBinding otorga al usuario charlie permisos de administrador. ClusterRoleBinding usa los permisos del ClusterRole admin predeterminado de Kubernetes, que incluye los permisos del ClusterRole kubevm.admin predefinido mediante la agregación.

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

Visualizador de clústeres

Para conceder permisos de lectura a un usuario o a un conjunto de usuarios, crea un ClusterRoleBinding con el view ClusterRole predeterminado de Kubernetes. Consulta el ejemplo de ClusterRoleBinding para ver un ejemplo similar.

Editor de clústeres

Para conceder permisos de editor a un usuario o a un conjunto de usuarios, crea un ClusterRoleBinding con el edit ClusterRole predeterminado de Kubernetes. Consulta el ejemplo de ClusterRoleBinding para ver un ejemplo similar.

Editor con espacio de nombres

Para conceder permisos de editor con espacio de nombres a un usuario o a un conjunto de usuarios, debe crear dos enlaces independientes:

  • Crea un RoleBinding en el espacio de nombres y haz referencia al ClusterRole de Kubernetes predeterminado.edit

  • Crea un ClusterRoleBinding que haga referencia al ClusterRole kubevm.cluster.viewpredefinido. Este ClusterRoleBinding es necesario porque algunos recursos, como virtualmachinetypes y storageclasses, no tienen un espacio de nombres.

Ejemplos de vinculación de roles (editor con espacio de nombres)

En los siguientes ejemplos de RoleBinding y ClusterRoleBinding se otorgan permisos de charlieeditordefault al usuario para los recursos del espacio de nombres 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

Lector de elementos con espacio de nombres

Para conceder permisos de lector con espacio de nombres a un usuario o a un conjunto de usuarios, debe crear dos enlaces independientes:

  • Crea un RoleBinding en el espacio de nombres y haz referencia al ClusterRole de Kubernetes predeterminado.view

  • Crea un ClusterRoleBinding que haga referencia al ClusterRole kubevm.cluster.viewpredefinido.

Consulta Ejemplos de vinculación de roles (editor con espacio de nombres) para ver ejemplos similares de RoleBinding y ClusterRoleBinding.

Recursos que usa el tiempo de ejecución de máquinas virtuales en GDC

En las siguientes secciones se incluyen tablas de recursos utilizados por VM Runtime en GDC. Estas secciones tienen únicamente fines informativos. Si tiene previsto usar roles predefinidos en los casos de uso típicos descritos en las secciones anteriores, no es necesario que tenga en cuenta esta información.

Sin embargo, si no quieres usar los roles predefinidos, puedes usar esta información para crear tus propios roles personalizados.

Recursos definidos por Google Kubernetes Engine

Los ClusterRoles predefinidos se centran en el acceso a recursos definidos por GKE. En la siguiente tabla se enumeran los recursos de GKE y los permisos de acceso que concede cada uno de los ClusterRoles predefinidos.

Recurso Generada Por clúster kubevm.admin kubevm.view kubevm.edit kubevm.cluster.view
virtualmachineaccessrequests Completo Leer Lectura y escritura
virtualmachinedisks Completo Leer Lectura y escritura
virtualmachines Completo Leer Lectura y escritura
gpuallocations Completo Leer Lectura y escritura
guestenvironmentdata Completo Leer Lectura y escritura
vmruntimes Completo Leer Lectura y escritura Leer
virtualmachinetypes Completo Leer Lectura y escritura Leer
vmhighavailabilitypolicies Completo Leer Lectura y escritura Leer
networkinterfaces Completo Leer Lectura y escritura
networks Completo Leer Lectura y escritura Leer

Recursos de KubeVirt

El entorno de ejecución de máquinas virtuales de GDC se basa en el proyecto de software libre KubeVirt. De forma predeterminada, los permisos de los recursos de KubeVirt se agregan automáticamente a los roles predeterminados de Kubernetes, de forma similar a los recursos gestionados por GKE. Usa la información de los recursos de la siguiente tabla si quieres crear tus propios roles personalizados:

Recurso Generada Por clúster
virtualmachineinstances/console
virtualmachineinstances/vnc
virtualmachineinstances/portforward
virtualmachineinstances/start
virtualmachineinstances/parada
virtualmachineinstances/reiniciar
virtualmachines
virtualmachineinstances
datavolumes
storageprofiles
cdiconfigs

Recursos de Kubernetes

Cuando trabajes con VM Runtime en GDC y máquinas virtuales, puede que tengas que gestionar el acceso a los siguientes recursos de Kubernetes. Utilice la información de recursos de la siguiente tabla si quiere crear sus propios roles personalizados:

Recurso Generada Por clúster
pods
services
persistentvolumeclaims
secrets
nodes
storageclasses
configmaps

Ejemplos de YAML de ClusterRole

Puedes obtener el YAML de los ClusterRoles con el siguiente comando kubectl:

kubectl get ClusterRole CLUSTERROLE_NAME -o yaml --kubeconfig KUBECONFIG_PATH

Haz los cambios siguientes:

  • CLUSTERROLE_NAME: el nombre del ClusterRole, como kubevm.cluster.view.
  • KUBECONFIG_PATH: la ruta al archivo kubeconfig del clúster.

A continuación, se muestran ejemplos del resultado del comando para cada uno de los cuatro ClusterRoles predefinidos:

  • 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