Petunjuk dan persyaratan penyiapan lab
Lindungi akun dan progres Anda. Selalu gunakan jendela browser pribadi dan kredensial lab untuk menjalankan lab ini.

Mengamankan API dengan Apigee X

Lab 35 menit universal_currency_alt 5 Kredit show_chart Menengah
info Lab ini mungkin menggabungkan alat AI untuk mendukung pembelajaran Anda.
Konten ini belum dioptimalkan untuk perangkat seluler.
Untuk pengalaman terbaik, kunjungi kami dengan komputer desktop menggunakan link yang dikirim melalui email.

GSP844

Logo lab mandiri Google Cloud

Ringkasan

Apigee adalah platform untuk mengembangkan dan mengelola API. Apigee dapat membantu Anda mengamankan akses ke API dan membatasi kapasitas akses ke API tersebut. Apigee juga menyediakan fitur yang digunakan untuk mengamankan akses internal ke data API.

Dalam lab ini, Anda akan membuat API yang memerlukan token OAuth untuk akses. Anda menggunakan kebijakan SpikeArrest untuk membatasi kapasitas panggilan API berdasarkan aplikasi, dan Anda menggunakan variabel pribadi dan penyamaran data untuk menyembunyikan data sensitif dari pengguna yang men-debug traffic API.

Tujuan

Di lab ini, Anda akan mempelajari cara melakukan tugas berikut:

  • Mengamankan akses ke API dengan mewajibkan token OAuth
  • Membatasi kapasitas traffic secara keseluruhan dan kapasitas berdasarkan aplikasi dengan kebijakan SpikeArrest
  • Menggunakan variabel pribadi dan penyamaran data untuk menyembunyikan data sensitif saat men-debug panggilan API
  • Membatasi panggilan ke backend untuk resource tertentu
  • Menulis ulang pesan error backend untuk melindungi dari kebocoran data

Penyiapan dan persyaratan

Sebelum mengklik tombol Start Lab

Baca petunjuk ini. Lab memiliki timer dan Anda tidak dapat menjedanya. Timer yang dimulai saat Anda mengklik Start Lab akan menampilkan durasi ketersediaan resource Google Cloud untuk Anda.

Lab interaktif ini dapat Anda gunakan untuk melakukan aktivitas lab di lingkungan cloud sungguhan, bukan di lingkungan demo atau simulasi. Untuk mengakses lab ini, Anda akan diberi kredensial baru yang bersifat sementara dan dapat digunakan untuk login serta mengakses Google Cloud selama durasi lab.

Untuk menyelesaikan lab ini, Anda memerlukan:

  • Akses ke browser internet standar (disarankan browser Chrome).
Catatan: Gunakan jendela Samaran (direkomendasikan) atau browser pribadi untuk menjalankan lab ini. Hal ini akan mencegah konflik antara akun pribadi Anda dan akun siswa yang dapat menyebabkan tagihan ekstra pada akun pribadi Anda.
  • Waktu untuk menyelesaikan lab. Ingat, setelah dimulai, lab tidak dapat dijeda.
Catatan: Hanya gunakan akun siswa untuk lab ini. Jika Anda menggunakan akun Google Cloud yang berbeda, Anda mungkin akan dikenai tagihan ke akun tersebut. Catatan: Sebaiknya gunakan jendela Samaran baru untuk menyelesaikan lab ini.

Cara memulai lab dan login ke Google Cloud Console

  1. Klik tombol Start Lab. Jika Anda perlu membayar lab, dialog akan terbuka untuk memilih metode pembayaran. Di sebelah kiri ada panel Lab Details yang berisi hal-hal berikut:

    • Tombol Open Google Cloud console
    • Waktu tersisa
    • Kredensial sementara yang harus Anda gunakan untuk lab ini
    • Informasi lain, jika diperlukan, untuk menyelesaikan lab ini
  2. Klik Open Google Cloud console (atau klik kanan dan pilih Open Link in Incognito Window jika Anda menjalankan browser Chrome).

    Lab akan menjalankan resource, lalu membuka tab lain yang menampilkan halaman Sign in.

    Tips: Atur tab di jendela terpisah secara berdampingan.

    Catatan: Jika Anda melihat dialog Choose an account, klik Use Another Account.
  3. Jika perlu, salin Username di bawah dan tempel ke dialog Sign in.

    {{{user_0.username | "Username"}}}

    Anda juga dapat menemukan Username di panel Lab Details.

  4. Klik Next.

  5. Salin Password di bawah dan tempel ke dialog Welcome.

    {{{user_0.password | "Password"}}}

    Anda juga dapat menemukan Password di panel Lab Details.

  6. Klik Next.

    Penting: Anda harus menggunakan kredensial yang diberikan lab. Jangan menggunakan kredensial akun Google Cloud Anda. Catatan: Menggunakan akun Google Cloud sendiri untuk lab ini dapat dikenai biaya tambahan.
  7. Klik halaman berikutnya:

    • Setujui persyaratan dan ketentuan.
    • Jangan tambahkan opsi pemulihan atau autentikasi 2 langkah (karena ini akun sementara).
    • Jangan mendaftar uji coba gratis.

Setelah beberapa saat, Konsol Google Cloud akan terbuka di tab ini.

Catatan: Untuk mengakses produk dan layanan Google Cloud, klik Navigation menu atau ketik nama layanan atau produk di kolom Search. Ikon Navigation menu dan kolom Search

Mengaktifkan Cloud Shell

Cloud Shell adalah mesin virtual yang dilengkapi dengan berbagai alat pengembangan. Mesin virtual ini menawarkan direktori beranda persisten berkapasitas 5 GB dan berjalan di Google Cloud. Cloud Shell menyediakan akses command-line untuk resource Google Cloud Anda.

  1. Klik Activate Cloud Shell Ikon Activate Cloud Shell di bagian atas Konsol Google Cloud.

  2. Klik jendela berikut:

    • Lanjutkan melalui jendela informasi Cloud Shell.
    • Beri otorisasi ke Cloud Shell untuk menggunakan kredensial Anda guna melakukan panggilan Google Cloud API.

Setelah terhubung, Anda sudah diautentikasi, dan project ditetapkan ke Project_ID, . Output berisi baris yang mendeklarasikan Project_ID untuk sesi ini:

Project Cloud Platform Anda dalam sesi ini disetel ke {{{project_0.project_id | "PROJECT_ID"}}}

gcloud adalah alat command line untuk Google Cloud. Alat ini sudah terinstal di Cloud Shell dan mendukung pelengkapan command line.

  1. (Opsional) Anda dapat menampilkan daftar nama akun yang aktif dengan perintah ini:
gcloud auth list
  1. Klik Authorize.

Output:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} Untuk menetapkan akun aktif, jalankan: $ gcloud config set account `ACCOUNT`
  1. (Opsional) Anda dapat menampilkan daftar ID project dengan perintah ini:
gcloud config list project

Output:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} Catatan: Untuk mendapatkan dokumentasi gcloud yang lengkap di Google Cloud, baca panduan ringkasan gcloud CLI.

Membuka konsol Apigee

Untuk membuka konsol Apigee:

  • Di Konsol Google Cloud, di kolom Search, masukkan Apigee, lalu klik Apigee API Management di hasil penelusuran.

Konsol Apigee akan terbuka, dan halaman landing akan menampilkan link cepat ke lokasi yang biasa digunakan.

  • Di Navigation menu (Navigation menu), di samping Apigee, klik Favorite (Ikon Favorite).

Apigee kini ditambahkan sebagai favorit ke Navigation menu.

Tugas 1. Membuat proxy layanan backend menggunakan proxy API Apigee

Dalam tugas ini, Anda akan membuat proxy API Apigee yang bertindak sebagai facade untuk layanan backend. Proxy API ini akan menggunakan akun layanan agar dapat menampilkan token identitas OpenID Connect ke layanan Cloud Run.

Layanan backend bernama simplebank-rest telah dibuat dan di-deploy ke Cloud Run. Akun layanan juga telah dibuat untuk Anda.

