All Products
Search
Document Center

Container Service for Kubernetes:Gunakan RBAC kustom untuk membatasi operasi resource di dalam kluster

Last Updated:Mar 27, 2026

Jika ClusterRole bawaan di Container Service for Kubernetes (ACK) tidak memenuhi kebutuhan izin Anda, buat Role atau ClusterRole kustom untuk menerapkan kontrol akses berbasis peran (RBAC) dengan detail halus terhadap resource kluster.

Sebelum membuat role kustom, periksa apakah ClusterRole bawaan (cluster-admin, admin, edit, view) telah memenuhi kebutuhan Anda. Role kustom hanya diperlukan jika role bawaan terlalu luas atau terlalu ketat.

Built-in ClusterRole Tingkat akses
cluster-admin Akses penuh ke semua resource di seluruh kluster
admin Akses baca/tulis ke sebagian besar resource dalam sebuah namespace
edit Akses baca/tulis ke sebagian besar objek dalam sebuah namespace, tidak termasuk resource RBAC
view Akses read-only ke sebagian besar objek dalam sebuah namespace

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Kluster ACK

  • kubectl yang telah dikonfigurasi untuk terhubung ke kluster

  • Izin yang cukup untuk membuat resource RBAC di dalam kluster

Konsep utama

Kubernetes RBAC menggunakan dua jenis role dengan cakupan berbeda:

  • Role: memberikan izin dalam namespace tertentu.

  • ClusterRole: memberikan izin di tingkat kluster, mencakup semua namespace. Namespace tidak dapat ditentukan dalam manifes YAML ClusterRole.

Kedua jenis role menggunakan struktur aturan tiga bidang yang sama: apiGroups, resources, dan verbs.

Verba izin

Kategori Verba Deskripsi
Baca get Mengambil detail resource tertentu
Baca list Menampilkan daftar kumpulan resource
Baca watch Mengalirkan pembaruan real-time atas perubahan resource
Tulis create Membuat instans resource baru
Tulis update Mengganti resource yang sudah ada
Tulis patch Memodifikasi sebagian resource yang sudah ada
Tulis delete Menghapus resource
Penting

Hindari penggunaan wildcard (["*"]) pada resources atau verbs. Wildcard memberikan akses ke semua resource atau verba saat ini dan di masa depan, termasuk yang ditambahkan nanti. Selalu cantumkan resource dan verba secara spesifik untuk mengikuti prinsip hak istimewa minimal.

Resource yang didukung

Gunakan tabel berikut untuk menyusun bidang rules Anda. Setiap baris memetakan jenis resource ke nilai resources-nya, nilai apiGroups-nya, dan verba yang didukung.

Resource resources apiGroups Verba yang didukung
Pod ["pods"] [""] get, list, watch, update, create, patch, delete, exec, proxy
Service ["services"] [""] get, list, watch, update, create, patch, delete
ConfigMap ["configmaps"] [""] get, list, watch, update, create, patch, delete
Secret ["secrets"] [""] get, list, watch, update, create, patch, delete
PersistentVolume ["persistentvolumes"] [""] get, list, watch, update, create, patch, delete
PersistentVolumeClaim ["persistentvolumeclaims"] [""] get, list, watch, update, create, patch, delete
Namespace ["namespaces"] [""] get, list, watch, update, create, patch, delete
Deployment ["deployments"] ["apps"] get, list, watch, update, create, patch, delete
DaemonSet ["daemonsets"] ["apps"] get, list, watch, update, create, patch, delete
StatefulSet ["statefulsets"] ["apps"] get, list, watch, update, create, patch, delete
Ingress ["ingresses"] ["networking.k8s.io"] get, list, watch, update, create, patch, delete
NetworkPolicy ["networkpolicies"] ["networking.k8s.io"] get, list, watch, update, create, patch, delete
Job ["jobs"] ["batch"] get, list, watch, update, create, patch, delete
CronJob ["cronjobs"] ["batch"] get, list, watch, update, create, patch, delete
StorageClass ["storageclasses"] ["storage.k8s.io"] get, list, watch, update, create, patch, delete
HorizontalPodAutoscaler ["horizontalpodautoscalers"] ["autoscaling"] get, list, watch, update, create, patch, delete

Subresources

Beberapa resource mengekspos subresource yang memerlukan izin terpisah. Gunakan garis miring (/) untuk menentukan subresource. Misalnya, untuk mengizinkan pembacaan log pod selain pod itu sendiri:

