All Products
Search
Document Center

Container Service for Kubernetes:Membatasi operasi resource dalam kluster menggunakan RBAC kustom

Last Updated:Jun 21, 2026

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

apiGroups: [""]

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

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. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Security > Role.

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

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