Mengonfigurasi IAP dengan Workforce Identity Federation

Halaman ini menunjukkan cara mengonfigurasi Identity-Aware Proxy (IAP) untuk menggunakan Workforce Identity Federation.

Saat mengonfigurasi Workforce Identity Federation dengan IAP, Anda dapat menggunakan penyedia identitas eksternal (IdP) untuk mengautentikasi dan memberi otorisasi kepada tenaga kerja—sekelompok pengguna, seperti karyawan, partner, dan kontraktor—menggunakan Identity and Access Management (IAM), sehingga pengguna dapat mengakses layanan yang di-deploy di Google Cloud atau lokaldengan aman.

Dengan mengonfigurasi IAP dengan Workforce Identity Federation, Anda dapat melakukan hal berikut terkait aplikasi yang diamankan IAP:

  • Mengalihkan pengguna akhir ke IdP eksternal, seperti Okta, untuk login.
  • Konfigurasikan sesi login antara 15 menit dan 12 jam.
  • Hanya izinkan pengguna akhir atau kumpulan pengguna akhir tertentu di IdP untuk mengakses aplikasi Anda.
  • Tentukan konteks yang memungkinkan pengguna akhir mengakses aplikasi. Misalnya, hanya izinkan akses selama waktu tertentu dalam sehari.
Anda dapat menggunakan IAP dengan Workforce Identity Federation di semua resource dan load balancer yang ada yang didukung IAP.

Mengonfigurasi IAP dengan Workforce Identity Federation untuk aplikasi

Mengonfigurasi IAP dengan Workforce Identity Federation terdiri dari tugas utama berikut:

  1. Menyiapkan workforce pool dan penyedia.
  2. Buat client ID dan rahasia OAuth.
  3. Aktifkan IAP dan konfigurasikan untuk menggunakan Workforce Identity Federation.

Menyiapkan workforce pool dan penyedia

Untuk menyiapkan workforce pool dan penyedia, ikuti petunjuk untuk salah satu penyedia berikut:

Saat menetapkan durasi sesi, lihat Mengelola sesi IAP dengan Workforce Identity Federation.

Jika ingin memetakan alamat email dari IdP pihak ketiga ke Google Cloud, Anda harus menambahkan pemetaan atribut di penyedia workforce pool untuk google.email. Contoh: google.email=assertion.email.

Membuat client ID dan rahasia OAuth

Penting: Client ID dan rahasia OAuth yang Anda buat pada langkah-langkah berikut dibuat untuk infrastruktur Workforce Identity Federation. ID dan rahasia ini berbeda dengan client ID dan rahasia klien yang diperlukan saat menggunakan konfigurasi OAuth kustom untuk mengaktifkan IAP dengan Google Identity.
  1. Ikuti petunjuk untuk membuat client ID dan rahasia OAuth di bagian project dalam organisasi yang sama dengan workforce pool yang akan Anda gunakan untuk konfigurasi ini. Project ini tidak harus sama dengan project tempat resource yang diamankan IAP berada. Saat membuat client ID dan rahasia OAuth, lakukan hal berikut:

    1. Gunakan placeholder untuk URI pengalihan saat membuat client ID. Setelah membuat client ID, jalankan describe klien OAuth untuk mendapatkan clientID yang dihasilkan.

    2. Setelah Anda memiliki clientID, jalankan update klien OAuth untuk memperbarui allowed-redirect-uris menjadi berikut: https://iap.googleapis.com/v1/oauth/clientIds/$CLIENT_ID:handleRedirect.

      Dengan CLIENT_ID adalah clientID yang diambil pada langkah sebelumnya.

    3. Setelah Anda membuat rahasia klien, jalankan describe kredensial klien OAuth untuk mendapatkan clientSecret yang dihasilkan.

    Simpan clientId dan clientSecret karena Anda akan membutuhkannya pada langkah berikutnya.

Mengaktifkan IAP untuk menggunakan Workforce Identity Federation

Untuk mengaktifkan IAP dengan Workforce Identity Federation, selesaikan langkah-langkah berikut.

Mengaktifkan IAP

Aktifkan IAP pada resource.

console

  1. Di konsol Google Cloud , buka halaman IAP.
    Buka halaman IAP
  2. Pilih project. Project harus berada di organisasi yang sama dengan workforce pool yang Anda buat sebelumnya. Project ini tidak harus berupa project tempat Anda membuat client ID dan rahasia OAuth.
  3. Klik tab Applications, lalu temukan aplikasi yang ingin Anda batasi aksesnya menggunakan IAP.
  4. Di kolom IAP, alihkan tombol ke On.

gcloud

Untuk menggunakan gcloud CLI guna mengaktifkan IAP, ikuti prosedur untuk layanan yang berlaku:

