Jika ClusterRole bawaan di Konsol Container Service for Kubernetes (ACK) tidak memenuhi kebutuhan Anda, buat Role dan ClusterRole kustom untuk menerapkan kontrol akses berbasis peran (RBAC) dengan detail halus.
Kebijakan RBAC kustom
Buat manifes YAML kustom untuk Role dan ClusterRole guna menerapkan kontrol akses detail halus terhadap resource di kluster ACK Anda. Gunakan contoh berikut sebagai referensi.
Mekanisme RBAC Kubernetes
Role (bercakupan namespace)
Role mendefinisikan sekumpulan izin yang cakupannya terbatas pada satu namespace. RoleBinding kemudian mengikat Role tersebut ke subjek sehingga izin hanya berlaku di namespace tersebut. Contoh YAML berikut mendefinisikan Role bernama my-role yang memberikan akses baca ke resource Pod di namespace default.
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: my-role
rules: # Daftar aturan izin.
- apiGroups: [""] # Grup API dari resource. String kosong "" menunjukkan grup API inti.
resources: ["pods"] # Jenis resource yang diterapkan oleh aturan ini.
verbs: ["get", "list"] # Aksi yang diizinkan pada resource tersebut.ClusterRole (bercakupan kluster)
ClusterRole mendefinisikan sekumpulan izin yang cakupannya mencakup seluruh kluster. ClusterRoleBinding kemudian mengikat ClusterRole tersebut ke subjek sehingga izin berlaku di seluruh kluster. Contoh YAML berikut mendefinisikan ClusterRole bernama my-clusterrole yang memberikan akses baca ke resource Pod dan Service di kluster.
ClusterRole adalah resource dengan cakupan kluster. Menentukan namespace dalam YAML tidak berpengaruh.apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# namespace: default # Namespace tidak diperlukan untuk ClusterRole.
name: my-clusterrole
rules: # Daftar aturan izin.
- apiGroups: [""] # Grup API dari resource.
resources: ["pods"] # Jenis resource.
verbs: ["get", "list"] # Aksi yang diizinkan.
- apiGroups: [""]
resources: ["services"]
verbs: ["get", "list"]Kebijakan resource umum
Izin baca
get: Membaca detail resource tertentu.list: Menampilkan daftar kumpulan resource.watch: Memantau perubahan resource dan menerima pembaruan secara real-time.
Izin tulis
create: Membuat instans resource baru.update: Mengubah resource yang sudah ada.patch: Menerapkan modifikasi parsial pada resource yang sudah ada.delete: Menghapus resource tertentu.
Nama resource | Jenis resource ( | Grup API ( | Izin ( |
Pod | resources: ["pods"] |
|
|
Service | resources: ["services"] | apiGroups: [""] |
|
ConfigMap | resources: ["configmaps"] | apiGroups: [""] |
|
Secret | resources: ["secrets"] | apiGroups: [""] |
|
PersistentVolume | resources: ["persistentvolumes"] | apiGroups: [""] |
|
PersistentVolumeClaim | resources: ["persistentvolumeclaims"] | apiGroups: [""] |
|
Namespace | resources: ["namespaces"] | apiGroups: [""] |
|
Deployment | resources: ["deployments"] | apiGroups: ["apps"] |
|
DaemonSet | resources: ["daemonsets"] | apiGroups: ["apps"] |
|
StatefulSet | resources: ["statefulsets"] | apiGroups: ["apps"] |
|
Ingress | resources: ["ingresses"] | apiGroups: ["networking.k8s.io"] |
|
NetworkPolicy | resources: ["networkpolicies"] | apiGroups: ["networking.k8s.io"] |
|
Job | resources: ["jobs"] | apiGroups: ["batch"] |
|
CronJob | resources: ["cronjobs"] | apiGroups: ["batch"] |
|
StorageClass | resources: ["storageclasses"] | apiGroups: ["storage.k8s.io"] |
|
HorizontalPodAutoscaler | resources: ["horizontalpodautoscalers"] | apiGroups: ["autoscaling"] |
|
Prosedur
Anda dapat menerapkan izin RBAC kustom menggunakan Konsol ACK atau alat baris perintah kubectl.
Konsol Container Service for Kubernetes (ACK) hanya mendukung pengikatan ClusterRole kustom. Untuk mengikat Role kustom, gunakan alat baris perintah kubectl.
Konsol
Langkah 1: Buat ClusterRole kustom
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
Di halaman Role, klik tab Cluster Role. Kemudian, klik Create.
Di panel Create YAML, masukkan manifes YAML untuk kebijakan kustom Anda, lalu klik OK untuk membuat ClusterRole.
Langkah ini menggunakan YAML untuk ClusterRole (bercakupan kluster) sebagai contoh. Setelah ClusterRole dibuat, Anda dapat melihat ClusterRole kustom my-clusterrole di tab Cluster Role.
Langkah 2: Tetapkan ClusterRole kustom
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Authorizations.
Di halaman Authorizations, konfigurasikan izin management.
Untuk memberikan otorisasi kepada RAM user: Klik tab RAM Users, temukan RAM user yang dituju, lalu klik Modify Permissions di kolom Actions untuk membuka halaman Permissions.
Untuk memberikan otorisasi kepada RAM role: Klik tab RAM Role, pilih RAM role yang dituju, lalu klik Modify Permissions untuk membuka halaman Permissions.
Klik +Add Permissions. Di kotak dialog, pilih Cluster tempat Anda membuat ClusterRole dan Namespace yang ingin Anda otorisasi. Di bagian Permissions, pilih Custom. Dari daftar drop-down yang muncul, pilih my-clusterrole, lalu klik Submit.
kubectl
Langkah 1: Buat ClusterRole kustom
Buat file bernama my-clusterrole.yaml yang berisi manifes YAML berikut.
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: my-clusterrole rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["services"] verbs: ["get", "list", "watch"]Jalankan perintah berikut untuk menerapkan ClusterRole:
kubectl apply -f my-clusterrole.yaml
Langkah 2: Dapatkan ID subjek
Untuk memberikan izin kepada RAM user, Anda harus memperoleh ID penggunanya. Untuk informasi lebih lanjut, lihat Lihat detail RAM user.
Untuk memberikan izin kepada RAM role, Anda harus memperoleh ID rolenya. Untuk informasi lebih lanjut, lihat Lihat informasi tentang RAM role.
Langkah 3: Tetapkan ClusterRole kustom
Buat file bernama my-clusterrole-binding.yaml yang berisi manifes YAML berikut.
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: my-clusterrole-binding subjects: - kind: User name: "20811XXXXXXXXX2288" # ID pengguna atau ID role subjek yang diperoleh di Langkah 2. apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: my-clusterrole apiGroup: rbac.authorization.k8s.ioJalankan perintah berikut untuk menerapkan ClusterRoleBinding:
kubectl apply -f my-clusterrole-binding.yaml
Setelah Anda memberikan izin kustom kepada RAM user atau RAM role yang dituju, peroleh file kubeconfig untuk kluster dan gunakan kubectl untuk terhubung ke kluster guna memverifikasi izin tersebut.
FAQ
Bagaimana cara memberikan akses terminal konsol?
Secara default, RAM user atau RAM role tidak dapat mengakses terminal kontainer dari Konsol ACK, meskipun memiliki izin baca-only get dan list untuk pod. Aksi ini memerlukan izin get dan create pada subresource Pod pods/exec.
Oleh karena itu, Anda harus memberikan izin get dan create pada resource pods/exec di bagian rules Role atau ClusterRole, lalu ikat role tersebut ke pengguna atau kelompok pengguna yang dituju. Berikut adalah contohnya.
Untuk mengakses terminal: Masuk ke Konsol ACK. Di halaman Clusters, klik nama kluster yang dituju. Di panel navigasi kiri, pilih . Di kolom Actions, klik Terminal.
Role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: ns-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
# Berikan izin pada pods/exec di namespace.
- apiGroups: [""]
resources: ["pods/exec"]
verbs: ["get", "create"]ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# namespace: default
name: my-clusterrole
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
- apiGroups: [""]
resources: ["services"]
verbs: ["get", "list"]
# Berikan izin pada pods/exec di kluster.
- apiGroups: [""]
resources: ["pods/exec"]
verbs: ["get", "create"]