Membuat proxy Apigee

  1. Di Cloud Shell, gunakan perintah berikut untuk mengambil URL layanan backend:

    gcloud run services describe simplebank-rest --platform managed --region {{{project_0.default_region |REGION}}} --format 'value(status.url)'

    Simpan URL ini karena akan digunakan saat membuat proxy API.

  2. Buka UI Apigee di Konsol Cloud.

  3. Pada Navigation menu sebelah kiri, pilih Proxy development > API proxies.

  4. Untuk membuat proxy baru menggunakan wizard proxy, klik + Create.

    Anda akan membuat reverse proxy untuk layanan backend. Proxy API ini akan menggunakan OpenAPI Specification untuk membuat kerangka API.

  5. Untuk kotak Proxy template, di OpenAPI spec template, pilih Reverse proxy (Most common).

  6. Untuk File OpenAPI, buka URL di browser dan file YAML OpenAPI Specification akan didownload ke komputer Anda:

    https://storage.googleapis.com/spls/gsp844/simplebank-backend.yaml
  7. Klik Browse, pilih file dari komputer untuk OpenAPI file, lalu klik Next.

  8. Tentukan parameter berikut untuk Proxy details:

    Properti Nilai
    Proxy name bank-v1
    Base path /bank/v1
    Description SimpleBank read-only API
    Target (Existing API) backend URL
    Catatan: Pastikan Anda menggunakan "/bank/v1" untuk base path, bukan "/bank-v1".

    Target harus berupa URL backend yang Anda ambil sebelumnya dalam tugas ini. Target akan terlihat seperti ini:

    https://simplebank-rest-nu7rb74j5a-uw.a.run.app
  9. Klik Next.

  10. Tetap gunakan nilai default untuk setelan lainnya, lalu klik Create.

  11. Klik tab Develop.

    Catatan: Alur telah ditambahkan ke endpoint proxy, yang masing-masing menentukan kata kerja dan kondisi jalur salah satu operasi dari OpenAPI Specification.

Mengubah target untuk mengirim token identitas OpenID Connect

Layanan backend di-deploy untuk mewajibkan akses terautentikasi, sehingga Anda tidak dapat memanggil layanan tanpa token identitas OpenID Connect yang valid.

HTTPTargetConnection menentukan target backend untuk layanan.

  1. Di menu Navigator untuk proxy, di bagian Target endpoints, klik PreFlow.

  2. Temukan kode berikut (URL Anda akan berbeda):

    <HTTPTargetConnection> <URL>https://simplebank-rest-zce6j3rjwq-uw.a.run.app</URL> </HTTPTargetConnection> Catatan: Jika Anda tidak melihat bagian HTTPTargetConnection, pastikan Anda telah mengklik PreFlow di bagian Target Endpoints, bukan di bagian Proxy Endpoints.
  3. Di bawah URL, tambahkan bagian Authentication yang terlihat seperti ini:

    <Authentication> <GoogleIDToken> <Audience>AUDIENCE</Audience> </GoogleIDToken> </Authentication>
  4. Ganti AUDIENCE dengan nilai URL yang sudah ada di bagian HTTPTargetConnection. Kode Anda kini akan terlihat mirip seperti berikut, kecuali dengan URL spesifik Anda di elemen URL dan Audience:

    <TargetEndpoint name="default"> <PreFlow name="PreFlow"> <Request/> <Response/> </PreFlow> <Flows/> <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <HTTPTargetConnection> <URL>https://simplebank-rest-zce6j3rjwq-uw.a.run.app</URL> <Authentication> <GoogleIDToken> <Audience>https://simplebank-rest-zce6j3rjwq-uw.a.run.app</Audience> </GoogleIDToken> </Authentication> </HTTPTargetConnection> </TargetEndpoint>
  5. Klik Save.

Klik Periksa progres saya untuk memverifikasi tujuan. Membuat proxy API

Tugas 2. Menambahkan OAuth ke proxy API

Dalam tugas ini, Anda akan menambahkan kebijakan OAuthV2 ke proxy API. Kebijakan OAuthV2 yang menggunakan operasi VerifyJWTAccessToken menerapkan verifikasi token akses saat runtime, sehingga hanya aplikasi dengan token akses OAuth yang valid yang dapat mengakses API.

Kebijakan OAuthV2 dapat membuat dan memverifikasi token buram dan Token Web JSON (JWT). Proxy API ini akan menggunakan JWT untuk token akses.

Set properti akan digunakan untuk menyimpan secret penandatanganan yang digunakan dalam pembuatan dan verifikasi JWT.

Membuat secret penandatanganan di set properti

JWT akan ditandatangani menggunakan hash-based message authentication code (HMAC). Penandatanganan kriptografi jenis ini memerlukan secret.

  1. Di menu Navigator untuk proxy, di samping Resources, klik +.

  2. Di dropdown Resource Type, pilih Property Set.

  3. Tetapkan oauth.properties untuk Resource Name, lalu klik Add.

  4. Di panel kode oauth.properties, tambahkan properti berikut:

    secret=thisisnotagoodsecret,useabettersecretinproduction

    Nilai ini dapat diakses dalam kode menggunakan variabel alur propertyset.oauth.secret.

    Catatan: Nilai set properti disimpan dalam teks biasa. Dalam lingkungan produksi, Anda mungkin akan menyimpan secret HMAC di lokasi terenkripsi, dan Anda pasti ingin menggunakan secret yang lebih aman (acak).

Menambahkan kebijakan AssignMessage untuk mengambil nilai set properti

Secret penandatanganan harus dimasukkan ke kebijakan OAuth dalam variabel pribadi, tetapi variabel propertyset.oauth.secret tidak bersifat pribadi. Kebijakan AssignMessage ini akan membuat variabel pribadi dari variabel set properti.

  1. Di menu Navigator untuk proxy, di bagian Proxy endpoints, di bagian default, klik PreFlow.

    PreFlow permintaan di endpoint proxy default merupakan alur pertama yang dijalankan saat permintaan masuk ke proxy API.

    Kebijakan OAuthV2 memerlukan secret, dan akan dijalankan sangat awal di proxy API.

  2. Di panel Flow, klik tombol + tepat di samping PreFlow dalam alur permintaan.

  3. Pilih Create new policy dan untuk dropdown Select policy, pilih Assign Message dari bagian Mediation, lalu tetapkan Display Name dan Name ke AM-GetSecret.

  4. Klik Add. Klik AM-GetSecret di bagian Policies di menu Navigator.

    Konfigurasi kebijakan AssignMessage ditampilkan di panel Code.

  5. Ubah konfigurasi kebijakan menjadi:

    <AssignMessage name="AM-GetSecret"> <AssignVariable> <Name>private.secretkey</Name> <Ref>propertyset.oauth.secret</Ref> </AssignVariable> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>

    Setelan AssignVariable menyalin variabel propertyset.oauth.secret ke dalam variabel private.secretkey.

    Setelan IgnoreUnresolvedVariables menyebabkan kebijakan AssignMessage melaporkan kesalahan jika propertyset.oauth.secret tidak dapat diselesaikan.

Menambahkan kebijakan OAuthV2 untuk memverifikasi token

  1. Di menu Navigator untuk proxy, di bagian Proxy endpoints, di bagian default, klik PreFlow.

    Kebijakan OAuthV2 harus dijalankan setelah kebijakan AssignMessage.

  2. Di panel Flow, klik tombol + tepat di samping PreFlow dalam alur permintaan.

  3. Pilih Create new policy dan untuk dropdown Select policy, pilih OAuth v2.0 dari bagian Security, lalu tetapkan Display Name dan Name ke OA-VerifyToken.

  4. Klik Add, lalu klik OA-VerifyToken dari Policies di menu Navigator.

    Konfigurasi kebijakan OAuthV2 ditampilkan di panel Code.

  5. Ubah konfigurasi kebijakan OAuthV2 menjadi:

    <OAuthV2 name="OA-VerifyToken"> <Operation>VerifyJWTAccessToken</Operation> <Algorithm>HS256</Algorithm> <SecretKey> <Value ref="private.secretkey"/> </SecretKey> </OAuthV2>

    Konfigurasi menetapkan bahwa token akses JWT akan menggunakan algoritma HS256 (HMAC-SHA256), dengan menggunakan variabel pribadi yang dibuat dalam kebijakan AssignMessage sebagai kunci secret.

  6. Klik Save.

