Mengontrol penerimaan beban kerja istimewa dalam mode Autopilot

Anda dapat menjalankan workload dengan hak 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 untuk hanya menjalankan workload dengan hak istimewa tertentu dalam mode Autopilot.
  • Menginstal daftar yang diizinkan untuk workload dengan hak istimewa.

Dokumen ini ditujukan untuk jenis peran berikut:

  • Insinyur keamanan yang ingin memastikan bahwa workload pihak ketiga memerlukan daftar yang diizinkan untuk dijalankan 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 dengan hak istimewa di Autopilot

Mode Autopilot menerapkan serangkaian batasan default pada workload untuk meningkatkan postur keamanan Anda. Anda dapat mengubah batasan ini untuk menjalankan workload dengan hak 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 dengan hak 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 dengan hak istimewa, lakukan hal berikut:

  1. Konfigurasikan 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 dengan hak istimewa dan daftar yang diizinkan

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

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Untuk 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. Versi gcloud CLI yang lebih lama 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 dengan hak istimewa yang ingin dijalankan di cluster.
  • 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 daftar yang diizinkan yang 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 daftar yang diizinkan yang disetujui untuk cluster, gunakan flag --autopilot-privileged-admission saat Anda membuat atau mengupdate cluster Autopilot atau Standard, seperti dalam 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 daftar yang diizinkan. Contoh, gke://*,gs://my-agent/privileged-logging-agent.yaml. Anda juga dapat menonaktifkan penginstalan 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 mengupdate cluster.

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

Membuat AllowlistSynchronizer baru

Untuk menjalankan workload dengan hak istimewa, tambahkan jalur ke file daftar yang diizinkan yang sesuai ke spesifikasi AllowlistSynchronizer dalam file YAML. Kemudian, Anda men-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 oleh daftar yang diizinkan.
    • ALLOWLIST1_PATH, ALLOWLIST2_PATH, ...: daftar jalur ke file atau direktori daftar yang diizinkan yang ingin Anda instal, 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 daftar yang diizinkan untuk cluster. Selain itu, setiap AllowlistSynchronizer harus berisi daftar yang diizinkan yang disetujui GKE secara eksklusif, untuk daftar yang diizinkan 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 dengan hak istimewa ke dalam pipeline continuous integration dan continuous deployment (CI/CD). Konfigurasikan 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 workload yang diizinkan 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. Cantumkan 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 telah diupdate, 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 mengupdate sinkronisasi yang ada, Anda dapat memantau status sinkronisasi. Status ini membantu Anda melacak penginstalan, penghapusan, atau modifikasi file daftar yang diizinkan serta error apa pun 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 deskripsi kolom ini, lihat Status AllowlistSynchronizer.

Memastikan daftar yang diizinkan ada di cluster Anda

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

kubectl get workloadallowlist

Output-nya adalah daftar daftar yang diizinkan yang diinstal di cluster. Pastikan output menyertakan daftar yang diizinkan yang ingin Anda gunakan.

Men-deploy workload dengan hak istimewa

Setelah daftar yang diizinkan berhasil diinstal, 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 duplikat image pribadi

Anda dapat menduplikasi image container workload dengan hak istimewa di repositori pribadi yang Anda miliki. Untuk menjalankan image yang diduplikasi ini dalam workload, Anda harus memenuhi semua persyaratan berikut:

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

Jika workload mendukung image yang diduplikasi, 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 image 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 workload yang mendukung fitur ini, output-nya 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 pemilik workload secara langsung 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 image 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 diduplikat jika ringkasannya cocok dengan ringkasan yang tersedia untuk 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 image, seperti contoh sebelumnya. Jika ringkasan tidak cocok, image yang diduplikasi tidak akan berjalan. Untuk mempertahankan ringkasan image saat Anda menduplikasi image partner, pertimbangkan untuk menggunakan alat seperti crane, ORAS, atau skopeo.

Menghapus workload dengan hak istimewa

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

Jika Anda menghapus objek WorkloadAllowlist dari cluster, bukan memperbarui sinkronisasi, sinkronisasi akan menginstal ulang daftar yang diizinkan. Pastikan 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 bagian Memperbarui 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 yang diizinkan workload dengan hak istimewa di cluster tertentu, tentukan string kosong ("") di flag --autopilot-privileged-admission saat Anda membuat atau mengupdate cluster.

  • Untuk menonaktifkan jalur daftar yang diizinkan tertentu untuk cluster, hapus jalur ke daftar yang diizinkan tersebut saat Anda membuat atau mengupdate 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 ke sumber daftar yang diizinkan. 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 dengan hak istimewa.

Langkah berikutnya