API

  1. Buat file settings.json.

    cat << EOF > settings.json
    {
    "iap":
      {
        "enabled":true,
     }
    }
    EOF
    
  2. Mengaktifkan IAP di App Engine.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d @settings.json \
    "https://appengine.googleapis.com/v1/apps/PROJECT_ID?updateMask=iap.enabled"
    

    Untuk mengaktifkan IAP di Compute Engine, gunakan URL berikut: https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/REGION/backendServices/BACKEND_SERVICE_NAME?updateMask=iap.enabled.

Memperbarui setelan IAP

Untuk mengonfigurasi IAP agar menggunakan Workforce Identity Federation, Anda harus mengonfigurasi setelan berikut:

  • WorkforceIdentitySettings: Client ID dan rahasia OAuth yang dibuat sebelumnya.
  • IdentitySources: Sumber identitas.

Untuk mengetahui informasi selengkapnya, lihat IAP API.

gcloud

  1. Dengan menggunakan contoh berikut sebagai referensi, buat file iap_settings.yaml.

    CLIENT_ID=clientId
    CLIENT_SECRET=clientSecret
    WORKFORCE_POOL_NAME=locations/global/workforcePools/test-pool
    cat <<EOF > iap_settings.yaml
    access_settings:
      identity_sources: ["WORKFORCE_IDENTITY_FEDERATION"]
      workforce_identity_settings:
        workforce_pools: ["$WORKFORCE_POOL_NAME"]
        oauth2:
          client_id: "$CLIENT_ID"
          client_secret: "$CLIENT_SECRET"
    EOF
    
  2. Jalankan perintah berikut untuk mengupdate setelan IAP untuk resource Anda.

    gcloud iap settings set iap_settings.yaml --project=PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE
    

    Ganti kode berikut:

    • PROJECT: Project ID.
    • RESOURCE_TYPE: Jenis resource IAP. Jenis resource harus berupa cloud-run (Pratinjau), app-engine, iap_web, compute, organization, atau folder. Untuk jenis resource cloud-run, gunakan flag --region untuk menunjukkan region tempat layanan Cloud Run Anda di-deploy.
    • SERVICE: Nama layanan. Ini bersifat opsional untuk app-engine dan compute.

    Untuk mengetahui detail tentang perintah ini, lihat gcloud iap settings set.

API

  1. Dengan menggunakan contoh berikut sebagai referensi, buat file setelan iap_settings.json.

    CLIENT_ID=clientId
    CLIENT_SECRET=clientSecret
    WORKFORCE_POOL_NAME=locations/global/workforcePools/test-pool
    cat <<EOF > iap_settings.json
    {
       "access_settings": {
         "identity_sources": ["WORKFORCE_IDENTITY_FEDERATION"],
         "workforce_identity_settings": {
           "workforce_pools": ["$WORKFORCE_POOL_NAME"],
           "oauth2": {
             "client_id": "$CLIENT_ID",
             "client_secret": "$CLIENT_SECRET",
           }
        }
      }
    }
    EOF
    
  2. Gunakan gcloud CLI untuk mendapatkan nama resource, lalu salin RESOURCE_NAME dari output karena Anda akan membutuhkannya di langkah berikutnya.

    gcloud iap settings get \
        --project=PROJECT \
        --resource-type=RESOURCE_TYPE \
        --service=SERVICE
    

    Ganti kode berikut:

    • PROJECT: Project ID.
    • RESOURCE_TYPE: Jenis resource IAP. Jenis resource harus berupa appengine, iap_web, compute, organization, folder, atau cloud_run-$REGION (Pratinjau), dengan $REGION adalah region tempat layanan Cloud Run Anda di-deploy.
    • SERVICE: Nama layanan. Ini bersifat opsional untuk app-engine dan compute.
  3. Ganti RESOURCE_NAME dalam perintah berikut dengan RESOURCE_NAME dari langkah sebelumnya.

    curl -X PATCH \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -d @iap_settings.json \
    "https://iap.googleapis.com/v1/RESOURCE_NAME:iapSettings?updateMask=iapSettings.accessSettings.identitySources,iapSettings.accessSettings.workforceIdentitySettings.workforcePools,iapSettings.accessSettings.workforceIdentitySettings.oauth2.clientId,iapSettings.accessSettings.workforceIdentitySettings.oauth2.clientSecret"
    

Memberikan akses ke resource yang diamankan IAP

Untuk mengakses resource yang diamankan IAP, pengguna akhir harus memiliki peran IAP-Secured Web App User pada resource. Anda dapat memberikan peran IAP-Secured aplikasi web User kepada satu entitas (principal) atau sekumpulan pengguna (principal set, yang dipetakan ke grup, atribut tertentu, atau seluruh kumpulan pengguna).

Akses tidak terbatas ke resource yang diamankan IAP tidak didukung.

