Halaman ini menjelaskan cara mengamankan layanan Cloud Run dengan IAP dari layanan backend atau load balancer. Jika Anda menjalankan Cloud Run di beberapa region yang terpasang ke layanan backend global load balancer yang sama, ikuti petunjuk di halaman ini untuk mengonfigurasi IAP satu kali untuk layanan backend.
Jika Anda menjalankan Cloud Run di satu region, sebaiknya
Konfigurasikan IAP untuk Cloud Run
untuk mengaktifkan IAP dari Cloud Run. Dengan begitu, Anda dapat
mengamankan traffic dengan sekali klik dari semua jalur traffic masuk, termasuk URL
run.app
default dan load balancer.
Batasan umum
Saat Anda mengaktifkan IAP di load balancer, IAP hanya mengamankan traffic melalui load balancer, bukan dengan traffic yang mungkin menjangkau layanan Cloud Run melalui URL
run.app
-nya. Untuk hanya mengizinkan traffic yang diotorisasi IAP, lihat Mengonfigurasi Cloud Run untuk membatasi akses.IAP melakukan autentikasi 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, perbarui layanan Anda untuk menghapus header ini terlebih dahulu.IAP tidak kompatibel dengan Cloud CDN.
IAP meningkatkan latensi. Aktifkan IAP hanya untuk instance yang tidak sensitif terhadap latensi.
Sebelum memulai
Untuk mengaktifkan IAP untuk resource Cloud Run di IAP, Anda memerlukan hal berikut:
- Project konsol Google Cloud dengan penagihan diaktifkan.
- Grup satu atau beberapa layanan Cloud Run, yang ditayangkan oleh load balancer.
- Pelajari cara Menyiapkan load balancer HTTPS eksternal.
- Pelajari 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 yang mengaktifkan IAP. Jika Anda ingin mengizinkan akses kepada pengguna di luar organisasi, lihat Mengaktifkan IAP untuk aplikasi eksternal.
Mengaktifkan IAP dari layanan backend atau load balancer
Untuk mengaktifkan IAP dari IAP di belakang layanan backend atau load balancer, gunakan petunjuk berikut.
Konsol
Klien OAuth yang dikelola Google tidak tersedia saat mengaktifkan IAP menggunakan Google Cloud konsol.
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.
- Di bagian APPLICATIONS, pilih kotak centang di samping layanan backend load balancer yang ingin Anda tambahkan anggota.
- Di panel samping kanan, klik Tambahkan Utama.
Di dialog Add Principal, masukkan akun grup atau individu yang harus memiliki peran IAP-secured Web App User untuk project tersebut. Jenis akun berikut dapat menjadi anggota:
- Akun Google: user@gmail.com - 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.iam.gserviceaccount.com
- Domain Google Workspace: example.com
Pilih Cloud IAP > IAP-Secured Web App User dari menu drop-down Roles.
Klik Simpan.
Mengaktifkan IAP
- Di halaman IAP, pada bagian APPLICATIONS, temukan layanan backend load balancer yang aksesnya ingin Anda batasi. Untuk mengaktifkan IAP untuk resource, klik tombol IAP.
Untuk mengaktifkan IAP:
- Setidaknya 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 oleh peran, seperti peran Project Editor. Untuk mempelajari lebih lanjut, lihat Mengelola akses ke resource yang diamankan IAP.
- Di jendela Aktifkan IAP yang muncul, klik Aktifkan untuk mengonfirmasi bahwa Anda ingin IAP mengamankan resource Anda. Setelah Anda mengaktifkan IAP, kredensial login diperlukan untuk semua koneksi ke load balancer Anda. Hanya akun dengan peran IAP-Secured Web App User di project yang akan diberi akses.
Ikuti petunjuk di Kontrol akses dengan IAM untuk memberikan otorisasi kepada IAP untuk mengirim traffic ke layanan Cloud Run backend.
- Prinsipal:
service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
- Peran: Cloud Run Invoker
Akun layanan IAP dibuat saat IAP diaktifkan. Jika akun layanan IAP tidak ada dalam daftar akun utama, Anda dapat membuatnya dengan menjalankan perintah gcloud berikut:
gcloud beta services identity create --service=iap.googleapis.com --project=PROJECT_ID
- Prinsipal:
gcloud
- Jika Anda belum melakukannya sebelumnya dalam project, buat agen layanan IAP dengan menjalankan perintah berikut. Jika sebelumnya Anda telah membuat agen layanan, menjalankan perintah tidak akan menduplikasinya.
gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
- Berikan izin invoker ke akun layanan, yang dibuat di 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 cakupan global atau regional, bergantung pada apakah layanan backend load balancer Anda bersifat global atau regional. Gunakan client ID dan secret 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 akses ke resource yang diamankan IAP untuk mengetahui informasi selengkapnya.
terraform
- Jika Anda belum melakukannya sebelumnya, buat agen layanan IAP dalam project dengan menjalankan perintah berikut. Jika sebelumnya Anda telah membuat agen layanan, menjalankan perintah tidak akan menduplikasinya.
resource "google_project_service" "project" { project = "your-project-id" service = "iap.googleapis.com" }
- Berikan izin pemanggil ke agen layanan yang dibuat pada langkah sebelumnya dengan menjalankan perintah berikut.
resource "google_cloud_run_service_iam_binding" "binding" { location = google_cloud_run_v2_service.default.location service = google_cloud_run_v2_service.default.name role = "roles/invoker" members = [ "serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.gserviceaccount.com", ] }
Aktifkan IAP dengan menjalankan perintah global atau regional, bergantung pada load balancer Anda. Gunakan client ID dan secret OAuth dari langkah sebelumnya.
Cakupan global
resource "google_compute_backend_service" "default" { name = "tf-test-backend-service-external" protocol = "HTTPS" load_balancing_scheme = "EXTERNAL_MANAGED" iap { enabled = true oauth2_client_id = "abc" oauth2_client_secret = "xyz" } }
Cakupan regional
resource "google_compute_region_backend_service" "default" { name = "tf-test-backend-service-external" protocol = "HTTPS" load_balancing_scheme = "EXTERNAL_MANAGED" iap { enabled = true oauth2_client_id = "abc" oauth2_client_secret = "xyz" } }
Mengonfigurasi Cloud Run untuk membatasi akses
Untuk mencegah traffic dirutekan melalui URL run.app
default layanan Cloud Run, Nonaktifkan URL default.
Jika tidak, konfigurasikan setelan traffic masuk Anda ke Membatasi traffic masuk jaringan untuk Cloud Run.
Pemecahan masalah terkait error
Izin ditolak saat mengakses Cloud Run
Your client does not have permission to get URL from this server
IAP menggunakan izin akun layanan IAP untuk memanggil layanan Cloud Run Anda. 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 masih mengalami masalah ini, deploy ulang layanan Cloud Run Anda.
Kegagalan Agen Layanan menyebabkan error IAM yang ditetapkan
Mengaktifkan IAP di project baru untuk pertama kalinya dapat menyebabkan error berikut:
Setting IAM permissions failed
Hal ini karena Agen Layanan Cloud Run gagal. Untuk mengatasi masalah ini, aktifkan kembali IAP atau tetapkan kebijakan IAM secara manual.
Tidak dapat menyiapkan IAP melalui gcloud CLI
The IAP service account is not provisioned
Jika Anda melihat error ini, jalankan perintah berikut:
gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
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 merusak, beberapa project pelanggan yang bergantung pada perilaku ini selama Pratinjau ditempatkan ke dalam daftar yang diizinkan sehingga izin tidak diperiksa. Hubungi dukungan Cloud Run untuk menghapus project tersebut dari daftar yang diizinkan khusus Pratinjau.
Langkah berikutnya
Untuk membantu menyiapkan IAP untuk Cloud Run dengan Terraform, pelajari contoh kode Terraform.