Halaman ini berlaku untuk Apigee, tetapi tidak untuk Apigee Hybrid.
Baca dokumentasi
Apigee Edge.
Halaman ini menjelaskan cara menambahkan kebijakan runtime Apigee dan kebijakan injeksi token Google ke Gateway Google Kubernetes Engine (GKE) dengan Operator APIM Apigee untuk Kubernetes (Pratinjau). Dengan menambahkan kumpulan kebijakan yang tersedia ke Gateway, Anda dapat memperluas fungsi Gateway di luar penerapan produk API untuk menyertakan aturan keamanan dan bisnis tambahan.
Operator APIM Apigee untuk Kubernetes dapat digunakan untuk menambahkan kebijakan berikut ke Gateway:
Ringkasan
Bagian berikut menjelaskan cara:
- Menambahkan kebijakan ke GKE Gateway.
- Buat aturan template untuk menerapkan penggunaan kebijakan.
- Perbarui template Apigee untuk menyertakan aturan template.
- Deploy kebijakan Apigee Gateway dengan template.
- Validasi penerapan kebijakan.
Sebelum memulai
Untuk mengubah GKE Gateway dengan kumpulan kebijakan lengkap yang digunakan sebagai contoh dalam panduan ini, Anda harus memiliki akun layanan dengan peran yang diperlukan untuk membuat token dalam Apigee serta men-deploy proxy dan ekstensi. Jika memilih tidak untuk membuat token Google , Anda tidak perlu menambahkan peran tambahan ke akun layanan dan dapat melanjutkan ke bagian berikutnya.
Untuk membuat akun layanan dengan izin yang diperlukan:
- Jika Anda membuat akun layanan bernama
apigee-apim-gsa
di panduan penginstalan Operator APIM Apigee untuk Kubernetes, Anda dapat melewati langkah ini dan melanjutkan ke langkah berikutnya. Jika tidak, buat akun layanan:gcloud iam service-accounts create apigee-apim-gsa --project=${PROJECT_ID}
- Berikan peran yang diperlukan kepada akun layanan untuk membuat token:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member "serviceAccount:apigee-apim-gsa@${PROJECT_ID}.iam.gserviceaccount.com" \ --role "roles/iam.serviceAccountTokenCreator"
- Berikan peran yang diperlukan ke akun layanan
apigee-apim-gsa
untuk men-deploy proxy dan ekstensi:gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member "serviceAccount:apigee-apim-gsa@${PROJECT_ID}.iam.gserviceaccount.com" \ --role "roles/iam.serviceAccountUser"
Mengubah GKE Gateway dengan kebijakan
Anda dapat memilih untuk mengubah GKE Gateway dengan satu atau beberapa kebijakan untuk memperluas fungsinya. Panduan contoh ini menerapkan file yaml
ke Gateway yang menyertakan spesifikasi untuk dua kebijakan Apigee dan kebijakan injeksi token Google .
Setiap kebijakan yang diterapkan ke Gateway menggunakan file yaml
berikut menjalankan peran yang berbeda saat
mengevaluasi permintaan yang dikirim ke Gateway:
- Kebijakan SpikeArrest mengontrol kapasitas pesan puncak dengan menentukan kapasitas maksimum permintaan yang diizinkan selama satu unit waktu. Dalam contoh ini, kecepatan maksimum ditetapkan ke lima per menit. Untuk mempelajari lebih lanjut cara kebijakan SpikeArrest digunakan untuk mengurangi lonjakan traffic yang tiba-tiba, lihat Kebijakan SpikeArrest.
- Kebijakan JavaScript memungkinkan Anda menambahkan kode JavaScript kustom ke permintaan Gateway. Dalam contoh ini, kebijakan digunakan untuk menambahkan header kustom ke permintaan. Untuk mengetahui lebih lanjut cara kebijakan JavaScript digunakan untuk menambahkan kode kustom, lihat Kebijakan JavaScript.
- Kebijakan Google injeksi token digunakan untuk memasukkan Google token akses autentikasi ke dalam permintaan Gateway, menggunakan kebijakan AssignMessage. Apigee mendukung penggunaan Google token OAuth atau token OpenID Connect untuk mengautentikasi dengan layanan Google . Untuk mempelajari token autentikasi lebih lanjut, lihat Menggunakan autentikasi Google.
Tambahkan kebijakan ke Gateway:
- Buat file baru bernama
apigee-policies.yaml
dalam namespaceapim
. - Salin konten file berikut ke dalam file baru yang Anda buat:
# apigee-policies.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: SpikeArrest metadata: name: spike-arrest namespace: apim spec: identifier: ref: request.header.name useEffectiveCount: true peakMessageRate: value: "5pm" --- apiVersion: apim.googleapis.com/v1alpha1 kind: Javascript metadata: name: js-add-headers namespace: apim spec: timeLimit: 2000 source: | var sum = 1+1; context.setVariable("request.header.first", 1); context.setVariable("request.header.second", 1); context.setVariable("request.header.sum", sum); --- apiVersion: apim.googleapis.com/v1alpha1 kind: AssignMessage metadata: name: google-token-policy namespace: apim spec: setActions: - authentication: googleAccessToken: scopes: - 'https://www.googleapis.com/auth/cloud-platform' AssignTo: createNew: false type: request
- Terapkan file
yaml
ke Gateway menggunakan perintah berikut:kubectl -n apim apply -f apigee-policies.yaml
Membuat TemplateRule sebagai template SharedFlow
Pada langkah ini, Anda akan membuat TemplateRule
untuk menerapkan kebijakan yang telah ditambahkan ke Gateway.
Aturan template adalah aturan untuk SharedFlow yang dibuat oleh administrator organisasi untuk memastikan bahwa
hanya kebijakan yang disetujui yang diterapkan ke traffic Gateway oleh developer layanan. Aturan template
memastikan bahwa developer memahami kebijakan mana yang tersedia bagi mereka, kebijakan mana yang diperlukan untuk kasus penggunaan tertentu,
dan kebijakan mana yang tidak dapat digunakan oleh developer layanan.
Membuat aturan template
Buat aturan template untuk menerapkan penggunaan kebijakan AssignMessage:
- Buat file
yaml
baru bernamatemplate-rule.yaml
di namespaceapim
. - Salin konten file berikut ke dalam file baru yang Anda buat:
# template-rule.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: ApimTemplateRule metadata: name: template-rule namespace: apim spec: allowList: [SpikeArrest, Javascript] requiredList: [AssignMessage] denyList: []
Dalam contoh ini, aturan template memberi tahu developer bahwa kebijakan AssignMessage yang menjelaskan kebijakan injeksi token Google diperlukan. Halaman ini juga memberi tahu developer bahwa mereka dapat menggunakan kebijakan JavaScript dan SpikeArrest dalam pengelolaan API mereka. Tidak ada kebijakan yang ditentukan dalam daftar tolak.
Menerapkan aturan template
Terapkan aturan template menggunakan perintah berikut:
kubectl apply -f template-rule.yaml
Memperbarui template Apigee untuk menyertakan aturan template
Perbarui template Apigee untuk menyertakan aturan template yang Anda buat di bagian sebelumnya:
- Buat file
yaml
baru bernamanew-admin-template.yaml
di namespaceapim
. - Salin konten file berikut ke dalam file baru yang Anda buat:
# new-admin-template.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: ApimTemplate metadata: name: new-admin-template namespace: apim spec: apimTemplateRule: group: apim.googleapis.com kind: ApimTemplateRule name: template-rule namespace: apim templates: - policies: - group: apim.googleapis.com kind: SpikeArrest name: spike-arrest namespace: apim - group: apim.googleapis.com kind: Javascript name: js-add-headers namespace: apim - group: apim.googleapis.com kind: AssignMessage name: google-token-policy namespace: apim
- Terapkan template yang diperbarui menggunakan perintah berikut:
kubectl apply -f new-admin-template.yaml
Men-deploy kebijakan Apigee Gateway
Pada langkah ini, Anda akan menerapkan file baru ke Gateway yang menyertakan spesifikasi untuk ApigeeGatewayPolicy
.
Kebijakan ini digunakan untuk men-deploy template Apigee ke Gateway.
Deploy kebijakan Apigee Gateway:
- Buat file
yaml
baru bernamaapigee-gateway-policy-withSA.yaml
di namespaceapim
. - Salin konten file berikut ke dalam file baru yang Anda buat:
# apigee-gateway-policy-withSA.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: ApigeeGatewayPolicy metadata: name: apim-template-injection namespace: apim spec: serviceAccount: apigee-apim-gsa@$PROJECT_ID.iam.gserviceaccount.com ref: group: apim.googleapis.com kind: ApimTemplate name: new-admin-template namespace: apim targetRef: group: apim.googleapis.com kind: APIMExtensionPolicy name: global-ext-lb1-apim-policy namespace: apim
- Terapkan kebijakan:
kubectl apply -f apigee-gateway-policy-withSA.yaml
- Verifikasi status deployment kebijakan Gateway baru:
kubectl -n apim get ApigeeGatewayPolicy
Setelah di-deploy,
STATUS
kebijakan akan menampilkanCREATED
.
Setelah kebijakan Gateway baru di-deploy, tunggu dua menit sebelum mengirim permintaan ke Gateway untuk mengizinkan kebijakan diterapkan ke cluster.
Memvalidasi penegakan kebijakan
Untuk mengonfirmasi bahwa kebijakan Apigee Gateway berfungsi seperti yang diharapkan, kirim permintaan ke Gateway seperti yang dijelaskan di bagian berikut.
Memverifikasi penerapan kebijakan AssignMessage
Untuk mengonfirmasi bahwa token {company_name} dimasukkan ke dalam permintaan menggunakan kebijakan AssignMessage, kirim permintaan ke Gateway menggunakan perintah berikut:
curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY"
Dengan keterangan:
GATEWAY_IP_ADDRESS
adalah alamat IP Gateway. Anda dapat mengambil alamat IP Gateway menggunakan perintah berikut:kubectl get gateway GATEWAY_NAME
HOST_NAME
adalah nama host.API_KEY
adalah nilai kunci API.
Respons yang berhasil harus menyertakan header Authorization
dengan token pembawa yang dihasilkan,
mirip dengan berikut ini:
{ "args": {}, "headers": { "Accept": "*/*", "Authorization": "Bearer ya29.c.c0ASRK0Gbw03y9cfvxL11DxaRYBQUU18SmUP4Vu63OckHI5cX7wJ4DmGMG2vbDDS69HXJHqMj-lak4tcqOsJGmE65crn2gNuJLanXidwM8", "First": "1.0", "Host": "apigee-apim-operator-test.apigee.net", "Second": "1.0", "Sum": "2", "User-Agent": "curl/8.7.1", "X-Api-Key": "McYcHGR3PTSGLXExvKADwQ1JJeCjgPDUvAakCl0rJKCFaX0Y", "X-Cloud-Trace-Context": "0fd3dadc2a3c328fa968d5f5f1434c29/18300783092696918345" }, "origin": "34.54.108.129", "url": "apigee-apim-operator-test.apigee.net/get" }
Mengonfirmasi penerapan kebijakan SpikeArrest
Anda dapat menguji penerapan kebijakan SpikeArrest dengan mengirim permintaan ke Gateway sepuluh kali dalam rentang waktu satu menit.
Anda dapat menjalankan skrip berikut untuk membuat permintaan:
#!/bin/sh for i in $(seq 1 11); do curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY" sleep 1 done
Dengan keterangan:
GATEWAY_IP_ADDRESS
adalah alamat IP Gateway. Anda dapat mengambil alamat IP Gateway menggunakan perintah berikut, denganGATEWAY_NAME
adalah nama Gateway:kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
adalah nama host yang ditentukan diHTTPRoute
Gateway.API_KEY
adalah nilai kunci API yang diperoleh di Menyiapkan pengujian.
Responsnya akan terlihat seperti berikut:
"fault":{"faultstring":"Spike arrest violation. Allowed rate : MessageRate{capacity=5, period=Minutes}","detail":{"errorcode":"policies.ratelimit.SpikeArrestViolation"}}}
Memecahkan masalah
Jika Anda mengalami masalah saat menambahkan kebijakan ke GKE Gateway, lihat Memecahkan masalah Operator APIM untuk mendapatkan solusi atas error umum.
Langkah berikutnya
- Pelajari kebijakan SpikeArrest lebih lanjut.
- Pelajari kebijakan JavaScript lebih lanjut.