Kontrol akses berbasis peran (RBAC) untuk Runtime VM di GDC

VM Runtime di GDC mengelola berbagai resource yang terkait dengan atau VM. Resource ini mencakup resource yang ditentukan edisi Google Kubernetes Engine (GKE) Enterprise, yang ditentukan oleh KubeVirt resource, dan resource Kubernetes. Menggunakan Runtime VM di GDC kontrol akses berbasis peran (RBAC) untuk mengatur dan memberlakukan izin akses untuk sumber daya yang dikelola. Untuk membantu Anda bekerja dengan resource ini dan mengelola VM Anda, kami telah menyediakan empat konfigurasi ClusterRoles:

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

Peran bawaan ini menyediakan model akses umum pada resource kustom yang terkait dengan Runtime VM di GDC. Setiap peran memiliki izin yang telah ditetapkan sebelumnya untuk beroperasi pada sumber daya. Dokumen ini memberikan informasi tentang resource Runtime VM di GDC dikelola sehingga administrator cluster dapat menyesuaikan model aksesnya sendiri.

ClusterRole yang Telah Ditetapkan Sebelumnya

Bagian ini menjelaskan setiap ClusterRoles yang telah ditentukan. ClusterRole ini hanya tersedia jika Runtime VM di GDC diaktifkan:

  • Saat Runtime VM di GDC diaktifkan, keempat ClusterRole yang telah ditentukan sebelumnya otomatis dibuat.
  • Saat Runtime VM di GDC dinonaktifkan, keempat ClusterRole yang telah ditentukan sebelumnya akan dihapus.

Tabel berikut mencantumkan peran cluster dan izin yang terkait:

Peran cluster Deskripsi Kata kerja akses
kubevm.admin Memberikan akses penuh ke semua resource edisi Google Kubernetes Engine (GKE) Enterprise.
  • get
  • list
  • watch
  • delete
  • create
  • update
  • patch
  • deletecollection
kubevm.edit Memberikan akses baca/tulis ke semua resource edisi Google Kubernetes Engine (GKE) Enterprise.
  • get
  • list
  • watch
  • delete
  • create
  • update
  • patch
kubevm.view Memberikan akses baca ke semua resource edisi Google Kubernetes Engine (GKE) Enterprise.
  • get
  • list
  • watch
kubevm.cluster.view Memberikan akses baca ke resource berdasarkan cluster. Peran cluster ini saat peran edit/lihat terikat ke namespace saat mengakses untuk menentukan resource berbasis cluster.
  • get
  • list
  • watch

ClusterRole Gabungan

ClusterRoles kubevm.admin, kubevm.view, dan kubevm.edit tidak digunakan secara langsung. Sebagai gantinya, ketiga peran ini digabungkan ke default Kubernetes ClusterRoles admin, view, dan edit. Agregasi ini memperluas peran Kubernetes default sehingga dapat digunakan untuk mengelola edisi Google Kubernetes Engine (GKE) Enterprise Google Cloud Platform. Dengan ClusterRoles gabungan, Anda dapat menggunakan peran default Kubernetes untuk mengelola akses ke edisi Google Kubernetes Engine (GKE) Enterprise resource atau buat peran Anda sendiri berdasarkan ClusterRoles yang telah ditentukan.

Contoh label agregasi

ClusterRole kubevm.edit memiliki label rbac.authorization.k8s.io/aggregate-to-edit: "true", yang mengagregasinya ke ClusterRole Kubernetes edit. Izin di kubevm.edit ClusterRole diberikan ke peran edit default Kubernetes. kubevm.admin dan kubevm.view ClusterRoles digabungkan dengan Anotasi aggregate-to-admin atau 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"
...

Skenario Pengguna Umum

Bagian berikut menjelaskan cara menggunakan RoleBinding dan ClusterRoleBinding untuk memberikan izin yang ditentukan dalam ClusterRoles bawaan kepada pengguna atau sekumpulan pengguna.

Admin cluster

Untuk memberikan izin admin kepada pengguna atau sekelompok pengguna, buat ClusterRoleBinding dengan ClusterRole admin default Kubernetes.

Contoh ClusterRoleBinding

Contoh admin-charlie berikut ClusterRoleBinding memberi pengguna charlie izin admin. ClusterRoleBinding menggunakan izin dari akses default ClusterRole admin Kubernetes, yang mencakup izin dari kubevm.admin ClusterRole melalui agregasi.

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

Penampil cluster

Untuk memberikan izin pelihat kepada pengguna atau sekelompok pengguna, buat ClusterRoleBinding dengan ClusterRole view default Kubernetes. Lihat Contoh ClusterRoleBinding untuk objek serupa Contoh ClusterRoleBinding.

Editor cluster

Untuk memberikan izin editor kepada pengguna atau sekelompok pengguna, buat ClusterRoleBinding dengan ClusterRole edit default Kubernetes. Lihat Contoh ClusterRoleBinding untuk objek serupa Contoh ClusterRoleBinding.

