Menambahkan kebijakan ke GKE Gateway

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:

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:

  1. 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}
  2. 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"
  3. 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:

  1. Buat file baru bernama apigee-policies.yaml dalam namespace apim.
  2. 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
      
  3. 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:

  1. Buat file yaml baru bernama template-rule.yaml di namespace apim.
  2. 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:

  1. Buat file yaml baru bernama new-admin-template.yaml di namespace apim.
  2. 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
  3. 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:

  1. Buat file yaml baru bernama apigee-gateway-policy-withSA.yaml di namespace apim.
  2. 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
  3. Terapkan kebijakan:
    kubectl apply -f apigee-gateway-policy-withSA.yaml
  4. Verifikasi status deployment kebijakan Gateway baru:
    kubectl -n apim get ApigeeGatewayPolicy

    Setelah di-deploy, STATUS kebijakan akan menampilkan CREATED.

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, dengan GATEWAY_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 di HTTPRoute 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