Klik Periksa progres saya untuk memverifikasi tujuan. Menambahkan kebijakan untuk memverifikasi token

Tugas 3. Menambahkan kebijakan untuk membuat token

Endpoint proxy terpisah juga akan ditambahkan ke proxy API untuk memungkinkan pembuatan token JWT.

Menambahkan endpoint proxy baru untuk operasi token

Dalam lingkungan produksi, proxy terpisah biasanya dibuat untuk membuat token. Untuk lab ini, Anda akan membuat alur pembuatan token di endpoint proxy terpisah dalam proxy API yang sama.

  1. Di menu Navigator untuk proxy, pada baris Proxy endpoints, klik tombol +.

    Catatan: Jangan klik tombol "+" di samping "default".

    Tindakan ini akan membuat endpoint proxy baru yang akan digunakan saat membuat JWT baru.

  2. Untuk Name, tentukan token, lalu klik Add.

    Endpoint proxy baru bernama token akan ditampilkan di panel Code.

  3. Ubah seluruh konfigurasi alur token dari:

    <ProxyEndpoint name="token"> . . . </ProxyEndpoint>

    menjadi:

    <ProxyEndpoint name="token"> <PreFlow name="PreFlow"> <Request/> <Response/> </PreFlow> <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <Flows/> <HTTPProxyConnection> <BasePath>/token</BasePath> </HTTPProxyConnection> <RouteRule name="noTarget"/> </ProxyEndpoint>
  4. Klik Save.

    Konfigurasi yang diperbarui ini menghasilkan 2 perubahan spesifik:

    • BasePath ditetapkan ke /token. Ini adalah jalur dasar yang akan digunakan saat membuat token.
    • RouteRule tidak lagi merujuk endpoint target. Proxy API membuat token tanpa memanggil layanan backend.

Membuat alur untuk menghasilkan token

  1. Di Flow untuk proxy, di bagian Proxy Endpoints: token, tepat di samping /token, klik +.

  2. Untuk alur kondisional baru, tentukan nilai berikut:

    Properti Nilai
    Flow Name generateToken
    Condition Type pilih Custom
  3. Untuk Condition, tentukan nilai ini:

    (proxy.pathsuffix MatchesPath "/") and (request.verb = "POST") and (request.formparam.grant_type = "client_credentials")

    Hanya permintaan token kredensial klien yang valid yang akan diizinkan.

  4. Klik Add.

Melampirkan kebijakan AssignMessage untuk mengambil nilai set properti

Kebijakan OAuthV2 yang akan membuat token juga memerlukan akses ke variabel private.secretkey.

  1. Di menu Navigator untuk proxy, di bagian Proxy endpoints, di bagian token, klik generateToken.

  2. Di panel Flow, klik tombol + di sebelah kanan di samping generateToken dalam alur permintaan.

  3. Untuk Select Policy, pilih Select Existing policy, lalu klik AM-GetSecret.

  4. Klik Add.

    Kebijakan AssignMessage yang sama dilampirkan ke PreFlow endpoint proxy token.

Menambahkan kebijakan OAuthV2 untuk membuat token

  1. Di menu Navigator untuk proxy, di bagian Proxy endpoints, di bagian token, klik generateToken.

  2. Di panel Flow, klik tombol + di sebelah kanan di samping generateToken dalam alur permintaan.

  3. Untuk Select Policy, pilih Create new policy, kemudian pilih OAuth v2.0 dari bagian Security, lalu tetapkan Display Name dan Name ke OA-GenerateToken.

  4. Klik Add, lalu klik OA-GenerateToken dari Policies.

    Konfigurasi kebijakan OAuthV2 ditampilkan di panel Code.

  5. Ubah konfigurasi kebijakan OAuthV2 menjadi:

    <OAuthV2 name="OA-GenerateToken"> <Operation>GenerateJWTAccessToken</Operation> <Algorithm>HS256</Algorithm> <SecretKey> <Value ref="private.secretkey"/> </SecretKey> <SupportedGrantTypes> <!-- pass client_id and client_secret via basic auth header --> <GrantType>client_credentials</GrantType> </SupportedGrantTypes> <!-- 1800000 ms = 1800 s = 30 min --> <ExpiresIn>1800000</ExpiresIn> <GenerateResponse enabled="true"/> <RFCCompliantRequestResponse>true</RFCCompliantRequestResponse> </OAuthV2>

    Konfigurasi ini akan memungkinkan pembuatan token OAuth JWT yang akan berakhir dalam 30 menit.

Melaporkan kesalahan untuk permintaan token yang tidak valid

  1. Di Flow untuk proxy, di bagian Proxy Endpoints: token, tepat di samping /token, klik +.

  2. Untuk alur kondisional baru, tentukan nilai berikut:

    Properti Nilai
    Flow Name invalidRequest
    Condition Type pilih Custom
    Condition DELETETHIS

    Kondisi akan dihapus setelah alur ditambahkan karena setiap permintaan generateToken yang tidak valid harus melalui alur ini.

  3. Klik Add.

  4. Dalam alur invalidRequest, hapus baris berikut:

    <Condition>DELETETHIS</Condition>
  5. Di menu Navigator untuk proxy, di bagian Proxy endpoints, di bagian token, klik invalidRequest.

  6. Di panel Flow, klik tombol + tepat di samping invalidRequest untuk alur permintaan.

  7. Pilih Create new policy, kemudian pilih Raise Fault dari bagian Mediation, lalu tetapkan Display Name dan Name ke RF-InvalidTokenRequest.

  8. Klik Add, lalu klik RF-InvalidTokenRequest dari Policies.

    Konfigurasi kebijakan RaiseFault ditampilkan di panel Code.

  9. Ubah konfigurasi kebijakan RaiseFault menjadi:

    <RaiseFault name="RF-InvalidTokenRequest"> <FaultResponse> <Set> <StatusCode>400</StatusCode> <ReasonPhrase>Bad Request</ReasonPhrase> <Payload contentType="application/json">{ "error":"Bad request: use POST /token" }</Payload> </Set> </FaultResponse> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </RaiseFault>

    Tindakan ini akan membuat respons 400 Bad Request jika permintaan tidak valid.

  10. Klik Save.

Klik Periksa progres saya untuk memverifikasi tujuan. Menambahkan kebijakan untuk membuat token

Tugas 4. Men-deploy proxy OAuth

Dalam tugas ini, Anda akan men-deploy proxy API dan mengonfirmasi bahwa akses memerlukan token OAuth.

Memastikan instance runtime tersedia

  1. Di Cloud Shell, tempel dan jalankan serangkaian perintah berikut:

    export INSTANCE_NAME=eval-instance; export ENV_NAME=eval; export PREV_INSTANCE_STATE=; echo "waiting for runtime instance ${INSTANCE_NAME} to be active"; while : ; do export INSTANCE_STATE=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${GOOGLE_CLOUD_PROJECT}/instances/${INSTANCE_NAME}" | jq "select(.state != null) | .state" --raw-output); [[ "${INSTANCE_STATE}" == "${PREV_INSTANCE_STATE}" ]] || (echo; echo "INSTANCE_STATE=${INSTANCE_STATE}"); export PREV_INSTANCE_STATE=${INSTANCE_STATE}; [[ "${INSTANCE_STATE}" != "ACTIVE" ]] || break; echo -n "."; sleep 5; done; echo; echo "instance created, waiting for environment ${ENV_NAME} to be attached to instance"; while : ; do export ATTACHMENT_DONE=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${GOOGLE_CLOUD_PROJECT}/instances/${INSTANCE_NAME}/attachments" | jq "select(.attachments != null) | .attachments[] | select(.environment == \"${ENV_NAME}\") | .environment" --join-output); [[ "${ATTACHMENT_DONE}" != "${ENV_NAME}" ]] || break; echo -n "."; sleep 5; done; echo "***ORG IS READY TO USE***";

    Rangkaian perintah ini menggunakan API Apigee untuk menentukan kapan instance runtime Apigee dibuat dan lingkungan eval dilampirkan.

  2. Tunggu hingga instance siap.

    Saat teks ***ORG IS READY TO USE*** ditampilkan, instance siap digunakan. Organisasi Apigee (org) mungkin telah dibuat sebelum Anda memulai lab, sehingga Anda tidak perlu menunggu hingga instance dibuat.

    Jika Anda sedang menunggu hingga organisasi siap, Anda dapat mempelajari OAuth, kebijakan SpikeArrest, penyamaran dan penyembunyian data, serta token buram dan JWT.

