Mengaktifkan IAP untuk Cloud Run

Halaman ini menjelaskan cara mengamankan layanan Cloud Run dengan Identity-Aware Proxy (IAP).

Batasan umum

  • 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 membuat token ID, dan menggunakan token tersebut untuk melakukan autentikasi ke Cloud Run menggunakan header X-Serverless-Authorization.

  • 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.

Sebelum memulai

Untuk mengaktifkan IAP untuk Cloud Run, Anda memerlukan hal berikut:

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

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

  1. Buka halaman Identity-Aware Proxy.
  2. Pilih project yang ingin Anda amankan dengan IAP.
  3. Di bagian APPLICATIONS, pilih kotak centang di samping layanan backend load balancer yang ingin Anda tambahkan anggota.
  4. Di panel samping kanan, klik Tambahkan anggota.
  5. Di dialog Tambahkan anggota, 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
  6. Pilih Cloud IAP > IAP-Secured Web App User dari menu drop-down Roles.

  7. Klik Simpan.

Mengaktifkan IAP

  1. 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, dan clientauthconfig.clients.getWithSecret. Izin ini diberikan oleh peran, seperti peran Project Editor. Untuk mempelajari lebih lanjut, lihat Mengelola akses ke resource yang diamankan IAP.
  2. 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.
  3. 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

gcloud

  1. Jika Anda belum melakukannya sebelumnya, buat akun layanan dengan menjalankan perintah berikut. Jika sebelumnya Anda telah membuat akun layanan, menjalankan perintah ini tidak akan membuat akun layanan duplikat.
    gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
  2. 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'
    
  3. 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

    gcloud compute backend-services update BACKEND_SERVICE_NAME --region REGION_NAME --iap=enabled
    
    Ganti kode berikut:

    • 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 mengetahui informasi selengkapnya.

Mengonfigurasi Cloud Run untuk membatasi akses

Anda dapat mengonfigurasi layanan Cloud Run untuk hanya mengizinkan akses bagi klien internal dan load balancer eksternal, yang memblokir semua permintaan langsung dari internet publik.

Ikuti langkah-langkah di artikel Membatasi ingress untuk Cloud Run untuk mengonfigurasi setelan ingress layanan Cloud Run Anda ke Internal dan Cloud Load Balancing.

Pemecahan masalah terkait error

 The IAP service account is not provisioned 
Jika Anda melihat error ini, berarti Anda mencoba mengaktifkan IAP di layanan Cloud Run melalui gcloud CLI. Menyiapkan IAP melalui gcloud CLI mencakup langkah tambahan penyediaan akun layanan IAP di project Anda menggunakan perintah berikut: 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 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.

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 selanjutnya

Untuk membantu menyiapkan IAP untuk Cloud Run dengan Terraform, pelajari contoh kode Terraform.