Editor dengan namespace

Untuk memberikan izin editor dengan namespace kepada pengguna atau sekelompok pengguna, Anda harus membuat dua binding terpisah:

  • Membuat RoleBinding pada namespace dan mereferensikan Kubernetes default ClusterRole edit.

  • Membuat ClusterRoleBinding yang mereferensikan ClusterRole kubevm.cluster.view. ClusterRoleBinding ini diperlukan, karena beberapa resource, seperti virtualmachinetypes dan storageclasses, tidak dengan namespace.

Contoh binding peran (editor dengan namespace)

Contoh RoleBinding dan ClusterRoleBinding berikut memberi pengguna charlie izin editor untuk resource dalam 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

Penampil dengan namespace

Untuk memberikan izin pelihat dengan namespace kepada pengguna atau sekelompok pengguna, Anda harus membuat dua binding terpisah:

  • Membuat RoleBinding pada namespace dan mereferensikan Kubernetes default ClusterRole view.

  • Membuat ClusterRoleBinding yang mereferensikan ClusterRole kubevm.cluster.view.

Lihat Contoh binding peran (editor dengan namespace) untuk contoh RoleBinding dan ClusterRoleBinding serupa.

Resource yang digunakan oleh VM Runtime di GDC

Bagian berikut berisi tabel resource yang digunakan oleh Runtime VM di GDC. Bagian ini hanya untuk tujuan informasi. Jika Anda berencana untuk menggunakan peran bawaan dalam skenario pengguna umum yang dijelaskan dalam bagian sebelumnya, tidak ada penggunaan khusus untuk informasi ini.

Namun, jika tidak ingin menggunakan peran bawaan, Anda dapat informasi resource untuk membuat peran Anda sendiri yang disesuaikan.

Resource yang ditentukan edisi Google Kubernetes Engine (GKE) Enterprise

ClusterRoles yang telah ditentukan sebelumnya berfokus pada akses ke Google Kubernetes Engine (GKE) Enterprise yang telah ditentukan edisi Google Cloud Platform. Tabel berikut berisi resource edisi Google Kubernetes Engine (GKE) Enterprise dan izin akses yang diberikan oleh setiap ClusterRoles yang telah ditentukan.

Resource Dibuat Berdasarkan cluster kubevm.admin kubevm.view kubevm.edit kubevm.cluster.view
virtualmachineaccessrequests Penuh Baca Baca/Tulis
virtualmachinedisks Penuh Baca Baca/Tulis
virtualmachines Penuh Baca Baca/Tulis
gpuallocations Penuh Baca Baca/Tulis
guestenvironmentdata Ya Penuh Baca Baca/Tulis
vmruntimes Ya Penuh Baca Baca/Tulis Baca
virtualmachinetypes Ya Penuh Baca Baca/Tulis Baca
vmhighavailabilitypolicies Ya Penuh Baca Baca/Tulis Baca
networkinterfaces Ya Penuh Baca Baca/Tulis
networks Ya Penuh Baca Baca/Tulis Baca

Referensi KubeVirt

Runtime VM di GDC didasarkan pada project open source KubeVirt. Secara {i>default<i}, izin akses ke resource KubeVirt secara otomatis digabungkan ke peran Kubernetes default, serupa dengan resource yang dikelola edisi Google Kubernetes Engine (GKE) Enterprise. Gunakan informasi sumber daya di tabel berikut jika Anda ingin membuatnya sendiri, peran yang disesuaikan:

Resource Dibuat Berdasarkan cluster
virtualmachineinstances/console
virtualmachineinstances/vnc
virtualmachineinstances/portforward
virtualmachineinstances/start
virtualmachineinstances/perhentian
virtualmachineinstances/restart
virtualmachines Ya
virtualmachineinstances Ya
datavolumes
storageprofiles Ya
cdiconfigs Ya

Resource Kubernetes

Saat menggunakan Runtime VM di GDC dan VM, Anda mungkin perlu mengelola akses ke resource Kubernetes berikut ini. Gunakan informasi resource di tabel berikut jika Anda ingin membuat peran sendiri yang disesuaikan:

Resource Dibuat Berdasarkan cluster
pods Ya
services
persistentvolumeclaims
secrets
nodes Ya
storageclasses Ya
configmaps

Contoh YAML ClusterRole

Anda dapat mengambil YAML untuk ClusterRoles dengan perintah kubectl berikut:

kubectl get ClusterRole CLUSTERROLE_NAME -o yaml --kubeconfig KUBECONFIG_PATH

Ganti kode berikut:

  • CLUSTERROLE_NAME: nama ClusterRole, seperti kubevm.cluster.view.
  • KUBECONFIG_PATH: jalur ke {i>kubeconfig<i} untuk cluster tersebut.

Berikut ini contoh {i>output<i} perintah untuk masing-masing dari empat 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