Men-deploy proxy API

  1. Buka Apigee di Konsol Cloud.

  2. Pada Navigation menu di sebelah kiri, pilih Proxy development > API Proxies, lalu klik bank-v1.

  3. Klik tab Develop.

  4. Klik Deploy, dan untuk Environment, pilih eval.

    Dialog akan meminta Anda mengonfirmasi deployment.

  5. Untuk Service Account, tentukan alamat email akun layanan:

    apigee-internal-access@{{{ project_0.project_id | PROJECT }}}.iam.gserviceaccount.com
  6. Klik Deploy dan Confirm.

  7. Klik tab Overview, lalu tunggu hingga status deployment eval menunjukkan bahwa proxy berhasil di-deploy.

Klik Periksa progres saya untuk memverifikasi tujuan. Men-deploy proxy API

Menguji proxy API

Lingkungan eval di organisasi Apigee dapat dipanggil menggunakan nama host eval.example.com. Entri DNS untuk nama host ini telah dibuat dalam project Anda, dan me-resolve alamat IP instance runtime Apigee. Entri DNS ini telah dibuat di zona pribadi, yang berarti hanya dapat dilihat di jaringan internal.

Cloud Shell tidak berada di jaringan internal, sehingga perintah Cloud Shell tidak dapat me-resolve entri DNS ini. Virtual machine (VM) dalam organisasi Anda dapat mengakses DNS zona pribadi. Virtual machine bernama apigeex-test-vm telah dibuat secara otomatis. Anda dapat menggunakan virtual machine ini untuk memanggil proxy API.

  1. Di Cloud Shell, buka koneksi SSH ke VM pengujian Anda:

    TEST_VM_ZONE=$(gcloud compute instances list --filter="name=('apigeex-test-vm')" --format "value(zone)") gcloud compute ssh apigeex-test-vm --zone=${TEST_VM_ZONE} --force-key-file-overwrite

    Jika diminta untuk memberikan otorisasi, klik Authorize.

  2. Untuk setiap pertanyaan yang diajukan di Cloud Shell, klik Enter atau Return untuk menentukan input default.

    Identitas yang Anda gunakan untuk login adalah pemilik project, sehingga SSH ke virtual machine ini diizinkan.

    Sesi Cloud Shell Anda kini berjalan di dalam VM.

  3. Panggil proxy API bank-v1 yang di-deploy di lingkungan eval:

    curl -i -k -X GET "https://eval.example.com/bank/v1/customers"

    Opsi -k memberi tahu curl untuk melewati verifikasi sertifikat TLS. Untuk lab ini, runtime Apigee menggunakan sertifikat yang ditandatangani sendiri, bukan sertifikat yang telah dibuat oleh certificate authority (CA) tepercaya.

    Catatan: Jangan gunakan opsi -k untuk melewati verifikasi sertifikat pada kasus penggunaan produksi.

    API ini mencoba mengambil daftar pelanggan. Sekarang, Anda akan melihat respons 401 Unauthorized yang mirip dengan ini:

    HTTP/2 401 content-type: application/json www-authenticate: Bearer realm="null",error="invalid_token",error_description="oauth.v2.InvalidAccessToken: Invalid access token" x-request-id: 99263881-d0f7-4495-b886-0253f28a2e05 content-length: 101 date: Tue, 11 Jan 2022 18:59:01 GMT via: 1.1 google {"fault":{"faultstring":"Invalid access token","detail":{"errorcode":"oauth.v2.InvalidAccessToken"}}}

    Respons ini menunjukkan bahwa proxy API telah memblokir akses ke layanan backend karena token akses tidak diberikan.

  4. Masukkan perintah exit untuk keluar dari sesi SSH dan kembali ke Cloud Shell.

Tugas 5. Menambahkan produk API, developer, dan aplikasi

Dalam tugas ini, Anda akan menambahkan produk API yang akan memberikan akses ke API Anda. Anda juga akan membuat developer, lalu aplikasi yang akan dikaitkan dengan produk API Anda.

