Jika ClusterRoles yang telah ditentukan sebelumnya di konsol Container Service for Kubernetes (ACK) tidak memenuhi persyaratan izin Anda, Anda dapat menyesuaikan ClusterRoles dan Roles untuk kontrol akses berbasis peran (RBAC) dengan granularitas halus. Ini memungkinkan konfigurasi fleksibel kebijakan izin sesuai kebutuhan bisnis dan kebijakan keamanan Anda. Topik ini menjelaskan cara membuat izin RBAC kustom.
Izin RBAC
Sebuah Role mendefinisikan izin dalam namespace tertentu, sedangkan ClusterRole mendefinisikan izin pada tingkat kluster. Anda dapat membuat manifes YAML Role dan ClusterRole kustom berdasarkan deskripsi kebijakan dari sumber daya berikut untuk kontrol akses halus pada sumber daya kluster ACK.
Role
Template YAML berikut mendefinisikan Role bernama my-role dengan izin baca pada sumber daya pod dalam namespace default.
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: my-role
rules: # Daftar aturan izin.
- apiGroups: [""] # Grup API tempat sumber daya tersebut berada.
resources: ["pods"] # Jenis sumber daya pod.
verbs: ["get", "list"] # Kebijakan izin get dan list.ClusterRole
Template YAML berikut mendefinisikan ClusterRole bernama my-clusterrole dengan izin baca pada sumber daya pods dan Services dalam kluster.
ClusterRole adalah sumber daya berskala kluster, sehingga parameter namespace tidak dapat ditentukan dalam file konfigurasi YAML.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# namespace: default
name: my-clusterrole
rules: # Daftar aturan izin.
- apiGroups: [""] # Grup API tempat sumber daya tersebut berada.
resources: ["pods"] # Jenis sumber daya pod.
verbs: ["get", "list"] # Kebijakan izin get dan list.
- apiGroups: [""]
resources: ["services"]
verbs: ["get", "list"]Untuk mencapai kontrol akses halus bagi pengguna atau peran Resource Access Management (RAM) pada sumber daya kluster, Anda dapat membuat izin RBAC kustom untuk sumber daya yang berbeda berdasarkan deskripsi kebijakan dari jenis sumber daya umum berikut:
Deskripsi kebijakan dari jenis sumber daya umum
Izin Baca
get: Mengambil informasi rinci dari sumber daya yang ditentukan.list: Mendapatkan daftar koleksi sumber daya.watch: Memantau perubahan sumber daya dan menerima pembaruan secara real-time.
Izin Tulis
create: Membuat instance sumber daya.update: Memodifikasi sumber daya yang ada.patch: Memodifikasi sebagian sumber daya yang ada.delete: Menghapus sumber daya yang ditentukan.
Nama Sumber Daya | Tipe Sumber Daya | Grup API | Kebijakan Izin |
Pods | resources: ["pods"] | apiGroups: [""] |
|
Service | resources: ["services"] | apiGroups: [""] |
|
ConfigMaps | resources: ["configmaps"] | apiGroups: [""] |
|
Secrets | resources: ["secrets"] | apiGroups: [""] |
|
PersistentVolumes | resources: ["persistentvolumes"] | apiGroups: [""] |
|
PersistentVolumeClaim | resources: ["persistentvolumeclaims"] | apiGroups: [""] |
|
NameSpaces | resources: ["namespaces"] | apiGroups: [""] |
|
Deployments | resources: ["deployments"] | apiGroups: ["apps"] |
|
DaemonSet | resources: ["daemonsets"] | apiGroups: ["apps"] |
|
StatefulSet | resources: ["statefulsets"] | apiGroups: ["apps"] |
|
Ingresses | resources: ["ingresses"] | apiGroups: ["networking.k8s.io"] |
|
Networkpolicies | resources: ["networkpolicies"] | apiGroups: ["networking.k8s.io"] |
|
Jobs | resources: ["jobs"] | apiGroups: ["batch"] |
|
CronJobs | resources: ["cronjobs"] | apiGroups: ["batch"] |
|
StorageClasses | resources: ["storageclasses"] | apiGroups: ["storage.k8s.io"] |
|
HorizontalPodAutoscalers | resources: ["horizontalpodautoscalers"] | apiGroups: ["autoscaling"] |
|
Prosedur
Anda dapat menyesuaikan izin RBAC melalui konsol atau kubectl.
Konsol ACK hanya mendukung pengikatan ClusterRoles kustom dengan izin RBAC dalam kluster. Untuk mengikat Roles kustom dengan izin tertentu, Anda dapat menggunakan perintah kubectl.
Konsol
Langkah 1: Buat izin RBAC kustom
Masuk ke konsol ACK. Di panel navigasi di sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel sebelah kiri, pilih .
Di halaman Role, pilih tab Cluster Role. Kemudian, klik OK.
Di panel Create YAML, masukkan konten YAML dari ClusterRole dan klik OK untuk membuat ClusterRole.
Langkah ini menggunakan template YAML untuk ClusterRole sebagai contoh. Anda dapat melihat izin kustom my-clusterrole di bawah tab Cluster Role setelah pembuatan.
Langkah 2: Gunakan izin RBAC kustom untuk otorisasi
Masuk ke konsol ACK. Di panel navigasi di sebelah kiri, klik Authorizations.
Di halaman Authorizations, berikan izin.
Berikan Izin kepada Pengguna RAM
Klik tab RAM Users, temukan pengguna RAM yang ingin Anda kelola dalam daftar, lalu klik Modify Permissions untuk membuka panel Permission Management. Anda juga dapat memilih beberapa pengguna RAM untuk memberikan izin.
Berikan Izin kepada Peran RAM
Klik tab RAM Roles, tentukan Nama Peran RAM, lalu klik Modify Permissions untuk membuka panel Permission Management.
CatatanAnda dapat memasukkan nama peran RAM secara manual atau memilih peran RAM dari daftar drop-down. Anda dapat mengklik kotak kosong di sebelah kolom Nama Peran RAM. Daftar peran RAM yang ada akan ditampilkan. Lalu, pilih peran RAM yang ada dari daftar untuk memberikan izin.
Di panel Permission Management, klik + Add Permissions. Di bagian Add Permissions, pilih Clusters yang terkait dengan ClusterRole yang dibuat dan Namespace yang akan diberi otorisasi. Pilih Custom di bawah Permission Management, lalu pilih my-clusterrole dari daftar drop-down di sebelah kanan, dan klik Submit.
kubectl
Langkah 1: Buat izin RBAC kustom
Gunakan template YAML berikut untuk membuat file bernama my-clusterrole.yaml:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: my-clusterrole namespace: default rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["services"] verbs: ["get", "list", "watch"]Jalankan perintah berikut untuk membuat ClusterRole:
kubectl apply -f my-clusterrole.yaml
Langkah 2: Dapatkan ID objek otorisasi
Untuk memberikan otorisasi kepada pengguna RAM, dapatkan UserId dengan menanyakan nama pengguna RAM. Untuk informasi lebih lanjut, lihat GetUser.
Untuk memberikan otorisasi kepada peran RAM, dapatkan RoleId dengan menanyakan nama peran RAM. Untuk informasi lebih lanjut, lihat GetRole.
Langkah 3: Gunakan izin RBAC kustom untuk otorisasi
Gunakan template YAML berikut untuk membuat file bernama my-clusterrole-binding.yaml:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: my-clusterrole-binding subjects: - kind: User name: "20811XXXXXXXXX2288" # UserId atau RoleId dari objek otorisasi yang diperoleh di Langkah 2. roleRef: kind: ClusterRole name: my-clusterrole apiGroup: rbac.authorization.k8s.ioJalankan perintah berikut untuk membuat ClusterRoleBinding:
kubectl apply -f my-clusterrole-binding.yaml
Setelah pengguna RAM diberikan izin RBAC kustom, konfirmasikan akses mereka dengan mengambil KubeConfig dari kluster target dan menghubungkan ke kluster menggunakan alat kubectl.