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 (IdP) eksternal untuk mengautentikasi dan memberi otorisasi kepada tenaga kerja—grup pengguna seperti karyawan, partner, dan kontraktor—menggunakan Identity and Access Management (IAM), sehingga pengguna dapat mengakses layanan yang di-deploy dengan aman di Google Cloud atau secara lokal.
Dengan mengonfigurasi IAP dengan Workforce Identity Federation, Anda dapat melakukan hal berikut terkait aplikasi yang diamankan IAP:
- Alihkan pengguna akhir ke IdP eksternal, seperti Okta, untuk login.
- Konfigurasi sesi login yang berdurasi antara 15 menit dan 12 jam.
- Hanya izinkan kumpulan pengguna akhir atau pengguna akhir tertentu di IdP untuk mengakses aplikasi Anda.
- Tentukan konteks yang dapat digunakan pengguna akhir untuk mengakses aplikasi. Misalnya, hanya izinkan akses selama waktu tertentu.
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:
- Menyiapkan kumpulan dan penyedia tenaga kerja.
- Buat client ID dan rahasia klien OAuth.
- Aktifkan IAP dan konfigurasikan untuk menggunakan Workforce Identity Federation.
Menyiapkan kumpulan dan penyedia tenaga kerja
Untuk menyiapkan kumpulan tenaga kerja dan penyedia, ikuti petunjuk di Workforce Identity Federation, dan saat menetapkan waktu durasi sesi, lihat Mengelola IAP dengan sesi Workforce Identity Federation.
Jika ingin memetakan alamat email dari IdP pihak ketiga ke Google Cloud,
Anda harus menambahkan pemetaan atribut di penyedia kumpulan tenaga kerja untuk google.email
.
Contoh: google.email=assertion.email
.
Membuat client ID dan rahasia klien OAuth
Ikuti petunjuk untuk membuat client ID dan rahasia klien OAuth pada project di organisasi yang sama dengan kumpulan tenaga kerja yang akan Anda gunakan untuk konfigurasi ini. Project ini tidak harus berupa project yang sama dengan resource yang diamankan IAP. Saat membuat client ID dan rahasia klien OAuth, lakukan hal berikut:
Gunakan placeholder untuk URI pengalihan saat membuat client ID. Setelah membuat client ID, jalankan
describe
klien OAuth untuk mendapatkanclientID
yang dihasilkan.Jika Anda memiliki
clientID
, jalankanupdate
klien OAuth untuk mengupdateallowed-redirect-uris
menjadi:https://iap.googleapis.com/v1/oauth/clientIds/$CLIENT_ID:handleRedirect
.Dengan
CLIENT_ID
adalahclientID
yang diambil di langkah sebelumnya.Setelah Anda membuat rahasia klien, jalankan
describe
kredensial klien OAuth untuk mendapatkanclientSecret
yang dihasilkan.
Simpan
clientId
danclientSecret
karena Anda akan membutuhkannya di langkah berikutnya.
Mengaktifkan IAP untuk menggunakan Workforce Identity Federation
console
- Di konsol Google Cloud, buka halaman IAP.
Buka halaman IAP - Pilih project. Project harus berada dalam organisasi yang sama dengan kumpulan tenaga kerja yang Anda buat sebelumnya. Project tidak harus berupa project tempat Anda membuat client ID dan rahasia klien OAuth.
- Klik tab Applications, lalu cari aplikasi yang ingin Anda batasi aksesnya menggunakan IAP.
- Di kolom IAP, alihkan tombol ke Aktif.
gcloud
Untuk menggunakan gcloud CLI guna mengaktifkan IAP, ikuti prosedur untuk layanan yang berlaku:
API
Buat file
settings.json
.cat << EOF > settings.json { "iap": { "enabled":true, } } EOF
Aktifkan 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
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
Jalankan perintah berikut guna memperbarui 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
app-engine
,iap_web
,compute
,organization
, ataufolder
. - SERVICE: Nama layanan. Tindakan ini bersifat opsional untuk
app-engine
dancompute
.
Untuk mengetahui detail tentang perintah ini, lihat gcloud iap settings set.
API
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
Gunakan gcloud CLI untuk mendapatkan nama resource, lalu salin
RESOURCE_NAME
dari output karena Anda akan membutuhkannya pada langkah berikut.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
app-engine
,iap_web
,compute
,organization
, ataufolder
. - SERVICE: Nama layanan. Tindakan ini bersifat opsional untuk
app-engine
dancompute
.
Ganti
RESOURCE_NAME
dalam perintah berikut denganRESOURCE_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 oleh IAP
Untuk mengakses resource yang diamankan oleh IAP, pengguna akhir harus memiliki peran IAP-Secured Web App User pada resource tersebut. Anda dapat memberikan peran IAP-Secured Web App User ke satu pengguna (utama) atau sekumpulan pengguna (kumpulan utama, yang dipetakan ke grup, atribut tertentu, atau seluruh kumpulan pengguna).
Akses yang tidak dibatasi ke resource yang diamankan oleh IAP tidak didukung.
console
- Di konsol Google Cloud, buka halaman IAP.
Buka halaman IAP - Pilih resource yang ingin Anda amankan dengan IAP.
- Klik Tambahkan Akun Utama, lalu tambahkan ID utama dari grup atau individu yang ingin diberi peran IAM untuk resource tersebut.
- Di bagian Assign roles, pilih IAP-Secured Web App User.
- 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 yang berikut ini :
- PRINCIPAL_IDENTIFIER: ID utama.
- PROJECT_ID: Project ID.
- RESOURCE_TYPE: Jenis resource IAP, yang dapat
berupa
app-engine
ataubackend-services
. - SERVICE: Nama layanan. Hal ini bersifat opsional jika
resource-type
adalahapp-engine
. - CONDITION: (Opsional) Kondisi IAM. 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 in weekdays
API
Metode ini tidak direkomendasikan karena menyentuh seluruh kebijakan IAM resource. Error dapat menghapus kebijakan dari resource.
Mendapatkan 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.
Hapus versi dan baris etag ke file
iam_policy_bindings.json
yang Anda dapatkan dari langkah sebelumnya, lalu tambahkan binding yang ingin ditambahkan untuk ID utama. Untuk 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 in week days" } } ] }
Memperbarui 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
Atau, 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 alamat IP, serta waktu dan tanggal.
Batasan saat bekerja dengan kumpulan tenaga kerja
- IAP hanya mendukung satu kumpulan tenaga kerja, dan kumpulan tenaga kerja hanya dapat berisi satu penyedia.
- Kumpulan tenaga kerja, client ID dan rahasia klien 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:
- Akses terprogram dengan Workforce Identity Federation tidak didukung.