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

Runtime VM di GDC mengelola berbagai resource yang terkait dengan VM Anda. Resource ini mencakup resource yang ditentukan edisi Enterprise Google Kubernetes Engine (GKE), resource yang ditentukan KubeVirt, dan resource Kubernetes. Runtime VM di GDC menggunakan kontrol akses berbasis peran (RBAC) untuk menetapkan dan menerapkan izin untuk resource terkelola. Untuk membantu Anda menggunakan resource ini dan mengelola VM, kami telah menyediakan empat ClusterRole yang telah dikonfigurasi sebelumnya:

  • 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 resource. Dokumen ini memberikan informasi tentang resource yang dikelola Runtime VM di GDC sehingga administrator cluster dapat menyesuaikan model akses mereka sendiri.

ClusterRole Standar

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

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

Tabel berikut mencantumkan peran cluster dan izin terkaitnya:

Peran cluster Deskripsi Verba 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 per cluster. Peran cluster ini diperlukan saat peran edit/lihat terikat dengan namespace saat akses ke resource per cluster diperlukan.
  • get
  • list
  • watch

ClusterRole Gabungan

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

Contoh label agregasi

ClusterRole kubevm.edit memiliki label rbac.authorization.k8s.io/aggregate-to-edit: "true", yang menggabungkannya ke ClusterRole edit Kubernetes. Izin di ClusterRole kubevm.edit diberikan ke peran edit default Kubernetes. ClusterRole kubevm.admin dan kubevm.view digabungkan dengan cara yang sama 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 ClusterRole yang telah ditetapkan kepada pengguna atau sekelompok pengguna.

Admin cluster

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

Contoh ClusterRoleBinding

Contoh ClusterRoleBinding admin-charlie berikut memberikan izin admin charlie kepada pengguna. ClusterRoleBinding menggunakan izin dari ClusterRole admin Kubernetes default, yang mencakup izin dari ClusterRole kubevm.admin yang telah ditentukan 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 contoh ClusterRoleBinding yang serupa.

Editor cluster

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

Editor dengan namespace

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

  • Buat RoleBinding di namespace dan referensikan ClusterRole edit Kubernetes default.

  • Buat ClusterRoleBinding yang mereferensikan ClusterRole kubevm.cluster.view yang telah ditentukan sebelumnya. ClusterRoleBinding ini diperlukan, karena beberapa resource, seperti virtualmachinetypes dan storageclasses, tidak memiliki namespace.

Contoh binding peran (editor dengan namespace)

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

Pelihat dengan namespace

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

  • Buat RoleBinding di namespace dan referensikan ClusterRole view Kubernetes default.

  • Buat ClusterRoleBinding yang mereferensikan ClusterRole kubevm.cluster.view yang telah ditentukan sebelumnya.

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

Resource yang digunakan oleh Runtime VM di GDC

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

Namun, jika tidak ingin menggunakan peran bawaan, Anda dapat menggunakan informasi referensi ini untuk membuat peran khusus Anda sendiri.

Resource yang ditentukan edisi Google Kubernetes Engine (GKE) Enterprise

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

Resource Dibuat Per 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

Resource KubeVirt

Runtime VM di GDC didasarkan pada project open source KubeVirt. Secara default, izin untuk resource KubeVirt otomatis digabungkan ke peran Kubernetes default, mirip dengan resource yang dikelola edisi Enterprise Google Kubernetes Engine (GKE). Gunakan informasi resource dalam tabel berikut jika Anda ingin membuat peran kustom Anda sendiri:

Resource Dibuat Per cluster
virtualmachineinstances/konsol
virtualmachineinstances/vnc
virtualmachineinstances/portforward
virtualmachineinstances/start
virtualmachineinstances/perhentian
virtualmachineinstances/mulai ulang
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. Gunakan informasi resource dalam tabel berikut jika Anda ingin membuat peran khusus Anda sendiri:

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

Contoh YAML ClusterRole

Anda dapat mengambil YAML untuk ClusterRole 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 file kubeconfig untuk cluster.

Berikut adalah contoh output perintah untuk masing-masing dari empat ClusterRole yang telah ditentukan sebelumnya:

  • 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