Membuat daftar yang diizinkan untuk workload istimewa di Autopilot

Dokumen ini menunjukkan cara membuat daftar yang diizinkan yang memungkinkan Anda men-deploy workload istimewa di node Autopilot Anda. Anda menyimpan daftar yang diizinkan ini di bucket Cloud Storage. Dokumen ini ditujukan bagi admin dan operator platform yang ingin mengecualikan workload tertentu milik pelanggan dari batasan keamanan Autopilot default untuk workload Kubernetes tertentu. Anda seharusnya sudah memahami kontrol penerimaan workload istimewa di Autopilot.

Tentang workload istimewa di Autopilot

Mode Autopilot menerapkan serangkaian batasan default pada workload untuk meningkatkan postur keamanan Anda. Anda dapat melewati batasan ini untuk menjalankan workload istimewa tertentu dengan menginstal daftar yang diizinkan yang sesuai dengan workload tersebut. Secara default, cluster Autopilot atau Standard memungkinkan Anda menginstal daftar yang diizinkan dari partner Autopilot dan project open source tertentu.

Pelanggan GKE yang memenuhi syarat dapat membuat dan mengelola daftar yang diizinkan untuk beban kerja istimewa mereka sendiri yang tidak kompatibel dengan batasan Autopilot default. Daftar yang diizinkan ini adalah resource kustom Kubernetes WorkloadAllowlist yang Anda tentukan dalam file YAML dan simpan di bucket Cloud Storage. Admin identitas dan akun menggunakan kebijakan organisasi untuk memungkinkan Anda mengonfigurasi cluster agar mengenali daftar yang diizinkan dan bucket yang dikelola pelanggan ini. Admin cluster dapat menginstal daftar yang diizinkan ini sehingga workload dengan hak istimewa dapat berjalan dalam mode Autopilot.

Untuk mengetahui informasi selengkapnya tentang proses dan orang-orang yang terlibat, lihat Cara kerja kontrol penerimaan workload Autopilot yang memiliki hak istimewa.

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah gcloud components update. gcloud CLI versi sebelumnya mungkin tidak mendukung menjalankan perintah dalam dokumen ini.
  • Enable the Cloud Storage API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  • Pastikan Anda memiliki cluster GKE yang menjalankan versi 1.35 atau yang lebih baru. Anda juga dapat membuat cluster Autopilot untuk tugas ini.
  • Pastikan Anda memiliki bucket Cloud Storage yang dapat digunakan untuk menyimpan file daftar yang diizinkan. Anda juga dapat membuat bucket untuk tugas ini.
  • Buka manifes YAML yang menentukan workload istimewa yang ingin Anda jalankan di Autopilot.

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk menyimpan daftar yang diizinkan di Cloud Storage dan mengonfigurasi sinkronisasi, minta administrator Anda untuk memberi Anda peran IAM berikut di bucket Anda:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Membuat dan mengupload WorkloadAllowlist

Daftar yang diizinkan adalah resource kustom WorkloadAllowlist yang Anda tentukan dalam file YAML. Kolom dalam spesifikasi WorkloadAllowlist mirip dengan kolom dalam spesifikasi Pod Kubernetes. Saat Anda menginstal daftar yang diizinkan di cluster dan men-deploy workload istimewa, GKE akan memvalidasi spesifikasi workload istimewa berdasarkan daftar yang diizinkan yang diinstal. Workload dapat berjalan hanya jika semua kolom dalam spesifikasi daftar yang diizinkan cocok dengan kolom yang sesuai dalam spesifikasi workload.

Untuk membuat WorkloadAllowlist baru dan menguploadnya ke bucket Cloud Storage, ikuti langkah-langkah berikut:

  1. Identifikasi workload dengan hak istimewa yang akan dimasukkan ke daftar yang diizinkan.
  2. Tambahkan anotasi berikut ke kolom metadata.annotations dalam spesifikasi Pod Anda:

    cloud.google.com/generate-allowlist: "true"
    

    Untuk Pod yang dikelola oleh pengontrol, seperti DaemonSet atau Deployment, tambahkan anotasi ke kolom spec.template.metadata.annotations.

  3. Coba buat workload dengan hak istimewa di cluster Anda:

    kubectl apply -f WORKLOAD_FILE_PATH
    

    Ganti WORKLOAD_FILE_PATH dengan jalur ke file manifes workload Anda. GKE menolak workload dengan pesan error yang mencakup manifes WorkloadAllowlist. Outputnya mirip dengan hal berikut ini:

    This workload can be enabled using the following Custom Resource. To be used in-cluster, the WorkloadAllowlist must be uploaded to Google Cloud Storage and then installed using an AllowlistSynchronizer. Refer to https://cloud.google.com/kubernetes-engine/docs/how-to/autopilot-privileged-allowlists.
    
    Note that many common partner workloads are already allowlisted. These can be installed directly using an AllowlistSynchronizer. Refer to https://cloud.google.com/kubernetes-engine/docs/resources/autopilot-partners.
    ---
    apiVersion: auto.gke.io/v1
    kind: WorkloadAllowlist
    metadata:
        name: test-pod-allowlist-2025-09-11t22-40-37
        annotations:
            autopilot.gke.io/no-connect: "true"
    exemptions:
        - autogke-disallow-privilege
    matchingCriteria:
        containers:
            - name: pause-container2
              image: k8s.gcr.io/pause2
              securityContext:
                privileged: true
    
  4. Di editor teks, buat file YAML yang berisi WorkloadAllowlist yang dihasilkan.

  5. Tetapkan kolom metadata.name daftar yang diizinkan.

  6. Opsional: Generalisasi WorkloadAllowlist sehingga dapat mengecualikan workload serupa. Gunakan salah satu metode berikut:

    • Kolom tertentu mendukung ekspresi reguler, seperti matchingCriteria.containers[*].image dan matchingCriteria.containers[*].args. Gunakan ekspresi reguler yang cocok dengan beberapa nilai di berbagai workload.

    • Kolom tertentu, seperti matchingCriteria.containers dan matchingCriteria.securityContext.capabilities.add, mencocokkan workload apa pun dengan subset nilai dari WorkloadAllowlist. Di WorkloadAllowlist, tentukan nilai tambahan untuk mencocokkan workload lain.

    Untuk mengetahui informasi selengkapnya tentang semua kolom dan nilai yang didukung yang dapat Anda gunakan, lihat WorkloadAllowlist CustomResourceDefinition.

  7. Upload file manifes ke bucket Cloud Storage Anda.

