Mengontrol penerimaan beban kerja istimewa dalam mode Autopilot

Anda dapat menjalankan workload istimewa dalam mode Autopilot Google Kubernetes Engine (GKE) dengan menginstal daftar yang diizinkan untuk workload tersebut di cluster Anda. Dokumen ini menunjukkan cara melakukan tugas-tugas berikut:

  • Konfigurasi GKE agar hanya menjalankan workload dengan hak istimewa tertentu dalam mode Autopilot.
  • Instal daftar yang diizinkan untuk workload istimewa.

Dokumen ini ditujukan untuk jenis peran berikut:

  • Engineer keamanan yang ingin memastikan bahwa workload pihak ketiga memerlukan daftar yang diizinkan untuk berjalan di cluster Anda dan berasal dari sumber yang disetujui GKE.
  • Engineer platform yang ingin mengaktifkan workload pihak ketiga di cluster untuk membantu tim aplikasi.

Anda seharusnya sudah memahami konsep berikut:

Tentang workload istimewa di Autopilot

Mode Autopilot menerapkan serangkaian batasan default pada workload untuk meningkatkan postur keamanan Anda. Anda dapat mengubah batasan ini untuk menjalankan workload istimewa tertentu dengan menginstal daftar yang diizinkan yang sesuai dengan workload tersebut. Secara default, Autopilot memungkinkan Anda menginstal daftar yang diizinkan dari partner Autopilot dan project open source tertentu. Pelanggan GKE yang memenuhi syarat juga dapat membuat daftar yang diizinkan untuk workload istimewa milik pelanggan yang mereka upload ke bucket Cloud Storage.

Setiap daftar yang diizinkan adalah file yang cocok dengan workload istimewa tertentu. Untuk menjalankan workload istimewa, Anda dapat melakukan hal berikut:

  1. Konfigurasi cluster untuk mengizinkan penginstalan daftar yang diizinkan dari jalur tertentu. Secara default, semua daftar yang diizinkan dari partner Autopilot dan project open source yang disetujui didukung.
  2. Buat AllowlistSynchronizer di cluster yang menginstal daftar yang diizinkan dan terus memperbarui daftar yang diizinkan.

Bug dan permintaan fitur untuk workload dan daftar yang diizinkan yang memiliki hak istimewa

Pemilik workload istimewa bertanggung jawab untuk membuat, mengembangkan, dan memelihara workload serta daftar yang diizinkannya. Jika Anda menemukan bug atau memiliki permintaan fitur untuk workload atau daftar yang diizinkan yang memiliki hak istimewa, hubungi pemilik yang sesuai.

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.

Persyaratan

  • Resource kustom AllowlistSynchronizer memerlukan GKE versi 1.32.2-gke.1652000 atau yang lebih baru.
  • Anda harus mengetahui workload istimewa mana yang ingin dijalankan di cluster Anda.
  • Untuk mengubah konfigurasi jalur daftar yang diizinkan untuk cluster, cluster Anda harus menjalankan GKE versi 1.35 atau yang lebih baru.

Mengonfigurasi jalur daftar yang diizinkan untuk cluster

Bagian ini menunjukkan cara mengonfigurasi cluster untuk mendukung penginstalan daftar yang diizinkan dari serangkaian jalur yang disetujui. Secara default, Autopilot mendukung penginstalan daftar yang diizinkan dari partner GKE dan project open source yang disetujui. Anda dapat mengubah konfigurasi default ini untuk setiap cluster. Anda juga dapat menentukan sumber yang diizinkan dan disetujui untuk seluruh organisasi, folder, atau project dengan menggunakan kebijakan organisasi.

  1. Identifikasi jalur ke file daftar yang diizinkan untuk ditambahkan ke cluster. Anda dapat menentukan beberapa jalur saat membuat atau mengupdate cluster. Anda juga dapat menonaktifkan penginstalan daftar yang diizinkan dari sumber mana pun dengan menentukan string kosong, bukan jalur. Untuk mengetahui informasi selengkapnya tentang jalur yang dapat Anda tentukan, lihat Jalur daftar yang diizinkan.

  2. Untuk mengontrol sumber yang diizinkan yang disetujui untuk cluster, gunakan flag --autopilot-privileged-admission saat Anda membuat atau mengupdate cluster Autopilot atau Standard, seperti pada perintah berikut:

    gcloud container clusters create-auto CLUSTER_NAME \
        --location=LOCATION \
        --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama untuk cluster baru Anda.
    • LOCATION: lokasi bidang kontrol cluster, seperti us-central1.
    • ALLOWLIST1_PATH,ALLOWLIST2_PATH,...: daftar jalur yang dipisahkan koma ke file atau direktori yang diizinkan. Contoh, gke://*,gs://my-agent/privileged-logging-agent.yaml. Anda juga dapat menonaktifkan penginstalan dari daftar yang diizinkan dari sumber mana pun dengan menentukan string kosong ("").