Membuat produk API

  1. Buka Apigee di Konsol Cloud.

  2. Pada Navigation menu di sebelah kiri, pilih Distribution > API Products.

  3. Untuk membuat produk API baru, klik +Create.

  4. Di panel Product details, tentukan parameter berikut:

    Properti Nilai
    Name bank-readonly
    Display Name bank (read access)
    Environment pilih eval
    Access pilih Public

    Biarkan Automatically approve access requests dipilih.

  5. Di bagian Operations, klik +Add an Operation.

    Operasi digunakan untuk menentukan permintaan mana di proxy API tertentu yang diizinkan untuk aplikasi yang dikaitkan dengan produk API itu.

    Catatan: Pastikan tombol berada di bagian "Operations", bukan bagian "GraphQL Operations".
  6. Tentukan parameter berikut:

    Properti Nilai
    API Proxy pilih bank-v1 API proxy
    Path /**
    Methods pilih GET

    Ekspresi jalur /\*\* menunjukkan bahwa permintaan apa pun yang cocok dengan jalur dasar akan diizinkan.

    Di lingkungan produksi, Anda mungkin memilih untuk menambahkan setiap operasi yang diizinkan secara terpisah, alih-alih menggunakan ekspresi jalur karakter pengganti ini.

  7. Klik Save untuk menyimpan operasi.

  8. Untuk menyimpan produk API, di bagian atas halaman Products Detail, klik Save.

  9. Kembali ke halaman Distribution > API Products.

    Produk API tersebut akan tercantum.

Membuat developer aplikasi

Sebelum membuat aplikasi, Anda harus membuat developer aplikasi.

  1. Pada Navigation menu di sebelah kiri, klik Distribution > Developers.

  2. Untuk membuat developer aplikasi baru, klik +Create.

  3. Tentukan parameter berikut:

    Properti Nilai
    First Name Joe
    Last Name Developer
    Username joe
    Email joe@example.com
  4. Klik Add untuk membuat developer aplikasi.

Membuat aplikasi dengan akses bank-v1

  1. Pada Navigation menu di sebelah kiri, klik Distribution > Apps.

  2. Untuk membuat aplikasi baru, klik +Create.

  3. Di panel App details, tentukan parameter berikut:

    Properti Nilai
    Name readonly-app
    Developer pilih joe@example.com
  4. Di panel Credentials, klik Add credentials > Add products, pilih bank (read access) dari drop-down, lalu klik Add untuk menambahkannya.

  5. Klik Create di pojok kanan atas untuk membuat aplikasi.

    Key dan Secret kini dikonfigurasi untuk aplikasi.

  6. Klik ikon Show di samping Key dan Secret.

    Untuk API ini, token akses OAuth diperlukan. Kunci dan secret akan digunakan sebagai kredensial untuk aplikasi, sehingga aplikasi tersebut dapat membuat token akses OAuth.

Klik Periksa progres saya untuk memverifikasi tujuan. Menambahkan produk API dan membuat aplikasi

Menguji API

  1. Di Cloud Shell, buka koneksi SSH ke VM pengujian Anda:

    TEST_VM_ZONE=$(gcloud compute instances list --filter="name=('apigeex-test-vm')" --format "value(zone)") gcloud compute ssh apigeex-test-vm --zone=${TEST_VM_ZONE} --force-key-file-overwrite

    Jika diminta untuk memberikan otorisasi, klik Authorize.

    Sesi Cloud Shell Anda kini berjalan di dalam VM.

  2. Untuk mendapatkan secret dan kunci pengguna untuk aplikasi, jalankan perintah berikut:

    export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null); echo "PROJECT_ID=${PROJECT_ID}" export CONSUMER_KEY=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${PROJECT_ID}/developers/joe@example.com/apps/readonly-app" | jq ".credentials[0].consumerKey" --raw-output); echo "CONSUMER_KEY=${CONSUMER_KEY}" export CONSUMER_SECRET=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${PROJECT_ID}/developers/joe@example.com/apps/readonly-app" | jq ".credentials[0].consumerSecret" --raw-output); echo "CONSUMER_SECRET=${CONSUMER_SECRET}"

    Perintah pertama membaca konfigurasi gcloud untuk mendapatkan project saat ini. Perintah kedua dan ketiga mengambil secret dan kunci pengguna menggunakan API Apigee. Permintaan diizinkan karena Anda mengirim token akses yang memiliki izin pengguna yang login.

    Untuk jenis pemberian kredensial klien OAuth, aplikasi klien harus mengirimkan secret dan kunci pengguna di header Authorization untuk membuat token akses.

  3. Untuk membuat token akses JWT, jalankan perintah berikut:

    export TOKEN_RESPONSE=$(curl -k -u "${CONSUMER_KEY}:${CONSUMER_SECRET}" -X POST "https://eval.example.com/token" -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=client_credentials"); echo ${TOKEN_RESPONSE} export JWT_TOKEN=$(echo ${TOKEN_RESPONSE} | jq ".access_token" --raw-output); echo "JWT_TOKEN=${JWT_TOKEN}"

    Perintah pertama memanggil endpoint token, dan menyimpan respons. Token kemudian diekstrak dari respons JSON dan disimpan di JWT_TOKEN.

  4. Untuk menguji permintaan menggunakan token JWT, gunakan perintah berikut:

    curl -i -k -H "Authorization: Bearer ${JWT_TOKEN}" -X GET "https://eval.example.com/bank/v1/customers"

    Panggilan API sekarang akan menampilkan daftar pelanggan.

    Catatan: Jika Anda mendapatkan respons yang berbunyi "Your client does not have permission to the requested URL", pastikan audiens tersebut telah ditetapkan dengan benar di tugas 1.
  5. Masukkan perintah exit untuk keluar dari sesi SSH dan kembali ke Cloud Shell.

Tugas 6. Menambahkan pembatasan kapasitas

Dalam tugas ini, Anda akan menambahkan kebijakan SpikeArrest yang akan menggunakan konfigurasi kuota produk API untuk membatasi kapasitas panggilan ke API.

Kebijakan SpikeArrest melindungi API dan backend Anda dari lonjakan traffic dengan memungkinkan Anda menentukan laju traffic maksimum yang akan diizinkan. Kebijakan ini dapat digunakan untuk memastikan bahwa backend Anda tidak kewalahan menangani traffic yang tidak dapat ditanganinya.

Menambahkan kebijakan SpikeArrest untuk pembuatan token

Kebijakan SpikeArrest ini akan menentukan batas kapasitas keseluruhan untuk traffic panggilan ke API /token.

  1. Buka Apigee di Konsol Cloud.

  2. Pada Navigation menu di sebelah kiri, pilih Proxy development > API Proxies, lalu klik bank-v1.

  3. Klik tab Develop.

  4. Di menu Navigator untuk proxy, di bagian Proxy endpoints, di bagian token, klik PreFlow.

    Kebijakan SpikeArrest harus dijalankan sebelum kebijakan alur kondisional.

  5. Di panel Flow, klik tombol + tepat di samping PreFlow dari alur permintaan.

  6. Pilih Create new policy, kemudian pilih Spike Arrest dari bagian Traffic Management, lalu tetapkan Display Name dan Name ke SA-LimitTokenRate.

  7. Klik Add, lalu klik SA-LimitTokenRate di bagian Policies.

    Konfigurasi kebijakan SpikeArrest ditampilkan di panel Code.

  8. Ubah konfigurasi kebijakan SpikeArrest menjadi:

    <SpikeArrest name="SA-LimitTokenRate"> <Rate>5pm</Rate> <UseEffectiveCount>false</UseEffectiveCount> </SpikeArrest>

    Konfigurasi ini menentukan bahwa kapasitas permintaan maksimum yang diizinkan adalah 5 per menit. Semua traffic akan dibatasi oleh kebijakan SpikeArrest ini.

    Catatan: 5 permintaan per menit digunakan untuk memfasilitasi pengujian -- batas SpikeArrest di lab ini biasanya terlalu rendah untuk skenario dunia nyata.

    UseEffectiveCount yang ditetapkan ke false menentukan bahwa kebijakan SpikeArrest menggunakan algoritma Token Bucket. Traffic diperlancar dengan membagi kapasitas ke dalam interval yang lebih kecil. 5 permintaan per menit berarti 1 permintaan per seperlima menit, atau 1 permintaan setiap 12 detik. Jika permintaan kedua masuk ke Message Processor kurang dari 12 detik setelah permintaan sebelumnya, permintaan tersebut mungkin ditolak.

Menambahkan kebijakan SpikeArrest untuk permintaan API

Kebijakan SpikeArrest ini akan menentukan batas kapasitas untuk traffic panggilan ke API /bank/v1. Kapasitas tersebut akan diterapkan per aplikasi.

  1. Di menu Navigator untuk proxy, di bagian Proxy endpoints, di bagian default, klik PreFlow.

    Kebijakan SpikeArrest harus dijalankan di awal panggilan, tetapi harus dijalankan setelah kebijakan OAuthV2 VerifyJWTAccessToken untuk membatasi kapasitas berdasarkan aplikasi.

  2. Di panel Flow, klik tombol + tepat di samping PreFlow dari alur permintaan.

  3. Pilih Create new policy, kemudian pilih Spike Arrest dari bagian Traffic Management, lalu tetapkan Display Name dan Name ke SA-LimitRateByApp.

  4. Klik Add, lalu klik SA-LimitRateByApp di bagian Policies.

    Konfigurasi kebijakan SpikeArrest ditampilkan di panel Code.

  5. Ubah konfigurasi kebijakan SpikeArrest menjadi:

    <SpikeArrest name="SA-LimitRateByApp"> <Rate>5pm</Rate> <Identifier ref="client_id" /> <UseEffectiveCount>true</UseEffectiveCount> </SpikeArrest>

    Seperti kebijakan sebelumnya, konfigurasi ini menentukan bahwa kapasitas permintaan maksimum yang diizinkan adalah 5 per menit. Namun, kebijakan ini menentukan ID, yang mempertahankan kapasitas SpikeArrest secara terpisah untuk setiap client_id. Client ID diisi oleh kebijakan OA-VerifyToken, dan bersifat unik untuk setiap aplikasi developer.

    UseEffectiveCount yang ditetapkan ke true menentukan bahwa penghitungan kapasitas dipertahankan untuk semua traffic dalam region. Kebijakan ini mempertahankan penghitung permintaan yang diterima per periode, yang berdurasi satu menit saat menggunakan kapasitas permintaan per menit. Penghitungan kapasitas didasarkan pada jendela geser.

    Contoh jendela geser, dengan kapasitas 48 dan 5.

    Untuk contoh yang ditunjukkan di atas, asumsikan kita menggunakan kapasitas 50 permintaan per menit. Penghitung menggunakan periode satu menit, meskipun periode penghitung akan menjadi satu detik jika kapasitas ditentukan per detik. Asumsikan bahwa kita berada di detik ke-10 dalam menit saat ini, yang diwakili oleh tanda panah. Menit sebelumnya memiliki 48 permintaan, dan periode saat ini memiliki 5 permintaan sejauh ini.

    Untuk mengizinkan permintaan lain, kapasitas harus kurang dari 50 permintaan per menit. Kapasitas yang dihitung adalah:

    request_rate = (48 * (60-10)/60) + 6 = 46

    Karena hanya 10 detik dari 60 detik yang telah berlalu dalam periode saat ini, 50 detik lainnya dihitung menggunakan kapasitas periode sebelumnya. 5/6 dari 48 adalah 40. Jika permintaan diizinkan, jumlah untuk periode saat ini adalah 5 + 1, atau 6. Penghitungan kapasitas permintaan sebesar 46 menunjukkan bahwa permintaan diizinkan karena kapasitas permintaan kurang dari 50 permintaan per menit.

  6. Klik Save > Save as new revision.

  7. Klik Deploy, lalu pilih eval untuk Environment.

  8. Untuk Service Account, tentukan alamat email akun layanan:

apigee-internal-access@{{{ project_0.project_id | PROJECT }}}.iam.gserviceaccount.com
  1. Klik Deploy dan Confirm.
  2. Klik tab Overview, lalu tunggu hingga status deployment eval menunjukkan bahwa proxy berhasil di-deploy.

Klik Periksa progres saya untuk memverifikasi tujuan. Menambahkan kebijakan SpikeArrest

Menguji pembatasan kapasitas

  1. Di Cloud Shell, buka koneksi SSH ke VM pengujian Anda:

    TEST_VM_ZONE=$(gcloud compute instances list --filter="name=('apigeex-test-vm')" --format "value(zone)") gcloud compute ssh apigeex-test-vm --zone=${TEST_VM_ZONE} --force-key-file-overwrite

    Jika diminta untuk memberikan otorisasi, klik Authorize.

    Sesi Cloud Shell Anda kini berjalan di dalam VM.

  2. Untuk mendapatkan secret dan kunci pengguna untuk aplikasi, jalankan perintah berikut:

    export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null); echo "PROJECT_ID=${PROJECT_ID}" export CONSUMER_KEY=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${PROJECT_ID}/developers/joe@example.com/apps/readonly-app" | jq ".credentials[0].consumerKey" --raw-output); echo "CONSUMER_KEY=${CONSUMER_KEY}" export CONSUMER_SECRET=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${PROJECT_ID}/developers/joe@example.com/apps/readonly-app" | jq ".credentials[0].consumerSecret" --raw-output); echo "CONSUMER_SECRET=${CONSUMER_SECRET}"
  3. Buat beberapa token akses dengan menjalankan perintah berikut berulang kali:

    curl -i -k -u "${CONSUMER_KEY}:${CONSUMER_SECRET}" -X POST "https://eval.example.com/token" -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=client_credentials"

    Anda akan segera menerima respons 429 Too Many Requests, yang menunjukkan bahwa batas kapasitas telah terlampaui. Karena UseEffectiveCount ditetapkan ke false untuk kebijakan ini, traffic akan diperlancar menggunakan algoritma Token Bucket. Anda mungkin akan mendapatkan pelanggaran spike arrest sebelum permintaan ke-5.

  4. Untuk menyimpan token akses JWT, jalankan perintah berikut:

    export TOKEN_RESPONSE=$(curl -k -u "${CONSUMER_KEY}:${CONSUMER_SECRET}" -X POST "https://eval.example.com/token" -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=client_credentials"); echo ${TOKEN_RESPONSE} export JWT_TOKEN=$(echo ${TOKEN_RESPONSE} | jq ".access_token" --raw-output); echo "JWT_TOKEN=${JWT_TOKEN}"
  5. Untuk menguji kebijakan SpikeArrest untuk panggilan API, kirim perintah berikut berulang kali:

    curl -i -k -H "Authorization: Bearer ${JWT_TOKEN}" -X GET "https://eval.example.com/bank/v1/customers"

    UseEffectiveCount ditetapkan ke true, sehingga kebijakan ini menggunakan algoritma jendela geser. Anda akan dapat menerima 5 permintaan yang berhasil sebelum permintaan diblokir.

  6. Masukkan perintah exit untuk keluar dari sesi SSH dan kembali ke Cloud Shell.

Tugas 7. Penyamaran data

Dalam tugas ini, Anda akan membuat penyamaran data untuk menyembunyikan kolom tertentu dalam sesi Debug.

Memulai sesi debug

Debug adalah alat untuk memecahkan masalah dan memantau proxy API yang berjalan di Apigee. Dengan alat Debug, Anda dapat memeriksa detail setiap langkah selama panggilan API.

  1. Pada Navigation menu di sebelah kiri, pilih Proxy development > API Proxies, lalu klik bank-v1.

  2. Klik tab Debug.

  3. Di panel Start debug session, klik Start debug session. Untuk dropdown Environment, pilih lingkungan eval.

  4. Klik Start.

    Mungkin perlu waktu beberapa saat sebelum sesi debug mulai mencatat permintaan.

    Catatan: Jika Anda mendapatkan pesan error dalam kotak merah di dekat bagian atas layar, dengan deskripsi seperti "Error fetching debug transactions" atau "List debug session transaction error", sesi debug Anda mungkin masih berfungsi dengan benar.

    Anda akan membuat permintaan API, lalu memeriksa sesi debug.

Men-debug permintaan

  1. Di Cloud Shell, buka koneksi SSH ke VM pengujian Anda:

    TEST_VM_ZONE=$(gcloud compute instances list --filter="name=('apigeex-test-vm')" --format "value(zone)") gcloud compute ssh apigeex-test-vm --zone=${TEST_VM_ZONE} --force-key-file-overwrite

    Jika diminta untuk memberikan otorisasi, klik Authorize.

    Sesi Cloud Shell Anda kini berjalan di dalam VM.

  2. Untuk mendapatkan token aplikasi, jalankan perintah berikut:

    export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null); echo "PROJECT_ID=${PROJECT_ID}" export CONSUMER_KEY=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${PROJECT_ID}/developers/joe@example.com/apps/readonly-app" | jq ".credentials[0].consumerKey" --raw-output); echo "CONSUMER_KEY=${CONSUMER_KEY}" export CONSUMER_SECRET=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${PROJECT_ID}/developers/joe@example.com/apps/readonly-app" | jq ".credentials[0].consumerSecret" --raw-output); echo "CONSUMER_SECRET=${CONSUMER_SECRET}" export TOKEN_RESPONSE=$(curl -k -u "${CONSUMER_KEY}:${CONSUMER_SECRET}" -X POST "https://eval.example.com/token" -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=client_credentials"); echo ${TOKEN_RESPONSE} export JWT_TOKEN=$(echo ${TOKEN_RESPONSE} | jq ".access_token" --raw-output); echo "JWT_TOKEN=${JWT_TOKEN}"
  3. Buat permintaan ini ke API:

    curl -i -k -H "Authorization: Bearer ${JWT_TOKEN}" -X GET "https://eval.example.com/bank/v1/customers/abe@example.org/accounts"
  4. Kembali ke halaman UI Apigee.

    Halaman Debug akan menampilkan 2 permintaan: POST (membuat token) dan GET (mengambil akun untuk pengguna).

  5. Klik permintaan GET.

    Detail permintaan GET akan ditampilkan.

  6. Klik kebijakan pertama, yaitu kebijakan AM-GetSecret yang menyalin variabel propertyset.oauth.secret ke dalam variabel private.secretkey.

    Halaman UI Apigee, dengan ikon AssignMessage dan deskripsi Variables Read ditandai.

    Phase Details tidak menampilkan variabel pribadi karena variabel yang diawali dengan "private." disembunyikan dari sesi Debug. Namun, variabel set properti menyimpan data sensitif yang sama, dan sebaiknya sembunyikan data tersebut dari pengguna yang men-debug traffic.

  7. Klik respons dari backend, yang ditunjukkan oleh lingkaran di sebelah kiri ikon pabrik.

    Tombol backend yang ditandai dalam kategori Transaction Map, beserta teks isi yang ditandai dalam Response Content.

    Respons berisi akun untuk pengguna, termasuk saldo rekening.

Membuat penyamaran debug

  1. Buka tab baru di jendela browser yang sama, lalu buka referensi API Apigee.

    Referensi API Apigee memberikan detail untuk berbagai panggilan API yang dapat digunakan untuk mengelola Apigee, dan juga dapat digunakan untuk melakukan panggilan ke API Apigee. Halaman ini menampilkan panggilan API organization.environments.

  2. Scroll ke bagian bawah halaman, lalu klik updateDebugmask.

    Panggilan API ini akan memperbarui penyamaran debug untuk lingkungan.

  3. Di panel Try this API, untuk parameter permintaan name, gunakan perintah berikut:

    organizations/{{{ project_0.project_id | PROJECT }}}/environments/eval/debugmask
  4. Untuk isi permintaan, masukkan isi berikut:

    { "responseJSONPaths": [ "$[*].balance" ], "variables": [ "propertyset.oauth.secret" ] }

    Payload ini akan menyebabkan variabel propertyset.oauth.secret disamarkan, dan juga menyamarkan setiap kolom balance dalam array objek di payload respons.

  5. Klik Execute.

    Jika kotak pop-up meminta Anda memilih akun, pilih akun siswa.

  6. Klik Allow untuk mengizinkan halaman menggunakan kredensial siswa.

Menguji penyamaran debug

  1. Di UI Apigee, pada Navigation menu di sebelah kiri, pilih Proxy development > API Proxies, lalu klik bank-v1.

  2. Klik tab Debug.

  3. Di panel Start debug session, pada dropdown Environment, pilih eval.

  4. Klik Start.

  5. Di Cloud Shell, jika koneksi SSH telah ditutup, buka koneksi SSH ke VM pengujian Anda:

    TEST_VM_ZONE=$(gcloud compute instances list --filter="name=('apigeex-test-vm')" --format "value(zone)") gcloud compute ssh apigeex-test-vm --zone=${TEST_VM_ZONE} --force-key-file-overwrite
  6. Dapatkan token dan buat permintaan API lagi:

    export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null) export CONSUMER_KEY=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${PROJECT_ID}/developers/joe@example.com/apps/readonly-app" | jq ".credentials[0].consumerKey" --raw-output) export CONSUMER_SECRET=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${PROJECT_ID}/developers/joe@example.com/apps/readonly-app" | jq ".credentials[0].consumerSecret" --raw-output) export TOKEN_RESPONSE=$(curl -k -u "${CONSUMER_KEY}:${CONSUMER_SECRET}" -X POST "https://eval.example.com/token" -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=client_credentials") export JWT_TOKEN=$(echo ${TOKEN_RESPONSE} | jq ".access_token" --raw-output) curl -i -k -H "Authorization: Bearer ${JWT_TOKEN}" -X GET "https://eval.example.com/bank/v1/customers/abe@example.org/accounts"
  7. Kembali ke halaman Debug di UI Apigee, lalu klik permintaan GET.

  8. Klik kebijakan AM-GetSecret.

    Variabel propertyset.oauth.secret disamarkan.

    Variabel propertyset.oauth.secret dalam mode tersembunyi.

  9. Klik Proxy Response Flow Started untuk respons backend.

    Setiap kolom balance disamarkan.

    Kolom balance tersembunyi dalam teks isi.

Tugas 8. Penanganan error

Dalam tugas ini, Anda akan membuat alur kondisional default untuk membatasi panggilan ke resource backend tertentu, dan menulis ulang pesan error backend.

Menguji API

  1. Di Cloud Shell, jika koneksi SSH telah ditutup, buka koneksi SSH ke VM pengujian Anda:

    TEST_VM_ZONE=$(gcloud compute instances list --filter="name=('apigeex-test-vm')" --format "value(zone)") gcloud compute ssh apigeex-test-vm --zone=${TEST_VM_ZONE} --force-key-file-overwrite
  2. Masukkan Y untuk melanjutkan, lalu tekan ENTER dua kali untuk mengosongkan frasa sandi.

  3. Dapatkan token dan buat permintaan GET ke /users:

    export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null) export CONSUMER_KEY=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${PROJECT_ID}/developers/joe@example.com/apps/readonly-app" | jq ".credentials[0].consumerKey" --raw-output) export CONSUMER_SECRET=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${PROJECT_ID}/developers/joe@example.com/apps/readonly-app" | jq ".credentials[0].consumerSecret" --raw-output) export TOKEN_RESPONSE=$(curl -k -u "${CONSUMER_KEY}:${CONSUMER_SECRET}" -X POST "https://eval.example.com/token" -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=client_credentials") export JWT_TOKEN=$(echo ${TOKEN_RESPONSE} | jq ".access_token" --raw-output) curl -i -k -H "Authorization: Bearer ${JWT_TOKEN}" -X GET "https://eval.example.com/bank/v1/users"

    Layanan backend tidak mengenali permintaan GET /users, sehingga menampilkan respons 404 yang terlihat seperti ini:

    HTTP/2 404 x-powered-by: Express content-security-policy: default-src 'none' x-content-type-options: nosniff content-type: text/html; charset=utf-8 x-cloud-trace-context: 7e96528757cc5053ba4fc8853037b02d;o=1 date: Wed, 19 Jan 2022 01:49:53 GMT server: Google Frontend content-length: 144 x-request-id: 2d8c8002-3152-4fc2-a60b-1729dd5483d8 via: 1.1 google <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Error</title> </head> <body> <pre>Cannot GET /users</pre> </body> </html>

    Respons menampilkan payload HTML, yang tidak cocok dengan format payload RF-InvalidTokenRequest. Selain itu, respons backend dapat berisi data sensitif. Karena alasan ini, sebaiknya tulis ulang respons error dari layanan backend.

Menulis ulang pesan error 404 Not Found

Aturan kesalahan dapat digunakan untuk mendeteksi error dan menulis ulang pesan error.

Kebijakan RaiseFault akan digunakan untuk menetapkan respons baru.

  1. Buka Apigee di Konsol Cloud.

  2. Pada Navigation menu di sebelah kiri, pilih Proxy development > API Proxies, lalu klik bank-v1.

  3. Klik tab Develop.

  4. Di menu Navigator untuk proxy, di samping Policies, klik +.

  5. Pilih Raise Fault dari bagian Mediation, lalu tetapkan Display Name dan Name ke RF-404NotFound.

  6. Klik Create. Klik RF-404NotFound di bagian Policies.

  7. Ubah konfigurasi kebijakan RaiseFault menjadi:

    <RaiseFault name="RF-404NotFound"> <FaultResponse> <Remove> <Headers/> </Remove> <Set> <StatusCode>404</StatusCode> <ReasonPhrase>Not Found</ReasonPhrase> <Headers> <Header name="FaultName">{fault.name}</Header> </Headers> <Payload contentType="application/json">{ "error": "{request.verb} {proxy.pathsuffix} not found" }</Payload> </Set> </FaultResponse> <AssignTo createNew="true" type="response"/> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </RaiseFault>

    Bagian Remove terlebih dahulu menghapus semua header yang mungkin berasal dari layanan backend, lalu bagian Set membuat respons. Header FaultName telah ditambahkan untuk menampilkan nilai variabel fault.name saat kesalahan dilaporkan. Variabel fault.name menentukan nama kesalahan.

Membuat FaultRule

  1. Di menu Navigator untuk proxy, di bagian Target endpoints, klik default.

    Endpoint target default berisi panggilan target backend yang menampilkan respons 404. 404 dianggap sebagai kode kegagalan. Endpoint akan melaporkan kesalahan, dan FaultRules yang ditentukan di endpoint target dapat digunakan untuk menulis ulang respons API.

  2. Dalam konfigurasi TargetEndpoint, tepat di bawah tag TargetEndpoint, tambahkan bagian FaultRules berikut:

    <FaultRules> <FaultRule name="404"> <Step> <Name>RF-404NotFound</Name> </Step> <Condition>response.status.code == 404</Condition> </FaultRule> </FaultRules>

    Bagian awal TargetEndpoint sekarang akan terlihat seperti ini:

    <TargetEndpoint name="default"> <FaultRules> <FaultRule name="404"> <Step> <Name>RF-404NotFound</Name> </Step> <Condition>response.status.code == 404</Condition> </FaultRule> </FaultRules>
  3. Klik Save > Save as new revision.

  4. Klik Deploy, lalu pilih eval untuk Environment.

  5. Untuk Service Account, tentukan alamat email akun layanan:

    apigee-internal-access@{{{ project_0.project_id | PROJECT }}}.iam.gserviceaccount.com
  6. Klik Deploy, lalu Confirm.

  7. Klik tab Overview, lalu tunggu hingga status deployment eval menunjukkan bahwa proxy berhasil di-deploy.

Menguji kesalahan respons endpoint

  1. Di Cloud Shell, jika koneksi SSH telah ditutup, buka koneksi SSH ke VM pengujian Anda:

    TEST_VM_ZONE=$(gcloud compute instances list --filter="name=('apigeex-test-vm')" --format "value(zone)") gcloud compute ssh apigeex-test-vm --zone=${TEST_VM_ZONE} --force-key-file-overwrite
  2. Dapatkan token dan buat permintaan GET ke /users:

    export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null) export CONSUMER_KEY=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${PROJECT_ID}/developers/joe@example.com/apps/readonly-app" | jq ".credentials[0].consumerKey" --raw-output) export CONSUMER_SECRET=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${PROJECT_ID}/developers/joe@example.com/apps/readonly-app" | jq ".credentials[0].consumerSecret" --raw-output) export TOKEN_RESPONSE=$(curl -k -u "${CONSUMER_KEY}:${CONSUMER_SECRET}" -X POST "https://eval.example.com/token" -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=client_credentials") export JWT_TOKEN=$(echo ${TOKEN_RESPONSE} | jq ".access_token" --raw-output) curl -i -k -H "Authorization: Bearer ${JWT_TOKEN}" -X GET "https://eval.example.com/bank/v1/users"

    Respons telah ditulis ulang, dan sekarang terlihat seperti ini:

    HTTP/2 404 faultname: ErrorResponseCode content-type: application/json x-request-id: 8d9db301-b3c7-4957-816d-93e796306dfb content-length: 39 date: Tue, 18 Jan 2022 06:42:23 GMT via: 1.1 google { "error": "GET /users not found" }

    Respons kini menggunakan JSON. Perhatikan bahwa header faultname memiliki nilai ErrorResponseCode, yang merupakan nilai variabel fault.name yang ditentukan saat target menampilkan kode kegagalan. Segera setelah respons 404 muncul dari layanan backend, kesalahan dilaporkan dan aturan kesalahan endpoint target dievaluasi. Aturan kesalahan 404 kemudian menulis ulang respons.

Menambahkan alur kondisional 404

Daripada mengandalkan backend untuk menampilkan respons saat permintaan yang tidak terduga dikirim, alur kondisional baru dapat ditambahkan di akhir alur kondisional endpoint proxy untuk melaporkan kesalahan saat tidak ada alur kondisional lain yang cocok dengan kondisinya. Hal ini menjamin bahwa hanya operasi yang tercantum dalam alur kondisional yang akan diteruskan ke backend. Dengan pola ini, Anda dapat mengizinkan akses hanya ke sebagian kecil resource layanan backend.

  1. Di menu Navigator untuk proxy, buka Proxy Endpoint: default, lalu di bagian alur, klik + di samping /bank/v1.

  2. Untuk alur kondisional baru, tentukan nilai berikut:

    Properti Nilai
    Flow name 404NotFound
    Condition type pilih Custom
    Condition DELETETHIS
  3. Klik Add.

  4. Dalam alur 404NotFound, hapus baris berikut:

    <Condition>DELETETHIS</Condition>

    Jika semua kondisi alur bersyarat sebelumnya tidak cocok, alur 404NotFound akan berjalan.

  5. Di menu Navigator untuk proxy, di bagian Proxy endpoints, di bagian default, klik 404NotFound.

  6. Di panel Flow, klik tombol + tepat di samping alur permintaan 404NotFound.

  7. Untuk Select Policy, pilih Select existing policy, lalu klik RF-404NotFound.

  8. Klik Add.

  9. Klik Save > Save as new revision.

  10. Klik Deploy, lalu pilih eval untuk Environment.

  11. Untuk Service Account, tentukan alamat email akun layanan:

    apigee-internal-access@{{{ project_0.project_id | PROJECT }}}.iam.gserviceaccount.com
  12. Klik Deploy, lalu Confirm.

  13. Klik tab Overview, lalu tunggu hingga status deployment eval menunjukkan bahwa proxy berhasil di-deploy.

Klik Periksa progres saya untuk memverifikasi tujuan. Menambahkan penanganan error

Menguji alur kondisional 404

  1. Di Cloud Shell, jika koneksi SSH telah ditutup, buka koneksi SSH ke VM pengujian Anda:

    TEST_VM_ZONE=$(gcloud compute instances list --filter="name=('apigeex-test-vm')" --format "value(zone)") gcloud compute ssh apigeex-test-vm --zone=${TEST_VM_ZONE} --force-key-file-overwrite
  2. Dapatkan token dan buat permintaan GET ke /users:

    export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null) export CONSUMER_KEY=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${PROJECT_ID}/developers/joe@example.com/apps/readonly-app" | jq ".credentials[0].consumerKey" --raw-output) export CONSUMER_SECRET=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${PROJECT_ID}/developers/joe@example.com/apps/readonly-app" | jq ".credentials[0].consumerSecret" --raw-output) export TOKEN_RESPONSE=$(curl -k -u "${CONSUMER_KEY}:${CONSUMER_SECRET}" -X POST "https://eval.example.com/token" -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=client_credentials") export JWT_TOKEN=$(echo ${TOKEN_RESPONSE} | jq ".access_token" --raw-output) curl -i -k -H "Authorization: Bearer ${JWT_TOKEN}" -X GET "https://eval.example.com/bank/v1/users"

    Respons telah ditulis ulang, dan sekarang terlihat seperti ini:

    HTTP/2 404 faultname: RaiseFault content-type: application/json x-request-id: d6bbd48f-65bd-4551-9236-636fad03a609 content-length: 39 date: Tue, 18 Jan 2022 07:07:58 GMT via: 1.1 google alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 { "error": "GET /users not found" }

    Header faultname kini memiliki nilai RaiseFault, yang merupakan nilai fault.name yang digunakan saat kebijakan RaiseFault menyebabkan kesalahan dilaporkan. Kebijakan RaiseFault dalam alur kondisional 404NotFound menghasilkan respons.

Selamat!

Di lab ini, Anda telah mengamankan API dengan mewajibkan token OAuth JWT. Anda membatasi traffic dengan menambahkan kebijakan SpikeArrest. Anda menggunakan variabel pribadi dan penyamaran data untuk menyembunyikan data sensitif dalam sesi Debug. Anda juga menulis ulang pesan error backend dan menggunakan alur kondisional 404 untuk membatasi panggilan ke backend ke resource tertentu.

Langkah berikutnya/pelajari lebih lanjut

Manual terakhir diperbarui pada 6 Agustus 2025

Lab terakhir diuji pada 6 Agustus 2025

Hak cipta 2026 Google LLC. Semua hak dilindungi undang-undang. Google dan logo Google adalah merek dagang dari Google LLC. Semua nama perusahaan dan produk lain mungkin adalah merek dagang masing-masing perusahaan yang bersangkutan.

Sebelum memulai

  1. Lab membuat project dan resource Google Cloud untuk jangka waktu tertentu
  2. Lab memiliki batas waktu dan tidak memiliki fitur jeda. Jika lab diakhiri, Anda harus memulainya lagi dari awal.
  3. Di kiri atas layar, klik Start lab untuk memulai

Gunakan penjelajahan rahasia

  1. Salin Nama Pengguna dan Sandi yang diberikan untuk lab tersebut
  2. Klik Open console dalam mode pribadi

Login ke Konsol

  1. Login menggunakan kredensial lab Anda. Menggunakan kredensial lain mungkin menyebabkan error atau dikenai biaya.
  2. Setujui persyaratan, dan lewati halaman resource pemulihan
  3. Jangan klik End lab kecuali jika Anda sudah menyelesaikan lab atau ingin mengulanginya, karena tindakan ini akan menghapus pekerjaan Anda dan menghapus project

Konten ini tidak tersedia untuk saat ini

Kami akan memberi tahu Anda melalui email saat konten tersedia

Bagus!

Kami akan menghubungi Anda melalui email saat konten tersedia

Satu lab dalam satu waktu

Konfirmasi untuk mengakhiri semua lab yang ada dan memulai lab ini

Gunakan penjelajahan rahasia untuk menjalankan lab

Menggunakan jendela Samaran atau browser pribadi adalah cara terbaik untuk menjalankan lab ini. Langkah ini akan mencegah konflik antara akun pribadi Anda dan akun Siswa, yang dapat menyebabkan tagihan ekstra pada akun pribadi Anda.