Service Extensions memungkinkan Load Balancer Aplikasi yang didukung untuk mengonfigurasi ekstensi menggunakan info ke layanan Google. Halaman ini menunjukkan cara mengonfigurasi ekstensi tersebut.
Untuk ringkasannya, lihat Integrasi dengan layanan Google.
Mengonfigurasi ekstensi traffic untuk memanggil layanan Model Armor
Anda dapat mengonfigurasi ekstensi traffic untuk memanggil Model Armor guna menerapkan kebijakan keamanan secara seragam pada traffic inferensi AI generatif ke load balancer aplikasi, termasuk GKE Inference Gateway.
Ekstensi traffic mengelompokkan layanan ekstensi terkait ke dalam satu atau beberapa rantai. Anda dapat mengonfigurasi plugin dan info dalam rantai ekstensi yang sama. Setiap rantai ekstensi memilih traffic yang akan ditindaklanjuti menggunakan Common Expression Language (CEL) kondisi kecocokan. Load balancer mengevaluasi permintaan terhadap kondisi kecocokan setiap rantai secara berurutan. Saat permintaan cocok dengan kondisi yang ditentukan oleh rantai, semua ekstensi dalam rantai akan menindaklanjuti permintaan tersebut. Hanya satu rantai yang cocok dengan permintaan tertentu.
Setiap ekstensi dalam rantai dapat memiliki kumpulan peristiwa yang didukungnya sendiri. Perubahan yang dilakukan oleh ekstensi pada konten permintaan dan respons dapat dilihat oleh ekstensi yang tersisa dalam rantai. Untuk ekstensi yang dikonfigurasi untuk mendukung peristiwa respons, urutan ekstensi akan dibalik pada jalur respons.
Ekstensi traffic dilampirkan ke aturan penerusan load balancer yang dibuat menggunakan Inference Gateway. Setelah Anda mengonfigurasi resource, permintaan yang cocok akan dikirim ke layanan Model Armor.
Sebelum memulai
Identifikasi project yang sesuai tempat Anda memiliki peran pemilik atau editor project atau peran IAM Compute Engine berikut:
- Untuk membuat instance: Compute Instance Admin (v1)
(
roles/compute.instanceAdmin.v1) - Untuk membuat komponen Cloud Load Balancing: Compute Network Admin
(
roles/compute.networkAdmin)
- Untuk membuat instance: Compute Instance Admin (v1)
(
Mengaktifkan API yang diperlukan.
Konsol
Di Google Cloud konsol, buka halaman Enable access to APIs.
Ikuti petunjuk untuk mengaktifkan API yang diperlukan, yang mencakup Compute Engine API, Model Armor API, dan Network Services API.
gcloud
Gunakan perintah
gcloud services enable:gcloud services enable compute.googleapis.com modelarmor.googleapis.com networkservices.googleapis.com
Buat template Model Armor yang diperlukan.
Siapkan infrastruktur Google Kubernetes Engine Anda dengan men-deploy Inference Gateway. Uji dengan mengirim permintaan inferensi.
Dengan beberapa batasan, endpoint OpenAI API berikut didukung: Assistants, Chat Completions, Completions (legacy), Messages, dan Threads.
Batasan saat mengonfigurasi endpoint OpenAI API
Saat mengonfigurasi endpoint OpenAI API untuk infrastruktur GKE Anda, pertimbangkan batasan berikut yang berkaitan dengan sanitasi perintah dan respons:
Respons Streaming API tidak didukung untuk API apa pun. Model Armor melakukan sanitasi respons non-streaming dan mengabaikan respons streaming.
Saat melakukan sanitasi perintah dan respons, hanya operasi berikut yang didukung; operasi lainnya akan diabaikan dan diizinkan untuk dilanjutkan tanpa sanitasi:
- Assistants API:
Create,Delete,List,Modify, danRetrieve - Chat Completions API:
Create,Delete,Get Chat Completion,Get Chat Message,List, danUpdate - Completions (legacy) API:
Create - Messages API:
Create,Delete,List,Modify, danRetrieve - Responses API:
Create,Delete, danGet - Threads API:
Create,Delete,Modify, danRetrieve
- Assistants API:
Untuk panggilan API yang menampilkan beberapa pilihan dalam respons (seperti
POST https://api.openai.com/v1/chat/completions), hanya item pertama dalam daftar pilihan yang disanitasi.
Mengonfigurasi ekstensi traffic
Periksa perilaku sebelum ekstensi dikonfigurasi dengan mengirim permintaan inferensi ke load balancer dan menentukan alamat IP load balancer yang diekspos:
curl -v http://${IP}/v1/chat/completions -H "Content-Type: application/json" \ -H 'Authorization: Bearer $(gcloud auth print-access-token)' \ -d '{"model": "meta-llama/Llama-3.1-8B-Instruct", "messages": [ { "role": "user", "content": "Can you remember my ITIN: 123-45-6789" } ], "max_tokens": 250, "temperature": 0.1}'Permintaan ini menghasilkan kode status HTTP
200 OKmeskipun data sensitif telah dikirim ke LLM.Agar Model Armor memblokir perintah yang berisi data sensitif, konfigurasikan ekstensi traffic.
Konsol
Di Google Cloud konsol, buka halaman Service Extensions.
Klik Create extension. Wizard akan terbuka untuk memandu Anda melalui beberapa langkah awal.
Untuk produk, pilih Load Balancing. Kemudian, klik Continue. Daftar Load Balancer Aplikasi yang didukung akan muncul.
Pilih jenis load balancer.
Tentukan region sebagai
us-central1. Klik Continue.Untuk jenis ekstensi, pilih Traffic extensions, lalu klik Continue.
Untuk membuka formulir Create extension, klik Continue. Di formulir Create extension, perhatikan bahwa pilihan sebelumnya tidak dapat diedit.
Di bagian Basics, lakukan hal berikut:
Tentukan nama unik untuk ekstensi.
Nama harus dimulai dengan huruf kecil, diikuti dengan maksimal 62 huruf kecil, angka, atau tanda hubung, dan tidak boleh diakhiri dengan tanda hubung.
Opsional: Masukkan deskripsi singkat tentang ekstensi menggunakan maksimal 1.024 karakter.
Opsional: Di bagian Labels, klik Add label. Kemudian, di baris yang muncul, lakukan hal berikut:
- Untuk Key, masukkan nama kunci.
- Untuk Value, masukkan nilai untuk kunci.
Untuk menambahkan pasangan nilai kunci lainnya, klik Add label. Anda dapat menambahkan maksimal 64 pasangan nilai kunci.
Untuk mengetahui informasi selengkapnya tentang label, lihat Membuat dan memperbarui label untuk project.
Untuk Forwarding rules, pilih satu atau beberapa aturan penerusan yang akan dikaitkan dengan ekstensi. Pilih aturan penerusan yang dibuat sebagai bagian dari men-deploy Inference Gateway. Aturan penerusan yang sudah dikaitkan dengan ekstensi lain tidak dapat dipilih dan akan terlihat tidak tersedia.
Untuk Extension, guna menambahkan ekstensi yang akan dijalankan untuk permintaan yang cocok, lakukan hal berikut:
Untuk mencocokkan permintaan yang akan menjalankan rantai ekstensi, untuk Match condition, tentukan ekspresi Common Expression Language (CEL) —misalnya,
request.path == "/v1/chat/completions".Untuk mengetahui informasi selengkapnya tentang ekspresi CEL, klik Get syntax help atau lihat Referensi bahasa pencocokan CEL.
Tambahkan satu atau beberapa ekstensi yang akan dijalankan untuk permintaan yang cocok.
Untuk setiap ekstensi, di bagian Extensions, lakukan hal berikut, dan lalu klik Done:
Untuk Programmability type, pilih Google services dan lalu pilih endpoint layanan Model Armor —misalnya
modelarmor.us-central1.rep.googleapis.com.Untuk Timeout, tentukan nilai antara 10 dan 1.000 milidetik setelah pesan di streaming mengalami waktu tunggu. Perhatikan bahwa Model Armor memiliki latensi sekitar 250 milidetik.
Untuk Events, pilih semua jenis peristiwa HTTP.
Untuk Forward headers, klik Add header, lalu tambahkan header HTTP yang akan diteruskan ke ekstensi (dari klien atau backend). Jika header tidak ditentukan, semua header akan dikirim.
Opsional: Jika ekstensi mengalami waktu tunggu atau gagal dan Anda ingin pemrosesan permintaan atau respons dilanjutkan, untuk Fail open, pilih Enabled. Ekstensi berikutnya dalam rantai juga akan dijalankan.
Secara default, opsi Fail open tidak dipilih. Dalam hal ini, jika terjadi error, pemrosesan permintaan atau respons akan berhenti. Jika header respons belum dikirim ke klien hilir, kode status HTTP
500generik akan ditampilkan ke klien. Jika header respons telah dikirim, streaming HTTP ke klien akan direset.Opsi default untuk tidak memilih Fail open lebih disukai saat memprioritaskan keamanan atau integritas. Mengaktifkan Fail open, terutama untuk operasi non-kritis, akan membantu saat memprioritaskan ketersediaan.
Untuk Metadata, klik Add metadata untuk menentukan template Model Armor yang akan digunakan untuk menyaring perintah dan respons yang sesuai dengan model tertentu.
Untuk Key, tentukan
model_armor_settings. Untuk Value, tentukan template sebagai string JSON, seperti berikut:[{ "model": "MODEL_NAME", "model_response_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/RESPONSE_TEMPLATE", "user_prompt_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/PROMPT_TEMPLATE" }]Ganti kode berikut:
MODEL_NAME: nama model seperti yang dikonfigurasi dengan resourceInferenceModel—misalnya,meta-llama/Llama-3.1-8B-InstructTEMPLATE_PROJECT_ID: project ID template Model ArmorLOCATION: lokasi template Model Armor—misalnya,us-central1RESPONSE_TEMPLATE: template respons yang akan digunakan modelPROMPT_TEMPLATE: template perintah yang akan digunakan model
Template default juga dapat ditentukan untuk digunakan saat permintaan tidak cocok dengan model. Untuk mengonfigurasi template default, tentukan
MODEL_NAMEsebagaidefault.Jika Anda tidak ingin menyaring traffic perintah atau respons, buat dan sertakan template filter kosong.
Ukuran total
metadataharus kurang dari 1 KiB. Jumlah total kunci dalam metadata harus kurang dari 20. Panjang setiap kunci harus kurang dari 64 karakter. Panjang setiap nilai harus kurang dari 1.024 karakter. Semua nilai harus berupa string.Saat permintaan diblokir, Model Armor akan menampilkan kode status
403 Forbiddenstandar. Anda dapat mengganti status dengan menentukan setelan respons kustom (termasuk kode status dan pesan kustom) dalam kebijakan keamanan template Model Armor. Untuk mengetahui detailnya, lihat TemplateMetadata.
Jika Anda ingin menentukan lebih dari satu ekstensi atau rantai ekstensi, bukan satu ekstensi, klik tombol Switch to advanced mode di akhir formulir dan tentukan ekstensi dan rantai yang diperlukan. Ekstensi dijalankan dalam urutan yang tercantum.
Tentukan nama unik untuk setiap ekstensi dan rantai ekstensi. Nama harus sesuai dengan RFC-1034, hanya menggunakan huruf kecil, angka, dan tanda hubung, serta memiliki panjang maksimum 63 karakter. Selain itu, karakter pertama harus berupa huruf dan karakter terakhir harus berupa huruf atau angka.
Klik Create extension.
gcloud
Tentukan info dalam file YAML dan kaitkan dengan aturan penerusan yang dibuat saat men-deploy Inference Gateway. Gunakan nilai contoh yang disediakan.
cat >traffic_callout_service.yaml <<EOF name: traffic-ext forwardingRules: - https://www.googleapis.com/compute/v1/projects/LB_PROJECT_ID/regions/us-central1/forwardingRules/FORWARDING_RULE loadBalancingScheme: INTERNAL_MANAGED extensionChains: - name: "chain1-model-armor" matchCondition: celExpression: 'request.path == "/v1/chat/completions"' extensions: - name: extension-chain-1-model-armor service: modelarmor.us-central1.rep.googleapis.com failOpen: true supportedEvents: - REQUEST_HEADERS - REQUEST_BODY - REQUEST_TRAILERS - RESPONSE_HEADERS - RESPONSE_BODY - RESPONSE_TRAILERS timeout: 1s metadata: model_armor_settings: '[ { "model": "MODEL_NAME", "model_response_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/RESPONSE_TEMPLATE", "user_prompt_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/PROMPT_TEMPLATE" } ]' EOFGanti kode berikut:
TEMPLATE_PROJECT_ID: project ID template Model ArmorLB_PROJECT_ID: project ID aturan penerusan load balancerFORWARDING_RULE: satu atau beberapa aturan penerusan yang akan dikaitkan dengan ekstensi. Pilih aturan penerusan yang dibuat sebagai bagian dari men-deploy Inference Gateway.Aturan penerusan yang sudah dikaitkan dengan ekstensi lain tidak dapat dipilih dan akan terlihat tidak tersedia.
MODEL_NAME: nama model seperti yang dikonfigurasi dengan resourceInferenceModel—misalnya,meta-llama/Llama-3.1-8B-InstructLOCATION: lokasi template Model Armor—misalnya,us-central1RESPONSE_TEMPLATE: template respons yang akan digunakan modelPROMPT_TEMPLATE: template perintah yang akan digunakan model
Di kolom
metadata, tentukan setelan dan template Model Armor yang akan digunakan saat menyaring perintah dan respons yang sesuai dengan model tertentu.Template default juga dapat ditentukan untuk digunakan saat permintaan tidak cocok dengan model. Untuk mengonfigurasi template default, tentukan
MODEL_NAMEsebagaidefault.Jika Anda tidak ingin menyaring traffic perintah atau respons, buat dan sertakan template filter kosong.
Ukuran total
metadataharus kurang dari 1 KiB. Jumlah total kunci dalam metadata harus kurang dari 16. Panjang setiap kunci harus kurang dari 64 karakter. Panjang setiap nilai harus kurang dari 1.024 karakter. Semua nilai harus berupa string.Saat permintaan diblokir, Model Armor akan menampilkan kode status
403 Forbiddenstandar. Anda dapat mengganti status dengan menentukan setelan respons kustom (termasuk kode status dan pesan kustom) dalam kebijakan keamanan template Model Armor. Untuk mengetahui detailnya, lihat TemplateMetadata.Impor ekstensi traffic. Gunakan perintah
gcloud service-extensions lb-traffic-extensions importdengan nilai contoh berikut.gcloud service-extensions lb-traffic-extensions import traffic-ext \ --source=traffic_callout_service.yaml \ --location=us-central1
kubectl
Jika Anda menggunakan versi GKE yang lebih lama dari v1.32.2-gke.1182001, instal CRD ekstensi traffic:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/gke-gateway-api/refs/heads/main/config/crd/networking.gke.io_gcptrafficextensions.yamlTentukan ekstensi dalam file YAML. Resource kustom ini menautkan Inference Gateway Anda ke layanan Model Armor. Gunakan nilai contoh yang disediakan.
cat >traffic_callout_service.yaml <<EOF apiVersion: networking.gke.io/v1 kind: GCPTrafficExtension metadata: name: traffic-ext spec: targetRefs: - group: "gateway.networking.k8s.io" kind: Gateway name: inference-gateway extensionChains: - name: "chain1-model-armor" matchCondition: celExpressions: - celMatcher: 'request.path == "/v1/chat/completions"' extensions: - name: extension-chain-1-model-armor googleAPIServiceName: modelarmor.us-central1.rep.googleapis.com failOpen: true supportedEvents: - RequestHeaders - RequestBody - RequestTrailers - ResponseHeaders - ResponseBody - ResponseTrailers timeout: 1s metadata: model_armor_settings: '[ { "model": "MODEL_NAME", "model_response_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/RESPONSE_TEMPLATE", "user_prompt_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/PROMPT_TEMPLATE" } ]' EOFGanti kode berikut:
MODEL_NAME: nama model seperti yang dikonfigurasi dengan resourceInferenceModel—misalnya,meta-llama/Llama-3.1-8B-InstructTEMPLATE_PROJECT_ID: project ID template Model ArmorLOCATION: lokasi template Model Armor—misalnya,us-central1RESPONSE_TEMPLATE: template respons yang akan digunakan modelPROMPT_TEMPLATE: template perintah yang akan digunakan model
Di kolom
metadata, tentukan setelan dan template Model Armor yang akan digunakan saat menyaring perintah dan respons yang sesuai dengan model tertentu.Template default juga dapat ditentukan untuk digunakan saat permintaan tidak cocok dengan model. Untuk mengonfigurasi template default, tentukan
MODEL_NAMEsebagaidefault.Jika Anda tidak ingin menyaring traffic perintah atau respons, buat dan sertakan template filter kosong.
Ukuran total
metadataharus kurang dari 1 KiB. Jumlah total kunci dalam metadata harus kurang dari 16. Panjang setiap kunci harus kurang dari 64 karakter. Panjang setiap nilai harus kurang dari 1.024 karakter. Semua nilai harus berupa string.Saat permintaan diblokir, Model Armor akan menampilkan kode status
403 Forbiddenstandar. Anda dapat mengganti status dengan menentukan setelan respons kustom (termasuk kode status dan pesan kustom) dalam kebijakan keamanan template Model Armor. Untuk mengetahui detailnya, lihat TemplateMetadata.Terapkan konfigurasi yang ditentukan dalam file
traffic_callout_service.yamlke cluster GKE Anda. Perintah ini membuat resourceGCPTrafficExtension, yang menautkan Inference Gateway Anda ke layanan Model Armor.kubectl apply -f traffic_callout_service.yaml
Berikan peran yang diperlukan ke akun layanan Service Extensions. Gunakan perintah
gcloud projects add-iam-policy-binding:gcloud projects add-iam-policy-binding LB_PROJECT_NUMBER \ --member=serviceAccount:service-LB_PROJECT_NUMBER@gcp-sa-dep.iam.gserviceaccount.com \ --role=roles/container.admin gcloud projects add-iam-policy-binding LB_PROJECT_NUMBER \ --member=serviceAccount:service-LB_PROJECT_NUMBER@gcp-sa-dep.iam.gserviceaccount.com \ --role=roles/modelarmor.calloutUser gcloud projects add-iam-policy-binding LB_PROJECT_NUMBER \ --member=serviceAccount:service-LB_PROJECT_NUMBER@gcp-sa-dep.iam.gserviceaccount.com \ --role=roles/serviceusage.serviceUsageConsumer gcloud projects add-iam-policy-binding TEMPLATE_PROJECT_ID \ --member=serviceAccount:service-LB_PROJECT_NUMBER@gcp-sa-dep.iam.gserviceaccount.com \ --role=roles/modelarmor.userGanti kode berikut:
TEMPLATE_PROJECT_ID: project ID template Model ArmorLB_PROJECT_NUMBER: nomor project load balancer
Nilai ini tercantum di panel Project info di Google Cloud konsol untuk project Anda.
Untuk memverifikasi bahwa ekstensi traffic berfungsi seperti yang diharapkan, jalankan perintah
curlyang sama:curl -v http://${IP}/v1/chat/completions \ -H "Content-Type: application/json" \ -H 'Authorization: Bearer $(gcloud auth print-access-token)' \ -d '{"model": "meta-llama/Llama-3.1-8B-Instruct", "messages": [ { "role": "user", "content": "Can you remember my ITIN: 123-45-6789" } ], "max_tokens": 250, "temperature": 0.1}' ```
Dengan ekstensi layanan yang dikonfigurasi, permintaan dengan data sensitif akan menghasilkan kode status HTTP 403 Forbidden, mencatat pesan error seperti yang dikonfigurasi dalam template, dan menutup koneksi.
Jika permintaan aman, permintaan akan menghasilkan kode status HTTP 200 OK dan menampilkan respons LLM kepada pengguna.
Untuk memantau perilaku ekstensi, gunakan Logs Explorer. Di panel kueri, bergantung pada konfigurasi Inference Gateway Anda, filter menurut jenis resource load balancer yang sesuai.
Entri log Load Balancer Aplikasi berisi informasi yang membantu Anda men-debug traffic HTTP atau HTTPS.
Untuk melakukan analisis penilaian keamanan yang lebih mendetail, aktifkan logging audit Model Armor.