Controlo de acesso baseado em funções (CABF) para o VM Runtime no GDC

O tempo de execução de VMs no GDC gere uma vasta gama de recursos relacionados com as suas VMs. Estes recursos incluem recursos definidos pelo GKE, recursos definidos pelo KubeVirt e recursos do Kubernetes. O tempo de execução de VMs no GDC usa o controlo de acesso baseado em funções (RBAC) para definir e aplicar autorizações para recursos geridos. Para ajudar a trabalhar com estes recursos e gerir as suas VMs, disponibilizámos quatro ClusterRoles pré-configurados:

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

Estas funções integradas fornecem um modelo de acesso generalizado nos recursos personalizados relacionados com o VM Runtime no GDC. Cada função tem autorizações pré-estabelecidas para operar nos recursos. Este documento fornece informações sobre os recursos que o VM Runtime no GDC gere para que os administradores do cluster possam personalizar o respetivo modelo de acesso.

ClusterRoles predefinidos

Esta secção descreve cada um dos ClusterRoles predefinidos. Estes ClusterRoles só estão disponíveis quando o tempo de execução de VMs no GDC está ativado:

  • Quando o tempo de execução da VM no GDC está ativado, os quatro ClusterRoles predefinidos são criados automaticamente.
  • Quando o tempo de execução de VMs no GDC está desativado, os quatro ClusterRoles predefinidos são eliminados.

A tabela seguinte apresenta as funções de cluster e as respetivas autorizações relacionadas:

Função do cluster Descrição Verbos de acesso
kubevm.admin Concede acesso total a todos os recursos do GKE.
  • get
  • list
  • watch
  • delete
  • create
  • update
  • patch
  • deletecollection
kubevm.edit Concede acesso de leitura/escrita a todos os recursos do GKE.
  • get
  • list
  • watch
  • delete
  • create
  • update
  • patch
kubevm.view Concede acesso de leitura a todos os recursos do GKE.
  • get
  • list
  • watch
kubevm.cluster.view Concede acesso de leitura a recursos ao nível do cluster. Esta função de cluster é necessária quando a função de edição/visualização está associada a um espaço de nomes, enquanto o acesso a recursos ao nível do cluster é necessário.
  • get
  • list
  • watch

ClusterRoles agregados

Os ClusterRoles kubevm.admin, kubevm.view e kubevm.edit não são usados diretamente. Em alternativa, estas três funções são agregadas às ClusterRoles admin, view e edit predefinidas do Kubernetes, respetivamente. Esta agregação expande as funções predefinidas do Kubernetes para que possam ser usadas para gerir recursos do GKE. Com as ClusterRoles agregadas, pode usar as funções predefinidas do Kubernetes para gerir o acesso aos recursos do GKE ou criar as suas próprias funções com base nas ClusterRoles predefinidas.

Etiqueta de agregação de exemplo

O kubevm.edit ClusterRole tem a etiqueta rbac.authorization.k8s.io/aggregate-to-edit: "true", que o agrega ao ClusterRole edit do Kubernetes. As autorizações no kubevm.edit ClusterRole são concedidas à função edit predefinida do Kubernetes. Os kubevm.admin e os ClusterRoles são agregados de forma semelhante com anotações aggregate-to-admin ou aggregate-to-view.kubevm.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"
...

Cenários de utilizador típicos

As secções seguintes descrevem como usar RoleBinding e ClusterRoleBinding para conceder as autorizações especificadas nos ClusterRoles predefinidos a um utilizador ou conjunto de utilizadores.

Administrador do cluster

Para conceder autorizações de administrador a um utilizador ou a um conjunto de utilizadores, crie um ClusterRoleBinding com o adminClusterRole predefinido do Kubernetes.

Exemplo de ClusterRoleBinding

O seguinte admin-charlieexemplo de ClusterRoleBinding concede ao utilizador charlieautorizações de administrador. O ClusterRoleBinding usa autorizações do ClusterRole do Kubernetes admin predefinido, que inclui autorizações do ClusterRole kubevm.admin predefinido através da agregação.

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

Visitante do cluster

Para conceder autorizações de visualizador a um utilizador ou a um conjunto de utilizadores, crie um ClusterRoleBinding com o ClusterRole predefinido do Kubernetes view. Consulte o exemplo ClusterRoleBinding para ver um exemplo ClusterRoleBinding semelhante.

Editor de clusters

Para conceder autorizações de editor a um utilizador ou a um conjunto de utilizadores, crie um ClusterRoleBinding com o ClusterRole predefinido do Kubernetes edit. Consulte o exemplo ClusterRoleBinding para ver um exemplo ClusterRoleBinding semelhante.

