Mengamankan layanan backend
Selain mengautentikasi permintaan pengguna akhir ke gateway yang di-deploy, penting untuk mengamankan akses antara API Gateway dan layanan backend Anda. Anda dapat mencegah akses publik ke layanan terkelola backend Anda (Cloud Run, Cloud Functions, App Engine, dll.) dengan:
- Hanya mengizinkan akses terautentikasi ke layanan backend Anda.
- Memberikan izin yang diperlukan ke akun layanan yang terkait dengan konfigurasi API gateway Anda sehingga gateway Anda diotorisasi untuk memanggil backend.
Halaman ini menjelaskan langkah-langkah yang diperlukan untuk mengamankan layanan backend Anda serta menjelaskan peran dan izin yang diperlukan akun layanan gateway Anda untuk mengakses layanan tersebut.
Cloud Run
Semua layanan Cloud Run yang terkelola sepenuhnya di-deploy secara pribadi secara default, yang berarti layanan tersebut tidak dapat diakses tanpa memberikan kredensial autentikasi dalam permintaan.
Layanan Cloud Run dilindungi oleh IAM. Secara default, layanan Cloud Run dapat dipanggil oleh peran apa pun yang berisi izin run.routes.invoke
.
Anda dapat mengonfigurasi IAM di layanan Cloud Run (terkelola sepenuhnya) untuk memberikan akses kepada pengguna tambahan.
Untuk Gateway API, akses ke layanan Cloud Run diaktifkan dengan memberikan peran dan izin yang sesuai ke akun layanan gateway: peran roles/run.invoker
atau peran yang berisi izin run.routes.invoke
.
Anda dapat mengontrol akses gateway ke setiap layanan dengan IAM tingkat layanan atau ke semua layanan dalam sebuah project dengan IAM level project.
Jika permintaan gateway ke layanan Cloud Run Anda ditolak, pastikan akun layanan gateway diberi peran roles/run.invoker
, dan akun layanan gateway memiliki izin run.routes.invoke
. Pelajari peran dan izin invoker lebih lanjut dalam referensi IAM Cloud Run.
Cloud Functions
Untuk layanan backend Cloud Functions, Identity and Access Management (IAM) digunakan untuk mengontrol kemampuan untuk melihat, membuat, memperbarui, dan menghapus fungsi. IAM menerapkan autentikasi pemanggil ke layanan Cloud Functions, seperti Gateway API, dengan memberikan peran.
Pemberian peran dan izin dengan IAM memungkinkan kontrol atas dua kumpulan tindakan:
- Operasi developer: membuat, memperbarui, dan menghapus fungsi, serta mengelola akses ke fungsi.
- Pemanggilan fungsi: menyebabkan fungsi dieksekusi.
Memberikan kemampuan untuk memanggil fungsi berbeda untuk fungsi HTTP dan fungsi latar belakang.
- Fungsi HTTP memerlukan autentikasi secara default. Anda dapat mengonfigurasi IAM pada fungsi HTTP untuk menentukan apakah fungsi memungkinkan pemanggilan yang tidak diautentikasi.
- Fungsi latar belakang hanya dapat dipanggil oleh sumber peristiwa tempat fungsi tersebut berlangganan.
Untuk mengaktifkan Gateway API agar dapat memanggil layanan backend Cloud Functions, berikan peran roles/cloudfunctions.invoker
) ke akun layanan gateway, atau peran apa pun yang berisi izin cloudfunctions.functions.invoke
.
Anda dapat mengontrol akses gateway ke setiap fungsi dengan IAM tingkat layanan atau ke semua fungsi dalam sebuah project dengan IAM level project.
Jika permintaan gateway ke layanan Cloud Functions Anda ditolak, pastikan akun layanan gateway diberi peran roles/cloudfunctions.invoker
, dan akun layanan gateway memiliki izin cloudfunctions.functions.invoke
. Pelajari peran dan izin invoker lebih lanjut dalam referensi IAM Cloud Functions.
App Engine
Untuk mengamankan aplikasi App Engine, Anda harus menggunakan Identity Aware Proxy (IAP) untuk memastikan bahwa permintaan diautentikasi.
Ikuti langkah-langkah untuk Mengaktifkan IAP pada project tempat layanan backend App Engine Anda di-deploy. Mengaktifkan IAP akan memastikan bahwa akses ke aplikasi backend App Engine Anda sudah aman.
Untuk mengaktifkan Gateway API guna memanggil layanan backend App Engine, ikuti langkah-langkah di bagian Menyiapkan akses IAP untuk memberikan peran IAP-secured Web App User
kepada akun layanan yang terkait dengan gateway Anda. Selain itu, berikan peran yang berisi izin berikut kepada akun layanan:
appengine.applications.update
clientauthconfig.clients.create
clientauthconfig.clients.getWithSecret