Ada dua cara untuk mengaktifkan IAP untuk layanan Cloud Run Anda, langsung di layanan Cloud Run atau di layanan backend yang berada di depan layanan Cloud Run.
Sebaiknya Anda mengaktifkan IAP langsung di Cloud Run.
Hal ini melindungi endpoint run.app
dan jika Anda mengonfigurasi load balancer, endpoint load balancer juga akan dilindungi.
Jika Anda memerlukan pengelolaan akses terpusat, atau ingin merutekan traffic ke beberapa region, lanjutkan dengan prosedur berikut.
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 terhubung ke layanan backend global load balancer yang sama, ikuti petunjuk di halaman ini untuk mengonfigurasi IAP satu kali untuk layanan backend.
Batasan umum
Saat Anda mengaktifkan IAP di load balancer, IAP mengamankan traffic hanya melalui load balancer dan bukan dengan traffic yang mungkin mencapai layanan Cloud Run melalui URL
run.app
-nya. Untuk hanya mengizinkan traffic yang diizinkan 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 bagi resource Cloud Run di IAP, Anda memerlukan hal berikut:
- Project konsol Google Cloud dengan penagihan diaktifkan.
- Grup satu atau beberapa layanan Cloud Run, yang disalurkan oleh load balancer.
- Pelajari 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 Mendapatkan identitas pengguna.
IAP menggunakan klien OAuth yang dikelola Google untuk mengautentikasi pengguna. Hanya pengguna dalam organisasi yang dapat mengakses aplikasi yang mendukung IAP. Jika Anda ingin mengizinkan akses kepada pengguna di luar organisasi Anda, lihat Mengaktifkan IAP untuk aplikasi eksternal.
Mengaktifkan IAP dari layanan backend atau load balancer
Untuk mengaktifkan IAP dari IAP di balik layanan backend atau load balancer, gunakan petunjuk berikut.
Konsol
Klien OAuth yang dikelola Google tidak tersedia saat mengaktifkan IAP menggunakan konsol Google Cloud .
Jika belum mengonfigurasi layar izin OAuth project Anda, 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 APLIKASI, pilih kotak centang di samping layanan backend load balancer yang ingin Anda tambahi anggota.
- Di panel samping kanan, klik Tambahkan Principal.
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 - Akun ini juga dapat berupa akun Google Workspace, seperti user@google.com atau domain Workspace lainnya.
- Google Grup: admin@googlegroups.com
- Akun layanan: server@example.
- 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, di bagian APLIKASI, temukan layanan backend load balancer yang aksesnya ingin Anda batasi. Untuk mengaktifkan IAP bagi 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, IAP akan memerlukan kredensial login 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 memberi otorisasi IAP mengirim traffic ke layanan Cloud Run backend.
- Kepala Sekolah:
service-[PROJECT-NUMBER]@gcp-sa-iap.
- Peran: Cloud Run Invoker
Akun layanan IAP dibuat saat IAP diaktifkan. Jika akun layanan IAP tidak ada dalam daftar principal, Anda dapat membuatnya dengan menjalankan perintah gcloud berikut:
gcloud beta services identity create --service=iap.googleapis.com --project=PROJECT_ID
- Kepala Sekolah:
gcloud
- Jika Anda belum melakukannya di project, buat agen layanan IAP dengan menjalankan perintah berikut. Jika Anda sebelumnya telah membuat agen layanan, menjalankan perintah tidak akan menduplikasinya.
gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
- Berikan izin pemanggil 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.' \ --role='roles/run.invoker'
Aktifkan IAP dengan menjalankan perintah yang tercakup secara global atau regional, bergantung pada apakah layanan backend load balancer Anda bersifat global atau regional. Gunakan 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 akses ke resource yang diamankan IAP untuk mengetahui informasi selengkapnya.
Terraform
- Jika Anda belum melakukannya, buat agen layanan IAP di project dengan menjalankan perintah berikut. Jika Anda sebelumnya 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/run.invoker" members = [ "serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.iam.", ] }
Aktifkan IAP dengan menjalankan perintah global atau regional, bergantung pada load balancer Anda. Gunakan ID dan rahasia klien 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, konfigurasi setelan ingress Anda untuk Membatasi ingress 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.
.Jika Anda telah memberikan peran Cloud Run Invoker ke akun layanan sebelumnya dan Anda 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 IAP lagi 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 Pratinjau IAP dengan 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 melakukan pemeriksaan izin ini.
Untuk menghindari perubahan yang merusak, beberapa project pelanggan yang bergantung pada perilaku ini selama Pratinjau dimasukkan 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.