1. Ringkasan
Dalam lab ini, Anda akan men-deploy portal karyawan yang memungkinkan karyawan melihat, memperbarui, dan menghapus pesanan dari aplikasi Cymbal Eats. Anda akan menggunakan Identity Aware Proxy (IAP) untuk mengamankan akses portal tanpa menggunakan Virtual Private Network (VPN). IAP menyederhanakan penerapan model akses zero-trust dan memerlukan waktu lebih singkat daripada VPN untuk pekerja jarak jauh di lingkungan lokal dan cloud dengan satu titik kontrol untuk mengelola akses ke aplikasi Anda.
Apa yang dimaksud dengan Identity-Aware Proxy?
Identity-Aware Proxy (IAP) adalah layanan Google Cloud yang menangkap permintaan yang dikirim ke aplikasi Anda, mengautentikasi pengguna yang membuat permintaan tersebut menggunakan Google Identity Service, dan hanya mengizinkan permintaan tersebut jika berasal dari pengguna yang diberi otorisasi untuk mengakses aplikasi. Selain itu, layanan ini dapat mengubah header permintaan untuk menyertakan informasi tentang pengguna yang diautentikasi.
Yang akan Anda pelajari
- Cara mengonfigurasi Grup Endpoint Jaringan Tanpa Server (NEG)
- Cara mengonfigurasi load balancer
- Cara mengaktifkan IAP untuk membatasi akses
- Cara membatasi akses menggunakan IAP
2. Penyiapan dan Persyaratan
Penyiapan lingkungan mandiri
- Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.
- Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
- Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai
PROJECT_ID
). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri dan melihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan akan tetap ada selama durasi project. - Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus seluruh project. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
Penyiapan Lingkungan
- Membuat variabel lingkungan terkait project dan resource
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export REGION=us-east1
export ORDER_SERVICE_URL=order-service
export INVENTORY_SERVICE_URL=inventory-service
export MENU_SERVICE_URL=menu-service
- Mengaktifkan API layanan IAP dan Cloud Resource Manager
gcloud services enable \
iap.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudidentity.googleapis.com \
compute.googleapis.com
- Clone repositori aplikasi contoh dan buka direktori
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/employee-ui
- Deploy Portal karyawan menggunakan skrip penyiapan. Tunggu hingga skrip selesai sebelum melanjutkan ke langkah berikutnya
./setup.sh
Contoh output
... Done. Service [employee-ui-service] revision [employee-ui-service-00001-quw] has been deployed and is serving 100 percent of traffic. Service URL: https://employee-ui-service-gbtuuy5eda-uk.a.run.app
- Klik link URL Layanan
3. Mengonfigurasi Grup Endpoint Jaringan Tanpa Server (NEG)
Anda akan membuat Grup Endpoint Jaringan Serverless( NEG Serverless) untuk layanan Cloud Run UI karyawan. NEG tanpa server memungkinkan Anda menggunakan aplikasi serverless Google Cloud dengan Load Balancing HTTP(S) eksternal.
- Buat grup endpoint jaringan untuk layanan UI karyawan.
gcloud compute network-endpoint-groups create employee-ui-iap-neg \
--project $PROJECT_ID \
--region=$REGION \
--network-endpoint-type=serverless \
--cloud-run-service=employee-ui-service
Contoh Output
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/regions/us-east1/networkEndpointGroups/employee-ui-iap-neg]. Created network endpoint group [employee-ui-iap-neg].
Membuat layanan backend dan menambahkan NEG tanpa server
Layanan backend menentukan cara Cloud Load Balancing mendistribusikan traffic. Konfigurasi layanan backend berisi kumpulan nilai, seperti protokol yang digunakan untuk terhubung ke backend, berbagai setelan distribusi dan sesi, health check, dan waktu tunggu. Setelan ini memberikan kontrol mendetail atas perilaku load balancer Anda.
- Buat layanan backend
gcloud compute backend-services create employee-ui-iap-backend \
--global
Contoh Output
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend]. NAME: employee-ui-iap-backend BACKENDS: PROTOCOL: HTTP
- Menambahkan NEG tanpa server sebagai backend ke layanan backend
gcloud compute backend-services add-backend employee-ui-iap-backend \
--global \
--network-endpoint-group=employee-ui-iap-neg \
--network-endpoint-group-region=$REGION
Contoh Output
Updated [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend].
- Membuat peta URL untuk mengarahkan permintaan masuk ke layanan backend
gcloud compute url-maps create employee-ui-iap-url-map \
--default-service employee-ui-iap-backend
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/urlMaps/employee-ui-iap-url-map]. NAME: employee-ui-iap-url-map DEFAULT_SERVICE: backendServices/employee-ui-iap-backend
4. Mengonfigurasi Komponen Load Balancer
Diagram berikut menunjukkan load balancer menggunakan backend NEG tanpa server untuk mengarahkan permintaan ke layanan Cloud Run tanpa server.
Sediakan alamat IP statis
- Mencadangkan alamat IPv4 statis dan menyimpan domain
gcloud compute addresses create employee-ui-iap-ip \
--network-tier=PREMIUM \
--ip-version=IPV4 \
--global
Contoh Output
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/addresses/employee-ui-iap-ip].
- Menyimpan domain nip.io
export DOMAIN=$(gcloud compute addresses list --filter employee-ui-iap-ip --format='value(ADDRESS)').nip.io
Membuat resource sertifikat SSL yang dikelola Google
- Membuat resource sertifikat SSL yang dikelola Google
gcloud compute ssl-certificates create employee-ui-iap-cert \
--description=employee-ui-iap-cert \
--domains=$DOMAIN \
--global
Contoh Output
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/sslCertificates/employee-ui-iap-cert]. NAME: employee-ui-iap-cert TYPE: MANAGED CREATION_TIMESTAMP: 2022-04-18T06:39:37.474-07:00 EXPIRE_TIME: MANAGED_STATUS: PROVISIONING 34.102.234.98.nip.io: PROVISIONING
Membuat proxy HTTPS target
- Membuat proxy HTTPS target untuk merutekan permintaan ke peta URL Anda
gcloud compute target-https-proxies create employee-ui-iap-http-proxy \
--ssl-certificates employee-ui-iap-cert \
--url-map employee-ui-iap-url-map
Contoh Output
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/targetHttpsProxies/employee-ui-iap-http-proxy]. NAME: employee-ui-iap-http-proxy SSL_CERTIFICATES: employee-ui-iap-cert URL_MAP: employee-ui-iap-url-map CERTIFICATE_MAP:
Mengonfigurasi aturan penerusan
- Membuat aturan penerusan untuk mengarahkan permintaan masuk ke proxy
gcloud compute forwarding-rules create employee-ui-iap-forwarding-rule \
--load-balancing-scheme=EXTERNAL \
--network-tier=PREMIUM \
--address=employee-ui-iap-ip \
--global \
--ports=443 \
--target-https-proxy employee-ui-iap-http-proxy
Contoh output
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/forwardingRules/employee-ui-iap-forwarding-rule].
Membatasi traffic masuk ke layanan Cloud Run
Batasi traffic masuk agar hanya menerima permintaan internal dan permintaan yang masuk melalui Load Balancing HTTP(S).
- Memperbarui layanan agar hanya mengizinkan traffic masuk dari permintaan internal dan permintaan melalui Load Balancer HTTP(S)
gcloud run services update employee-ui-service \
--ingress internal-and-cloud-load-balancing \
--region $REGION
Contoh output
OK Deploying... Done. OK Creating Revision... OK Routing traffic... Done. Service [employee-ui-service] revision [employee-ui-service-00001-quw] has been deployed and is serving 100 percent of traffic. Service URL: https://employee-ui-service-gbtuuy5eda-uk.a.run.app
- Klik link URL Layanan
Akses ke URL layanan Cloud Run kini ditampilkan sebagai dilarang.
5. Mengaktifkan Cloud Identity-Aware Proxy (IAP) di Load Balancer
Dengan IAP, Anda dapat membuat lapisan otorisasi pusat untuk aplikasi yang diakses oleh HTTPS. Anda dapat menggunakan model kontrol akses tingkat aplikasi, bukan firewall tingkat jaringan.
Mengonfigurasi layar izin OAuth
Brand adalah layar izin OAuth yang berisi informasi branding untuk pengguna. Merek mungkin dibatasi untuk pengguna internal atau publik. Brand internal memungkinkan alur OAuth diakses oleh anggota organisasi Google Workspace yang sama dengan project. Brand publik membuat alur OAuth dapat diakses oleh siapa saja yang memiliki akses ke internet.
- Membuat merek
export USER_EMAIL=$(gcloud config list account --format "value(core.account)")
gcloud alpha iap oauth-brands create \
--application_title="Cymbal Eats" \
--support_email=$USER_EMAIL
Contoh Output
Created [462858740426]. applicationTitle: Cymbal Eats name: projects/462858740426/brands/462858740426 orgInternalOnly: true
Membuat Klien OAuth IAP
- Buat klien menggunakan nama merek dari langkah sebelumnya
gcloud alpha iap oauth-clients create \
projects/$PROJECT_ID/brands/$PROJECT_NUMBER \
--display_name=cymbal-eats-employee-ui
Contoh Output
Created [462858740426-tkpv8n03opijg7erd3s9ccued2pfllsd.apps.googleusercontent.com]. displayName: cymbal-eats-employee-ui name: projects/462858740426/brands/462858740426/identityAwareProxyClients/462858740426-tkpv8n03opijg7erd3s9ccued2pfllsd.apps.googleusercontent.com secret: [secret-removed]
- Menyimpan nama, ID, dan rahasia klien
export CLIENT_NAME=$(gcloud alpha iap oauth-clients list \
projects/$PROJECT_NUMBER/brands/$PROJECT_NUMBER --format='value(name)' \
--filter="displayName:cymbal-eats-employee-ui")
export CLIENT_ID=${CLIENT_NAME##*/}
export CLIENT_SECRET=$(gcloud alpha iap oauth-clients describe $CLIENT_NAME --format='value(secret)')
- Di Cloud Console, pilih project dari menu pilihan project drop-down
- Buka OAuth consent screen di Cloud Console
- Klik JADIKAN EKSTERNAL di bagian Jenis Pengguna
- Pilih Pengujian sebagai Status publikasi
- Klik KONFIRMASI
6. Membatasi Akses dengan IAP
Batasi akses ke layanan backend menggunakan IAP, lalu pastikan aplikasi tidak dapat diakses.
- Mengaktifkan IAP di layanan backend
gcloud iap web enable --resource-type=backend-services \
--oauth2-client-id=$CLIENT_ID \
--oauth2-client-secret=$CLIENT_SECRET \
--service=employee-ui-iap-backend
Memverifikasi konfigurasi IAP
- Pastikan sertifikat SSL AKTIF
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
- Mendapatkan URL layanan
echo https://$DOMAIN
Contoh output
https://34.102.234.98.nip.io
- Klik URL layanan untuk membuka portal karyawan.
- Login menggunakan kredensial lab Anda.
- Menutup browser
Memberikan akses pengguna ke portal karyawan
- Menambahkan binding kebijakan IAM untuk peran
'roles/iap.httpsResourceAccessor'
bagi pengguna yang dibuat pada langkah sebelumnya
gcloud iap web add-iam-policy-binding \
--resource-type=backend-services \
--service=employee-ui-iap-backend \
--member=user:$USER_EMAIL \
--role='roles/iap.httpsResourceAccessor'
Contoh output
Updated IAM policy for backend service [projects/462858740426/iap_web/compute/services/employee-ui-iap-backend].
Menguji akses layanan
Mengonfirmasi bahwa akses ke portal karyawan telah diberikan
- Mendapatkan URL layanan
echo https://$DOMAIN
Contoh output
https://34.102.234.98.nip.io
- Klik URL layanan untuk membuka portal karyawan.
Anda kini memiliki akses ke portal karyawan.
(Opsional) Men-deploy semua dependensi, men-deploy microservice ini mungkin memerlukan waktu ~20 menit.
unset ORDER_SERVICE_URL
unset INVENTORY_SERVICE_URL
unset MENU_SERVICE_URL
cd ~/cymbal-eats
./setup.sh
./get-site-urls.sh
7. Selamat!
Selamat, Anda telah menyelesaikan codelab!
Langkah berikutnya:
Jelajahi codelab Cymbal Eats lainnya:
- Memicu Alur Kerja Cloud dengan Eventarc
- Memicu Pemrosesan Peristiwa dari Cloud Storage
- Menghubungkan ke CloudSQL Pribadi dari Cloud Run
- Menghubungkan ke Database yang Dikelola Sepenuhnya dari Cloud Run
- Memicu Tugas Cloud Run dengan Cloud Scheduler
- Men-deploy dengan Aman ke Cloud Run
- Mengamankan Traffic Masuk Cloud Run
- Menghubungkan ke AlloyDB pribadi dari GKE Autopilot
Pembersihan
Agar tidak dikenai biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus project
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.