rules:
  - apiGroups: [""]
    resources: ["pods", "pods/log"]
    verbs: ["get", "list"]

Subresource pod umum: pods/log, pods/exec, pods/portforward, pods/proxy.

Buat dan bind role RBAC kustom

Konsol ACK hanya mendukung binding ClusterRole kustom. Untuk melakukan binding Role kustom yang dibatasi pada namespace tertentu, gunakan kubectl.

  • Konsol ACK: buat ClusterRole dan bind ke Pengguna RAM atau Peran RAM

  • kubectl: buat ClusterRole atau Role, lalu buat binding yang sesuai

Konsol

Langkah 1: Buat ClusterRole

Langkah-langkah berikut membuat ClusterRole bernama my-clusterrole yang memberikan akses read-only ke pod dan Service di seluruh kluster.

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Pada halaman Clusters, klik nama kluster target. Di panel kiri, pilih Security > Role.

  3. Pada halaman Role, pilih tab Cluster Role, lalu klik OK.

  4. Di panel Create YAML, masukkan manifes ClusterRole dan klik OK. Manifes berikut memberikan akses read-only (get, list, watch) ke pod dan Service:

    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"]

    Setelah dibuat, my-clusterrole akan muncul di bawah tab ClusterRole.

Langkah 2: Bind ClusterRole ke Pengguna RAM atau Peran RAM

  1. Di panel navigasi kiri, klik Authorizations.

  2. Pada halaman Authorizations, pilih target otorisasi:

    • Pengguna RAM: klik tab RAM Users, temukan Pengguna RAM target, lalu klik Modify Permissions.

    • Peran RAM: klik tab RAM Roles, masukkan atau pilih nama Peran RAM di bidang RAM Role Name, lalu klik Modify Permissions.

  3. Di panel Permission Management, klik Add Permissions. Di bagian Add Permissions:

    1. Pilih Clusters yang terkait dengan my-clusterrole.

    2. Pilih Namespace target.

    3. Di bawah Permission Management, pilih Custom, lalu pilih my-clusterrole dari daftar drop-down.

    4. Klik Submit.

kubectl

Langkah 1: Buat role kustom

ClusterRole — memberikan izin di seluruh kluster.

Manifes berikut membuat ClusterRole bernama my-clusterrole dengan akses read-only ke pod dan Service:

# my-clusterrole.yaml
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"]

Role — memberikan izin dalam namespace tertentu.

Manifes berikut membuat Role bernama my-role dengan akses baca ke pod di namespace default:

# my-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: my-role
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "list"]

Terapkan manifes:

kubectl apply -f my-clusterrole.yaml

Langkah 2: Dapatkan ID objek otorisasi

Untuk melakukan binding role ke Pengguna RAM atau Peran RAM, Anda memerlukan ID yang sesuai:

  • Pengguna RAM: dapatkan UserId dengan memanggil API GetUser menggunakan username RAM.

  • Peran RAM: dapatkan RoleId dengan memanggil API GetRole menggunakan nama Peran RAM.

Langkah 3: Buat binding

Manifes berikut melakukan binding my-clusterrole ke Pengguna RAM atau Peran RAM. Ganti 20811XXXXXXXXX2288 dengan UserId atau RoleId dari langkah sebelumnya.

# 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 Langkah 2
roleRef:
  kind: ClusterRole
  name: my-clusterrole
  apiGroup: rbac.authorization.k8s.io

Terapkan binding:

kubectl apply -f my-clusterrole-binding.yaml

Verifikasi izin

Setelah binding, verifikasi bahwa Pengguna RAM memiliki akses yang diharapkan. Ambil kubeconfig kluster dan sambungkan menggunakan kubectl, lalu jalankan perintah yang diizinkan oleh role tersebut:

kubectl get pods

Untuk memastikan bahwa akses di luar izin yang diberikan ditolak dengan benar, jalankan perintah yang tidak dicakup oleh role—misalnya, menampilkan daftar Deployment ketika hanya akses pod yang diberikan:

kubectl get deployments

Output yang diharapkan adalah:

Error from server (Forbidden): deployments.apps is forbidden: User "20811XXXXXXXXX2288" cannot list resource "deployments" in API group "apps" at the cluster scope

Error ini mengonfirmasi bahwa batasan izin berfungsi dengan benar.

Langkah berikutnya