All Products
Search
Document Center

Container Service for Kubernetes:Batasi operasi resource di kluster menggunakan RBAC kustom

Last Updated:Aug 21, 2026

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 (resources)

Grup API (apiGroups)

Izin (verbs)

Pod

resources: ["pods"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Service

resources: ["services"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

ConfigMap

resources: ["configmaps"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Secret

resources: ["secrets"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

PersistentVolume

resources: ["persistentvolumes"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

PersistentVolumeClaim

resources: ["persistentvolumeclaims"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Namespace

resources: ["namespaces"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Deployment

resources: ["deployments"]

apiGroups: ["apps"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

DaemonSet

resources: ["daemonsets"]

apiGroups: ["apps"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

StatefulSet

resources: ["statefulsets"]

apiGroups: ["apps"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Ingress

resources: ["ingresses"]

apiGroups: ["networking.k8s.io"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

NetworkPolicy

resources: ["networkpolicies"]

apiGroups: ["networking.k8s.io"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Job

resources: ["jobs"]

apiGroups: ["batch"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

CronJob

resources: ["cronjobs"]

apiGroups: ["batch"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

StorageClass

resources: ["storageclasses"]

apiGroups: ["storage.k8s.io"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

HorizontalPodAutoscaler

resources: ["horizontalpodautoscalers"]

apiGroups: ["autoscaling"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Prosedur

Anda dapat menerapkan izin RBAC kustom menggunakan Konsol ACK atau alat baris perintah kubectl.

Penting

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

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

  2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Security > Role.

  3. Di halaman Role, klik tab Cluster Role. Kemudian, klik Create.

  4. 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

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

  2. 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.

  3. 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

  1. 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"]
  2. 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

  1. 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.io
  2. Jalankan 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 Workloads > Pods. 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"]