Jika ClusterRole bawaan di Konsol Container Service for Kubernetes (ACK) tidak memenuhi kebutuhan Anda, Anda dapat membuat Role dan ClusterRole kustom. Hal ini memungkinkan penerapan kontrol akses berbasis peran (RBAC) yang detail halus serta penyesuaian izin sesuai kebutuhan. Topik ini menjelaskan cara mengonfigurasi izin kustom tersebut.
Kebijakan RBAC kustom
Anda dapat membuat manifes YAML kustom untuk Role dan ClusterRole guna menerapkan kontrol akses detail halus terhadap resource di kluster ACK Anda. Gunakan informasi kebijakan berikut sebagai panduan.
Role (bercakupan namespace)
Contoh YAML berikut mendefinisikan Role bernama my-role. Role ini memberikan izin read-only pada 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 dikenai aturan.
verbs: ["get", "list"] # Aksi yang diizinkan pada resource.
ClusterRole (bercakupan kluster)
Contoh YAML berikut mendefinisikan ClusterRole bernama my-clusterrole. ClusterRole ini memberikan izin read-only pada Pod dan Service di seluruh kluster.
ClusterRole adalah resource bercakupan kluster. Jika Anda menentukan namespace dalam YAML, nilai tersebut akan diabaikan.
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"]
Dengan demikian, Anda dapat memberikan kontrol akses granular terhadap resource kluster kepada RAM user atau RAM role.
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 (resources) |
Grup API (apiGroups) |
Izin (kata kerja) |
|
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.
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Pada 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.
Pada halaman Authorizations, konfigurasikan izin.
Untuk memberikan izin 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 izin kepada RAM role: Klik tab RAM Role, temukan RAM role yang dituju, lalu klik Modify Permissions untuk membuka halaman Manajemen Izin.
-
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 # namespace: default # Namespace tidak diperlukan untuk ClusterRole dan akan diabaikan jika ditentukan. 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 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. roleRef: kind: ClusterRole name: my-clusterrole apiGroup: rbac.authorization.k8s.io -
Jalankan perintah berikut untuk menerapkan ClusterRoleBinding:
kubectl apply -f my-clusterrole-binding.yaml
Setelah memberikan izin kustom kepada RAM user atau RAM role yang dituju, dapatkan 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 read-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. Pada 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"]