Halaman ini menjelaskan cara mengamankan layanan Cloud Run dengan Identity-Aware Proxy (IAP).
Batasan umum
Layanan Cloud Run dengan HTTP/2 diaktifkan di belakang Load Balancer Aplikasi klasik yang diamankan dengan IAP akan mengalami loop pengalihan tanpa batas berdasarkan permintaan. Google merekomendasikan penggunaan Load Balancer Aplikasi eksternal global saat menggunakan layanan berkemampuan HTTP/2 yang diamankan dengan IAP. Lihat mode load balancer untuk mengetahui detail selengkapnya.
IAP tidak mengamankan domain yang disediakan Cloud Run untuk layanan yang di-deploy. Untuk memastikan bahwa hanya IAP yang memiliki izin untuk mengakses layanan, gunakan autentikasi IAM di layanan Cloud Run. Untuk mengizinkan IAP mengakses layanan Cloud Run, berikan peran akun layanan IAP
service-[PROJECT_NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
dengan peran Cloud Run Invoker. IAP menghasilkan token ID, dan menggunakan token tersebut untuk melakukan autentikasi ke Cloud Run menggunakan headerX-Serverless-Authorization
.IAP mengautentikasi ke Cloud Run menggunakan header
X-Serverless-Authorization
. Cloud Run meneruskan header ini ke layanan Anda setelah menghapus tanda tangannya. Jika layanan Anda dirancang untuk meneruskan permintaan ke layanan Cloud Run lain yang memerlukan autentikasi IAM, update layanan Anda untuk menghapus header ini terlebih dahulu.IAP tidak kompatibel dengan Cloud CDN.
Sebelum memulai
Guna mengaktifkan IAP untuk Cloud Run, Anda memerlukan hal berikut:
- Project konsol Google Cloud dengan penagihan diaktifkan.
- Grup satu atau beberapa layanan Cloud Run, yang disalurkan oleh load balancer.
- Pelajari cara Menyiapkan load balancer HTTPS eksternal.
- Pelajari cara Menyiapkan load balancer HTTPS internal.
- Nama domain yang terdaftar ke alamat load balancer Anda.
- Kode aplikasi untuk memverifikasi bahwa semua permintaan memiliki identitas.
- Pelajari cara Mendapatkan identitas pengguna.
IAP menggunakan klien OAuth yang dikelola Google untuk mengautentikasi pengguna. Hanya pengguna dalam organisasi yang dapat mengakses aplikasi berkemampuan IAP. Jika ingin mengizinkan akses untuk pengguna di luar organisasi, lihat Mengaktifkan IAP untuk aplikasi eksternal.
Mengaktifkan IAP
Konsol
Klien OAuth yang dikelola Google tidak tersedia saat mengaktifkan IAP menggunakan Konsol Google Cloud.
Jika belum mengonfigurasi layar izin OAuth project, Anda akan diminta untuk melakukannya. Untuk mengonfigurasi layar izin OAuth, lihat Menyiapkan layar izin OAuth.
Menyiapkan akses IAP
- Buka halaman Identity-Aware Proxy.
- Pilih project yang ingin Anda amankan dengan IAP.
- Pada APLIKASI, pilih kotak centang di samping layanan backend load balancer tempat Anda ingin menambahkan anggota.
- Di panel samping kanan, klik Tambahkan anggota.
Pada dialog Add members, masukkan akun grup atau individu yang harus memiliki peran IAP-secured Web App User untuk project. Jenis akun berikut dapat menjadi anggota:
- Akun Google: user@gmail.com - Akun ini juga dapat berupa akun Google Workspace, seperti user@google.com atau beberapa domain Workspace lainnya.
- Google Grup: admin@googlegroups.com
- Akun layanan: server@example.gserviceaccount.com
- Domain Google Workspace: example.com
Pilih Cloud IAP > IAP-secured Web App User dari menu drop-down Peran.
Klik Save.
Mengaktifkan IAP
- Di halaman IAP, di bagian APPLICATIONS, cari layanan backend load balancer yang ingin Anda batasi aksesnya. Guna mengaktifkan IAP untuk resource, klik tombol IAP.
Untuk mengaktifkan IAP:
- Minimal satu protokol dalam konfigurasi frontend load balancer harus berupa HTTPS. Pelajari cara menyiapkan load balancer.
- Anda memerlukan izin
compute.backendServices.update
,clientauthconfig.clients.create
, danclientauthconfig.clients.getWithSecret
. Izin ini diberikan berdasarkan peran, seperti peran Project Editor. Untuk mempelajari lebih lanjut, lihat Mengelola akses ke resource yang diamankan oleh IAP.
- Di jendela Turn on IAP yang muncul, klik Turn On untuk mengonfirmasi bahwa Anda ingin IAP mengamankan resource. Setelah Anda mengaktifkan IAP, kredensial login untuk semua koneksi ke load balancer Anda akan diperlukan. Hanya akun dengan peran IAP-Secured Web App User di project yang akan diberi akses.
Ikuti petunjuk di Kontrol akses dengan IAM untuk mengizinkan IAP mengirim traffic ke layanan Cloud Run backend.
- Kepala sekolah:
service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
- Peran: Cloud Run Invoker
- Kepala sekolah:
gcloud
- Jika Anda belum pernah melakukannya, buat akun layanan dengan menjalankan perintah berikut. Jika Anda sebelumnya membuat akun layanan, menjalankan perintah tidak akan membuat akun layanan duplikat.
gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
- Berikan izin invoker ke akun layanan yang dibuat pada langkah sebelumnya dengan menjalankan perintah berikut.
gcloud run services add-iam-policy-binding [SERVICE-NAME] \ --member='serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com' \ --role='roles/run.invoker'
Aktifkan IAP dengan menjalankan perintah dengan cakupan global atau regional, bergantung pada apakah layanan backend load balancer Anda bersifat global atau regional. Gunakan client ID dan rahasia klien OAuth dari langkah sebelumnya.
Cakupan global
gcloud compute backend-services update BACKEND_SERVICE_NAME --global --iap=enabled
Cakupan regional
Ganti kode berikut:gcloud compute backend-services update BACKEND_SERVICE_NAME --region REGION_NAME --iap=enabled
- BACKEND_SERVICE_NAME: nama layanan backend.
- REGION_NAME: region tempat Anda ingin mengaktifkan IAP.
Setelah mengaktifkan IAP, Anda dapat menggunakan Google Cloud CLI untuk memanipulasi kebijakan akses IAP menggunakan peran Identity and Access Management roles/iap.httpsResourceAccessor
. Lihat Mengelola peran dan izin untuk informasi selengkapnya.
Mengonfigurasi Cloud Run untuk membatasi akses
Anda dapat mengonfigurasi layanan Cloud Run agar hanya mengizinkan akses untuk klien internal dan load balancer eksternal, yang akan memblokir semua permintaan langsung dari internet publik.
Ikuti langkah-langkah di bagian Membatasi ingress untuk Cloud Run guna mengonfigurasi setelan ingress layanan Cloud Run Anda ke Internal dan Cloud Load Balancing.
Pemecahan masalah terkait error
The IAP service account is not provisioned
gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
Your client does not have permission to get URL from this server
IAP menggunakan izin akun layanan IAP untuk memanggil layanan Cloud Run. Pastikan Anda telah memberikan peran Cloud Run Invoker ke akun layanan berikut:
service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
.Jika Anda telah memberikan peran Cloud Run Invoker ke akun layanan sebelumnya dan Anda masih menghadapi masalah ini, deploy ulang layanan Cloud Run Anda.
Akun layanan IAP tidak memerlukan izin run.routes.invoke
Selama IAP dengan Pratinjau Cloud Run, Cloud Run tidak melakukan pemeriksaan izin run.routes.invoke
untuk panggilan dari IAP yang menggunakan peran Cloud Run Invoker. Dengan Ketersediaan Umum (GA), Cloud Run akan melakukan pemeriksaan izin ini.
Untuk menghindari perubahan yang dapat menyebabkan gangguan, beberapa project pelanggan yang bergantung pada perilaku ini selama Pratinjau dimasukkan ke daftar yang diizinkan sehingga izin tidak diperiksa. Hubungi dukungan Cloud Run untuk menghapus project tersebut dari daftar yang diizinkan khusus Pratinjau.
Langkah selanjutnya
Guna membantu menyiapkan IAP untuk Cloud Run dengan Terraform, pelajari contoh kode Terraform.