Jika Anda mengupdate cluster yang ada tanpa menentukan flag --autopilot-privileged-admission, konfigurasi jalur yang ada untuk cluster tersebut tidak akan berubah. Anda tidak perlu menentukan flag ini setiap kali Anda mengupdate cluster.

Setelah operasi pembuatan atau update cluster selesai, Anda dapat menginstal daftar yang diizinkan dari jalur yang ditentukan dengan membuat AllowlistSynchronizer.

Buat AllowlistSynchronizer baru

Untuk menjalankan workload istimewa, Anda menambahkan jalur ke file daftar yang diizinkan yang sesuai ke spesifikasi AllowlistSynchronizer dalam file YAML. Kemudian, deploy AllowlistSynchronizer ke cluster Anda.

  1. Di editor teks, buat file YAML baru.
  2. Tambahkan konten berikut ke file YAML:

    apiVersion: auto.gke.io/v1
    kind: AllowlistSynchronizer
    metadata:
      name: ALLOWLIST_SYNCHRONIZER_NAME
    spec:
      allowlistPaths:
      - ALLOWLIST1_PATH
      - ALLOWLIST2_PATH
    

    Ganti kode berikut:

    • ALLOWLIST_SYNCHRONIZER_NAME: nama sinkronisasi baru. Pilih nama deskriptif yang mengidentifikasi workload atau tim yang didukung daftar yang diizinkan.
    • ALLOWLIST1_PATH, ALLOWLIST2_PATH, ...: daftar jalur ke file atau direktori yang ingin Anda masukkan ke daftar yang diizinkan untuk diinstal, seperti dalam contoh berikut untuk daftar yang diizinkan yang disetujui GKE:

      allowlistPaths:
      - Gke-Org/accelerators/*
      - Wiz/wiz-sensor/v1/wiz-sensor-v1.yaml
      

      Atau dalam contoh berikut untuk daftar yang diizinkan milik pelanggan:

      allowlistPaths:
      - my-agent/log-collector/*
      - my-agent/privileged-logging-agent.yaml
      

      Konfigurasi cluster harus mendukung jalur yang Anda tentukan, seperti yang dijelaskan di bagian Mengonfigurasi jalur yang diizinkan untuk cluster. Selain itu, setiap AllowlistSynchronizer harus berisi daftar yang disetujui GKE secara eksklusif, untuk daftar yang dimiliki pelanggan secara eksklusif.

  3. Jika Anda menginstal daftar yang diizinkan dari bucket Cloud Storage milik pelanggan, tambahkan kolom spec.projectNumber dan spec.bucketName ke AllowlistSynchronizer Anda. Untuk mengetahui detail selengkapnya, lihat AllowlistSynchronizer CustomResourceDefinition.

  4. Deploy file YAML ke cluster Anda:

    kubectl apply -f PATH_TO_YAML_FILE
    

    Ganti PATH_TO_YAML_FILE dengan jalur ke file YAML yang Anda buat di langkah sebelumnya.

    Pengontrol AllowlistSynchronizer menginstal file daftar yang diizinkan dari jalur yang ditentukan di cluster Anda.

  5. Tunggu hingga sinkronisasi melaporkan status Ready:

    kubectl wait --for=condition=Ready allowlistsynchronizer/ALLOWLIST_SYNCHRONIZER_NAME \
        --timeout=60s
    

Anda juga dapat mengintegrasikan penginstalan daftar yang diizinkan dan deployment workload istimewa ke dalam pipeline continuous integration dan continuous deployment (CI/CD). Konfigurasi alur kerja Anda untuk menunggu hingga daftar yang diizinkan berhasil diinstal sebelum men-deploy workload yang sesuai.

Memperbarui AllowlistSynchronizer yang ada

Anda dapat memperbarui AllowlistSynchronizer yang ada untuk menambahkan atau menghapus file daftar yang diizinkan. Anda dapat memperbarui sinkronisasi yang ada dalam situasi seperti berikut:

  • Pemilik workload menambahkan file daftar yang diizinkan baru yang memiliki nama berbeda.
  • Anda ingin menambahkan daftar yang diizinkan untuk beban kerja baru ke sinkronisasi yang ada yang mengelompokkan daftar yang diizinkan terkait.
  • Anda ingin menghapus daftar yang diizinkan dari sinkronisasi karena Anda tidak ingin lagi menggunakan workload yang sesuai.

Untuk memperbarui objek AllowlistSynchronizer yang ada, lakukan hal berikut:

  1. Mencantumkan sinkronisasi yang ada di cluster Anda:

    kubectl get allowlistsynchronizer
    
  2. Buka spesifikasi sinkronisasi yang ingin Anda perbarui di editor teks.

  3. Perbarui kolom spec.allowlistPaths untuk menambahkan, mengubah, atau menghapus jalur file daftar yang diizinkan.

  4. Simpan dan tutup editor teks.

  5. Terapkan konfigurasi yang telah diupdate ke cluster:

    kubectl apply -f PATH_TO_YAML_FILE
    

    Ganti PATH_TO_YAML_FILE dengan jalur ke file YAML yang Anda perbarui di langkah sebelumnya.

Saat Anda men-deploy konfigurasi sinkronisasi yang diperbarui, kolom managedAllowlistStatus.generation dalam status objek AllowlistSynchronizer akan bertambah satu. Pengontrol AllowlistSynchronizer kemudian akan menerapkan perubahan Anda.

Memantau status sinkronisasi daftar yang diizinkan

Setelah menginstal AllowlistSynchronizer atau memperbarui sinkronisasi yang ada, Anda dapat memantau status sinkronisasi. Status ini membantu Anda melacak penginstalan, penghapusan, atau modifikasi file daftar yang diizinkan serta error yang mungkin terjadi.

Untuk memantau status umum sinkronisasi, jalankan perintah berikut:

kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml

Outputnya mirip dengan hal berikut ini:

...
status:
  conditions:
  - type: Ready
    status: "False"
    reason: "SyncError"
    message: "some allowlists failed to sync: example-allowlist-1.yaml"
    lastTransitionTime: "2024-10-12T10:00:00Z"
    observedGeneration: 2
  managedAllowlistStatus:
    - filePath: "gs://path/to/example-allowlist-2.yaml"
      generation: 1
      phase: Installed
      lastSuccessfulSync: "2024-10-10T10:00:00Z"
    - filePath: "gs://path/to/example-allowlist-1.yaml"
      phase: Failed
      lastError: "Initial install failed: invalid contents"
      lastSuccessfulSync: "2024-10-08T10:00:00Z"

Dalam contoh output ini, daftar yang diizinkan example-allowlist-1.yaml gagal disinkronkan, dan daftar yang diizinkan example-allowlist-2.yaml berhasil diinstal. Untuk mengetahui deskripsi kolom ini, lihat Status AllowlistSynchronizer.

Memastikan bahwa daftar yang diizinkan ada di cluster Anda

Untuk memverifikasi bahwa daftar yang diizinkan ada di cluster Anda, jalankan perintah berikut:

kubectl get workloadallowlist

Outputnya adalah daftar daftar yang diizinkan yang diinstal di cluster. Pastikan output menyertakan daftar yang diizinkan yang ingin Anda gunakan.

Men-deploy workload istimewa

Setelah penginstalan daftar yang diizinkan berhasil, Anda dapat men-deploy workload yang sesuai di cluster Anda. Pemilik workload juga harus memberi Anda petunjuk penginstalan untuk workload. Untuk mengetahui daftar partner Autopilot dan link ke dokumentasi mereka, lihat Partner Autopilot.

Menggunakan repositori mirror image pribadi

Anda dapat mencerminkan image container beban kerja istimewa di repositori pribadi yang Anda miliki. Untuk menjalankan gambar yang dicerminkan ini dalam workload, Anda harus memenuhi semua persyaratan berikut:

  • Ringkasan SHA-256 dari image yang di-mirror harus cocok dengan ringkasan image dari workload yang tersedia secara publik.
  • Ringkasan image SHA-256 yang Anda tentukan harus ada di objek WorkloadAllowlist yang disinkronkan ke cluster Anda.

Jika workload mendukung image yang dicerminkan, spesifikasi daftar yang diizinkan untuk workload tersebut berisi daftar ringkasan image ke kolom containers.imageDigests dalam spesifikasi daftar yang diizinkan untuk workload tersebut. Biasanya, kolom ini memiliki ringkasan terpisah untuk setiap versi image container yang tersedia. Untuk melihat daftar ringkasan gambar ini, lakukan langkah berikut:

  1. Pastikan daftar yang diizinkan ada di cluster Anda.
  2. Dapatkan spesifikasi daftar yang diizinkan yang diinstal:

    kubectl get workloadallowlist ALLOWLIST_NAME -o yaml
    

    Ganti ALLOWLIST_NAME dengan nama daftar yang diizinkan yang diinstal. Contoh, company-name-solution-v1.0.0.

    Untuk beban kerja yang mendukung fitur ini, outputnya mirip dengan berikut ini. Kolom imageDigests memiliki daftar ringkasan yang diizinkan.

    # lines omitted for clarity
    - containerName: pause-container1
      imageDigests:
      - cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
      - 932ea160d395f3d7f76c0c17a52a63c4cfe1836a900f1058b6bc20b16fd10d23
    

    Jika output tidak menyertakan kolom imageDigests, atau jika ringkasan untuk rilis yang ingin Anda gunakan tidak ada dalam daftar, hubungi langsung pemilik beban kerja dan minta mereka untuk memperbarui daftar yang diizinkan. Setelah pemilik workload menambahkan ringkasan image ke daftar yang diizinkan, sinkronisasi daftar yang diizinkan di cluster Anda akan otomatis menginstal daftar yang diizinkan yang telah diupdate.

  3. Tambahkan salah satu ringkasan gambar yang didukung ke manifes workload Anda.

Misalnya, perhatikan gambar berikut dalam spesifikasi Pod yang tersedia secara publik dari partner:

...
  containers:
  - name: pause-container1
    image: partner-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
    securityContext:
      privileged: true

Anda dapat menggunakan image yang dicerminkan jika ringkasannya cocok dengan ringkasan yang tersedia secara publik, seperti dalam contoh berikut:

...
  containers:
  - name: pause-container1
    image: my-private-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
    securityContext:
      privileged: true

Anda harus menyertakan ringkasan SHA-256 di kolom gambar, mirip dengan contoh sebelumnya. Jika ringkasan tidak cocok, gambar yang dicerminkan tidak akan berjalan. Untuk mempertahankan ringkasan gambar saat Anda mencerminkan gambar partner, pertimbangkan untuk menggunakan alat seperti crane, ORAS, atau skopeo.

Menghapus workload istimewa

Untuk berhenti mengizinkan workload istimewa berjalan di cluster Anda, hapus jalur ke daftar yang diizinkan yang sesuai dari AllowlistSynchronizer Anda. Penyinkronisasi meng-uninstal daftar yang diizinkan.

Jika Anda menghapus objek WorkloadAllowlist dari cluster, bukan memperbarui sinkronisasi, sinkronisasi akan menginstal ulang daftar yang diizinkan. Pastikan bahwa Anda menghapus jalur dari AllowlistSynchronizer.

Untuk meng-uninstal daftar yang diizinkan, lakukan hal berikut:

  1. Dalam manifes YAML untuk AllowlistSynchronizer yang mengelola daftar yang diizinkan, hapus jalur ke daftar yang diizinkan yang ingin Anda uninstal. Untuk mengetahui petunjuknya, lihat Memperbarui bagian AllowlistSynchronizer yang ada.
  2. Untuk memverifikasi bahwa daftar yang diizinkan telah di-uninstal, dapatkan daftar objek WorkloadAllowlist di cluster Anda:

    kubectl get workloadallowlist
    

    Dalam output, pastikan daftar yang diizinkan yang ingin Anda hapus tidak muncul.

  3. Hapus workload dari cluster Anda. Untuk mengetahui petunjuknya, lihat dokumentasi penyedia workload.

Mencegah penginstalan daftar yang diizinkan di cluster Anda

Untuk mencegah penginstalan daftar izin workload istimewa di cluster tertentu, tentukan string kosong ("") di tanda --autopilot-privileged-admission saat Anda membuat atau memperbarui cluster.

  • Untuk menonaktifkan jalur daftar yang diizinkan tertentu untuk cluster, hapus jalur ke daftar yang diizinkan tersebut saat Anda membuat atau memperbarui cluster:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...
    

    Ganti ALLOWLIST1_PATH,ALLOWLIST2_PATH,... dengan daftar jalur yang dipisahkan koma untuk mengizinkan sumber. Hilangkan jalur yang ingin Anda nonaktifkan.

  • Untuk menonaktifkan semua daftar yang diizinkan di cluster yang ada, tentukan string kosong sebagai jalur yang disetujui:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autopilot-allowlist-paths=""
    

Memecahkan masalah

Jika sinkronisasi atau deployment workload gagal, lihat Memecahkan masalah deployment workload Autopilot yang memiliki hak istimewa.

Langkah berikutnya