console

  1. Di konsol Google Cloud , buka halaman IAP.
    Buka halaman IAP
  2. Pilih resource yang ingin Anda amankan dengan IAP.
  3. Klik Add Principal, lalu tambahkan ID akun utama grup atau individu yang ingin Anda beri peran IAM untuk resource tersebut.
  4. Di Assign roles, pilih IAP-Secured Web App User.
  5. Klik Tambahkan.

gcloud

Jalankan perintah berikut.

gcloud iap web add-iam-policy-binding \
    --member=PRINCIPAL_IDENTIFIER \
    --role='roles/iap.httpsResourceAccessor' \
    --project=PROJECT_ID \
    --resource-type=RESOURCE_TYPE \
    --service=SERVICE \
    --condition=CONDITION

Ganti kode berikut:

  • PRINCIPAL_IDENTIFIER: ID akun utama.
  • PROJECT_ID: Project ID.
  • RESOURCE_TYPE: Jenis resource IAP, yang dapat berupa app-engine atau backend-services.
  • SERVICE: (Opsional) Nama layanan.
  • CONDITION: (Opsional) IAM Conditions. Berikut adalah contoh kondisi yang dikonfigurasi dengan tingkat akses:
expression="accessPolicies/12345678/accessLevels/iap_test_access_level" in request.auth.access_levels,title=iap-test-access-level,description=only access on weekdays

API

Metode ini tidak direkomendasikan karena menyentuh seluruh kebijakan IAM resource. Error dapat menghapus kebijakan dari resource.

  1. Dapatkan binding kebijakan IAM yang ada.

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Accept: application/json" \
      -H "Content-Type: application/json" \
      -d {} \
    "https://iap.googleapis.com/v1/RESOURCE_NAME:getIamPolicy" -o iam_policy_bindings.json
    

    Ganti RESOURCE_NAME dengan RESOURCE_NAME yang Anda peroleh di langkah sebelumnya.

  2. Pada file iam_policy_bindings.json yang Anda peroleh dari langkah sebelumnya, hapus baris versi dan etag, lalu tambahkan binding yang ingin Anda tambahkan untuk ID akun utama. Untuk mengetahui informasi selengkapnya, lihat Memahami kebijakan izin.

    {
      "bindings": [
        {
          // existing bindings
        },
        {
          "role": "roles/iap.httpsResourceAccessor",
          "members": [
          "principal://iam.googleapis.com/locations/global/workforcePools/iap-test-pool/subject/iap-test-subject"
          ],
          "condition": {
            "expression": "\"accessPolicies/12345678/accessLevels/iap_test_access_level\" in request.auth.access_levels",
            "title": "iap-test-access-level",
            "description": "only access on weekdays"
          }
        }
      ]
    }
    
  3. Perbarui binding kebijakan IAM.

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Accept: application/json" \
      -H "Content-Type: application/json" \
      -d "{"policy":$(cat iam_policy_bindings.json)}" \
    "https://iap.googleapis.com/v1/RESOURCE_NAME:setIamPolicy"
    

    Ganti RESOURCE_NAME dengan RESOURCE_NAME yang Anda peroleh di langkah sebelumnya.

Lihat GetIamPolicy dan SetIamPolicy untuk mengetahui informasi selengkapnya.

(Opsional) Menyiapkan akses kontekstual

Jika ingin, Anda dapat menyiapkan aturan akses kontekstual untuk otorisasi lanjutan.

Untuk menyiapkan tingkat akses, lihat Membuat dan menerapkan tingkat akses. Tingkat akses berdasarkan informasi perangkat tidak tersedia saat menggunakan Workforce Identity Federation. Anda masih dapat menggunakan tingkat akses berbasis konteks permintaan dengan kondisi pada alamat IP, serta waktu dan tanggal.

Autentikasi terprogram

IAP mendukung autentikasi JWT akun layanan untuk aplikasi yang dikonfigurasi dengan Workforce Identity Federation. Untuk mendapatkan petunjuk, lihat Melakukan autentikasi dengan JWT akun layanan.

Batasan saat menggunakan workforce pool

* Untuk setiap aplikasi yang mengaktifkan IAP, hanya satu workforce pool yang dapat dikonfigurasi, dan workforce pool hanya dapat berisi satu penyedia. * Workforce pool, client ID dan rahasia OAuth, serta aplikasi yang mendukung IAP harus berada dalam organisasi yang sama. * Tingkat akses untuk informasi terkait perangkat tidak didukung. * Hanya konfigurasi setelan IAP berikut yang didukung: * CorsSettings * CsmSettings * AccessDeniedPageSettings.accessDeniedPageUri * CookieDomain * Akses terprogram dengan Workforce Identity Federation hanya didukung untuk akun layanan Google.

Pemecahan masalah

Untuk informasi pemecahan masalah, lihat Pemecahan masalah dan pertanyaan umum (FAQ).