Controle de acesso baseado em papéis (RBAC) para o ambiente de execução de VMs no Google Distributed Cloud

O ambiente de execução de VMs no Google Distributed Cloud gerencia uma ampla variedade de recursos relacionados às suas VMs. Eles incluem recursos definidos pelo GKE Enterprise, recursos definidos pelo KubeVirt e recursos do Kubernetes. O ambiente de execução de VMs no Google Distributed Cloud usa o controle de acesso baseado em papéis (RBAC) para definir e aplicar permissões a recursos gerenciados. Para ajudar você a trabalhar com esses recursos e gerenciar suas VMs, fornecemos quatro ClusterRoles pré-configurados:

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

Esses papéis integrados fornecem um modelo de acesso generalizado aos recursos personalizados relacionados ao ambiente de execução de VMs no Google Distributed Cloud. Cada papel tem permissões predefinidas para operar nos recursos. Neste documento, fornecemos informações sobre os recursos que o ambiente de execução de VMs no Google Distributed Cloud gerencia para que os administradores de clusters possam personalizar o próprio modelo de acesso.

ClusterRoles predefinidos

Nesta seção, descrevemos cada um dos ClusterRoles predefinidos. Esses ClusterRoles ficam disponíveis apenas quando o ambiente de execução de VMs no Google Distributed Cloud é ativado:

  • Quando o ambiente de execução de VMs no Google Distributed Cloud é ativado, os quatro ClusterRoles predefinidos são criados automaticamente.
  • Quando o ambiente de execução de VMs no Google Distributed Cloud é desativado, os quatro ClusterRoles predefinidos são excluídos.

A tabela a seguir lista os papéis do cluster e as permissões relacionadas a eles:

Função do cluster Descrição Verbos de acesso
kubevm.admin Concede acesso total a todos os recursos do GKE Enterprise.
  • get
  • list
  • watch
  • delete
  • create
  • update
  • patch
  • deletecollection
kubevm.edit Concede acesso de leitura/gravação a todos os recursos do GKE Enterprise.
  • get
  • list
  • watch
  • delete
  • create
  • update
  • patch
kubevm.view Concede acesso de leitura a todos os recursos do GKE Enterprise.
  • get
  • list
  • watch
kubevm.cluster.view Concede acesso de leitura a recursos do cluster. Essa função de cluster é necessária quando a função de edição/visualização está vinculada a um namespace, enquanto o acesso a recursos 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 vez disso, esses três papéis são agregados aos ClusterRoles padrão admin, view e edit do Kubernetes, respectivamente. Essa agregação estende os papéis padrão do Kubernetes para que possam ser usados no gerenciamento de recursos do GKE Enterprise. Com ClusterRoles agregados, você pode usar papéis padrão do Kubernetes para gerenciar o acesso a recursos do GKE Enterprise ou criar seus próprios papéis com base nos ClusterRoles predefinidos.

Exemplo de rótulo de agregação

O ClusterRole kubevm.edit tem o rótulo rbac.authorization.k8s.io/aggregate-to-edit: "true", que o agrega ao ClusterRole edit do Kubernetes. As permissões do ClusterRole kubevm.edit são concedidas à função edit padrão do Kubernetes. Os ClusterRoles kubevm.admin e kubevm.view são agregados de maneira semelhante às anotações aggregate-to-admin ou 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"
...

Cenários típicos de usuários

As seções a seguir descrevem como usar RoleBinding e ClusterRoleBinding para conceder as permissões especificadas nos ClusterRoles predefinidos a um usuário ou a um conjunto de usuários.

Administrador de clusters

Para conceder permissões de administrador a um usuário ou conjunto de usuários, crie um ClusterRoleBinding com o ClusterRole admin padrão do Kubernetes.

ClusterRoleBinding de exemplo

O exemplo de ClusterRoleBinding admin-charlie a seguir fornece permissões de administrador charlie ao usuário. O ClusterRoleBinding usa permissões do ClusterRole admin padrão do Kubernetes, que inclui permissões do ClusterRole kubevm.admin predefinido por 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

Leitor de cluster

Para conceder permissões de leitor a um usuário ou conjunto de usuários, crie um ClusterRoleBinding com o ClusterRole view padrão do Kubernetes. Consulte ClusterRoleBinding de exemplo para ver um exemplo de ClusterRoleBinding.

Editor de cluster