Editor com espaço de nomes

Para conceder autorizações de editor com espaço de nomes a um utilizador ou a um conjunto de utilizadores, tem de criar duas associações separadas:

  • Crie uma RoleBinding no espaço de nomes e referencie a ClusterRole do Kubernetes edit predefinida.

  • Crie uma ClusterRoleBinding que faça referência à ClusterRole kubevm.cluster.viewpredefinida. Esta ClusterRoleBinding é necessária porque alguns recursos, como virtualmachinetypes e storageclasses, não têm espaço de nomes.

Exemplos de associação de funções (editor com espaço de nomes)

Os exemplos de RoleBinding e ClusterRoleBinding seguintes concedem ao utilizador charlie autorizações de editor para recursos no espaço de nomes 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

Leitor com espaço de nomes

Para conceder autorizações de visualizador com espaço de nomes a um utilizador ou a um conjunto de utilizadores, tem de criar duas associações separadas:

  • Crie uma RoleBinding no espaço de nomes e referencie a ClusterRole do Kubernetes view predefinida.

  • Crie uma ClusterRoleBinding que faça referência à ClusterRole kubevm.cluster.viewpredefinida.

Consulte Exemplos de associações de funções (editor com espaço de nomes) para ver exemplos semelhantes de RoleBinding e ClusterRoleBinding.

Recursos usados pelo VM Runtime no GDC

As secções seguintes contêm tabelas de recursos usados pelo VM Runtime no GDC. Estas secções destinam-se apenas a fins informativos. Se planeia usar funções predefinidas nos cenários de utilizador típicos descritos nas secções anteriores, não existe uma utilização específica para estas informações.

No entanto, se não quiser usar as funções predefinidas, pode usar estas informações de recursos para criar as suas próprias funções personalizadas.

Recursos definidos pelo Google Kubernetes Engine

Os ClusterRoles predefinidos focam-se no acesso a recursos definidos pelo GKE. A tabela seguinte apresenta os recursos do GKE e as autorizações de acesso concedidas por cada uma das ClusterRoles predefinidas.

Recurso Gerado Ao nível do cluster kubevm.admin kubevm.view kubevm.edit kubevm.cluster.view
virtualmachineaccessrequests Completo Leitura Leitura/escrita
virtualmachinedisks Completo Leitura Leitura/escrita
virtualmachines Completo Leitura Leitura/escrita
gpuallocations Completo Leitura Leitura/escrita
guestenvironmentdata Sim Completo Leitura Leitura/escrita
vmruntimes Sim Completo Leitura Leitura/escrita Leitura
virtualmachinetypes Sim Completo Leitura Leitura/escrita Leitura
vmhighavailabilitypolicies Sim Completo Leitura Leitura/escrita Leitura
networkinterfaces Sim Completo Leitura Leitura/escrita
networks Sim Completo Leitura Leitura/escrita Leitura

Recursos do KubeVirt

O tempo de execução da VM no GDC baseia-se no projeto de código aberto KubeVirt. Por predefinição, as autorizações para os recursos do KubeVirt são agregadas automaticamente às funções predefinidas do Kubernetes, de forma semelhante aos recursos geridos pelo GKE. Use as informações dos recursos na tabela seguinte se quiser criar as suas próprias funções personalizadas:

Recurso Gerado Ao nível do cluster
virtualmachineinstances/consola
virtualmachineinstances/vnc
virtualmachineinstances/portforward
virtualmachineinstances/start
virtualmachineinstances/paragem
virtualmachineinstances/restart
virtualmachines Sim
virtualmachineinstances Sim
datavolumes
storageprofiles Sim
cdiconfigs Sim

Recursos do Kubernetes

Quando trabalha com o tempo de execução de VMs no GDC e nas VMs, pode ter de gerir o acesso aos seguintes recursos do Kubernetes. Use as informações dos recursos na tabela seguinte se quiser criar as suas próprias funções personalizadas:

Recurso Gerado Ao nível do cluster
pods Sim
services
persistentvolumeclaims
secrets
nodes Sim
storageclasses Sim
configmaps

Exemplos de YAML de ClusterRole

Pode obter o YAML para os ClusterRoles com o seguinte comando kubectl:

kubectl get ClusterRole CLUSTERROLE_NAME -o yaml --kubeconfig KUBECONFIG_PATH

Substitua o seguinte:

  • CLUSTERROLE_NAME: o nome do ClusterRole, como kubevm.cluster.view.
  • KUBECONFIG_PATH: o caminho para o ficheiro kubeconfig do cluster.

Seguem-se exemplos da saída do comando para cada um dos quatro 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