Jika kebijakan organisasi Anda mengizinkan penginstalan daftar yang diizinkan dari bucket Anda di cluster, admin cluster dapat melakukan hal berikut:

  1. Tambahkan jalur daftar yang diizinkan ke cluster.
  2. Buat AllowlistSynchronizer untuk menginstal daftar yang diizinkan dari bucket Anda.

Untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi cluster dan menginstal daftar yang diizinkan, lihat Mengontrol penerimaan workload istimewa dalam mode Autopilot.

Contoh konfigurasi daftar yang diizinkan

Kolom matchingCriteria dalam spesifikasi WorkloadAllowlist memiliki struktur yang serupa dengan spesifikasi Pod Kubernetes. WorkloadAllowlist CustomResourceDefinition adalah sumber tepercaya untuk semua kolom, nilai, dan ekspresi yang dapat Anda gunakan.

Bagian ini menunjukkan contoh daftar yang diizinkan yang cocok dengan beban kerja yang memiliki properti berikut:

  • Container container-1 dalam beban kerja berjalan dalam mode istimewa.
  • Workload memasang direktori /var/log/ dari sistem file node dalam mode tulis.
  1. Tinjau contoh workload:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: example-privileged-workload
      labels:
        env: dev
    spec:
      selector:
        matchLabels:
          env: dev
      template:
        metadata:
          labels:
            env: dev
        spec:
          containers:
          - name: container-1
            image: example-image-1
            resources:
              requests:
                cpu: "400m"
                memory: "4Gi"
            # Run the container in privileged mode
            securityContext:
              privileged: true
          - name: container-2
            image: example-image-2
            volumeMounts:
            - name: write-varlog
              mountPath: /logs
              readOnly: false
          # Mount a host directory
          volumes:
          - name: write-varlog
            hostPath:
              path: /var/log
              type: Directory
    

    Secara default, Autopilot menolak workload ini.

  2. Tinjau contoh WorkloadAllowlist:

    apiVersion: auto.gke.io/v1
    kind: WorkloadAllowlist
    minGKEVersion: 1.32.0-gke.1000000
    metadata:
      name: example-privileged-workload
      annotations:
        autopilot.gke.io/no-connect: "true"
    # List of constraints that the allowlist modifies
    exemptions:
    - autogke-disallow-privilege
    - autogke-no-write-mode-hostpath
    matchingCriteria:
      containers:
      - name: container-1
        image: example-image-1
        securityContext:
          privileged: true
      - name: container-2
        image: example-image-2
        volumeMounts:
        - name: write-varlog
          mountPath: /logs
          readOnly: false
      volumes:
      - name: write-varlog
        hostPath:
          path: /var/log
    

    WorkloadAllowlist ini memiliki properti berikut:

    • Nilai di kolom exemptions menentukan batasan Autopilot yang dilewati daftar yang diizinkan.
    • Nilai di kolom matchingCriteria menentukan penampung yang digunakan oleh contoh workload dan kolom yang biasanya melanggar batasan Autopilot.

    Daftar yang diizinkan hanya memiliki nilai untuk kolom yang melanggar batasan. Kolom lainnya dalam workload, seperti kolom resources.requests, akan diabaikan.

Saat Anda menginstal contoh WorkloadAllowlist ini di cluster, GKE akan mengizinkan workload istimewa berjalan di cluster tersebut. Misalnya, di cluster Standard yang memiliki node Autopilot, penginstalan WorkloadAllowlist ini memungkinkan workload dengan hak istimewa berjalan di node Autopilot.

Memberikan akses ke agen layanan GKE

Untuk menyinkronkan daftar yang diizinkan dari bucket Anda di cluster, agen layanan GKE di project cluster memerlukan peran IAM berikut:

Untuk memberikan peran ini kepada agen layanan, ikuti langkah-langkah berikut:

  1. Temukan nomor project project cluster Anda:

    gcloud projects describe CLUSTER_PROJECT_ID \
        --format='value(projectNumber)'
    
  2. Berikan peran roles/storage.bucketViewer:

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --project=BUCKET_PROJECT_ID \
        --role=roles/storage.bucketViewer
    

    Ganti kode berikut:

    • BUCKET_NAME: nama bucket Cloud Storage Anda.
    • CLUSTER_PROJECT_NUMBER: nomor project dari project cluster, dari output langkah sebelumnya.
    • BUCKET_PROJECT_ID: ID project yang berisi bucket Anda.
  3. Berikan peran roles/storage.objectViewer:

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --project=BUCKET_PROJECT_ID \
        --role=roles/storage.objectViewer
    

Langkah berikutnya