Para conceder permissões de edição a um usuário ou a um conjunto de usuários, crie um ClusterRoleBinding com o ClusterRole edit padrão do Kubernetes. Consulte ClusterRoleBinding de exemplo para ver um exemplo de ClusterRoleBinding.

Editor com namespace

Para conceder permissões de editor com namespace a um usuário ou a um conjunto de usuários, você precisa criar duas vinculações separadas:

  • Crie um "RoleBinding" no namespace e faça referência ao ClusterRole edit padrão do Kubernetes.

  • Crie um ClusterRoleBinding que faça referência ao ClusterRole kubevm.cluster.view predefinido. Esse ClusterRoleBinding é necessário porque alguns recursos, como virtualmachinetypes e storageclasses, não são namespaces.

Exemplos de vinculação de funções (editor com namespace)

Os seguintes exemplos de RoleBinding e ClusterRoleBinding oferecem ao usuáriocharlie permissões de editor para recursos no 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

Leitor com namespace

Para conceder permissões de leitor com namespace a um usuário ou a um conjunto de usuários, você precisa criar duas vinculações separadas:

  • Crie um "RoleBinding" no namespace e faça referência ao ClusterRole view padrão do Kubernetes.

  • Crie um ClusterRoleBinding que faça referência ao ClusterRole kubevm.cluster.view predefinido.

Consulte Exemplos de vinculação de papéis (editor de namespace) para exemplos semelhantes de RoleBinding e ClusterRoleBinding.

Recursos usados pelo ambiente de execução de VMs no Google Distributed Cloud

As seções a seguir contêm tabelas de recursos usados pelo ambiente de execução de VMs no Google Distributed Cloud. Essas seções são apenas para fins informativos. Se você pretende usar funções predefinidas nos cenários comuns de usuário descritos nas seções anteriores, não há uso específico para essas informações.

No entanto, se você não quiser usar os papéis predefinidos, use essas informações dos recursos para criar seus próprios papéis personalizados.

Recursos definidos pelo GKE Enterprise

Os ClusterRoles predefinidos se concentram no acesso aos recursos definidos pelo GKE Enterprise. A tabela a seguir lista os recursos do GKE Enterprise e as permissões de acesso concedidas por cada um dos ClusterRoles predefinidos.

Recurso Gerado Em relação ao cluster kubevm.admin kubevm.view kubevm.edit kubevm.cluster.view
virtualmachineaccessrequests Completa Ler Leitura/gravação
virtualmachinedisks Completa Ler Leitura/gravação
virtualmachines Completa Ler Leitura/gravação
gpuallocations Completa Ler Leitura/gravação
guestenvironmentdata Sim Completa Ler Leitura/gravação
vmruntimes Sim Completa Ler Leitura/gravação Ler
virtualmachinetypes Sim Completa Ler Leitura/gravação Ler
vmhighavailabilitypolicies Sim Completa Ler Leitura/gravação Ler
networkinterfaces Sim Completa Ler Leitura/gravação
networks Sim Completa Ler Leitura/gravação Ler

Recursos do KubeVirt

O ambiente de execução de VMs no Google Distributed Cloud é baseado no projeto de código aberto KubeVirt. Por padrão, as permissões dos recursos do KubeVirt são agregadas automaticamente aos papéis padrão do Kubernetes, semelhantes aos recursos gerenciados pelo GKE Enterprise. Use as informações do recurso na tabela a seguir se quiser criar os próprios papéis personalizados:

Recurso Gerado Em relação ao cluster
virtualmachineinstances/console
virtualmachineinstances/vnc
virtualmachineinstances/portforward
virtualmachineinstances/start
virtualmachineinstances/stop
virtualmachineinstances/restart
virtualmachines Sim
virtualmachineinstances Sim
datavolumes
storageprofiles Sim
cdiconfigs Sim

Recursos do Kubernetes

Quando você trabalha com o ambiente de execução de VMs no Google Distributed Cloud e em VMs, pode ser necessário gerenciar o acesso aos seguintes recursos do Kubernetes. Use as informações do recurso na tabela a seguir se quiser criar os próprios papéis personalizados:

Recurso Gerado Em relação ao cluster
pods Sim
services
persistentvolumeclaims
secrets
nodes Sim
storageclasses Sim
configmaps

Exemplos de YAML do ClusterRole

É possível recuperar YAML para os ClusterRoles com o seguinte comando kubectl:

kubectl get ClusterRole CLUSTERROLE_NAME -o yaml --kubeconfig KUBECONFIG_PATH

Substitua:

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

Veja abaixo exemplos de resposta ao 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