1. Ringkasan
Di 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, baik di lingkungan lokal maupun 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 mencegat permintaan yang dikirim ke aplikasi Anda, mengautentikasi pengguna yang membuat permintaan menggunakan Layanan Identitas Google, dan hanya mengizinkan permintaan tersebut jika berasal dari pengguna yang diberi otorisasi untuk mengakses aplikasi. Selain itu, sistem ini dapat mengubah header permintaan untuk menyertakan informasi tentang pengguna terautentikasi.
Yang akan Anda pelajari
- Cara mengonfigurasi Grup Endpoint Jaringan Serverless (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
peduli tentang apa itu. Di sebagian besar codelab, Anda harus mereferensikan Project ID (biasanya diidentifikasi sebagai
PROJECT_ID
). Jika Anda tidak menyukai ID yang dihasilkan, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri dan lihat 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. Untuk 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 IAP dan Cloud Resource Manager API
gcloud services enable \
iap.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudidentity.googleapis.com \
compute.googleapis.com
- Clone repositori aplikasi sampel dan buka direktorinya
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 Serverless (NEG)
Anda akan membuat Grup Endpoint Jaringan Serverless( NEG Serverless) untuk layanan Cloud Run UI karyawan. NEG serverless memungkinkan Anda menggunakan aplikasi tanpa server 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].
Buat layanan backend dan tambahkan 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 sesi dan distribusi, health check, serta waktu tunggu. Setelan ini memberikan kontrol terperinci atas perilaku load balancer.
- 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 serverless 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 bahwa load balancer menggunakan backend NEG serverless untuk mengarahkan permintaan ke layanan Cloud Run serverless.
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 mengarahkan permintaan ke peta URL
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 yang 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
Membatasi traffic masuk agar hanya menerima permintaan internal dan permintaan yang masuk melalui Load Balancing HTTP(S).
- Mengupdate 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 terlarang.
5. Mengaktifkan Cloud Identity-Aware Proxy (IAP) di Load Balancer
IAP memungkinkan Anda 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 tersebut. 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
- Membuat 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]
- Simpan 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 Konsol Cloud, pilih project dari menu pilihan project drop-down
- Buka Layar izin OAuth di Konsol Cloud
- Klik BUAT 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 bahwa aplikasi tidak dapat diakses.
- Mengaktifkan IAP pada 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
- Verifikasi bahwa 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.
- Tutup browser
Beri pengguna akses ke portal karyawan
- Tambahkan binding kebijakan IAM untuk peran
'roles/iap.httpsResourceAccessor'
untuk pengguna yang dibuat di 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
Konfirmasi 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.
Sekarang Anda memiliki akses ke portal karyawan.
(Opsional) Deploy semua dependensi, dan deployment microservice ini mungkin memerlukan waktu sekitar 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:
Pelajari codelab Cymbal Eats lainnya:
- Memicu Cloud Workflows dengan Eventarc
- Memicu Pemrosesan Peristiwa dari Cloud Storage
- Terhubung ke Private CloudSQL dari Cloud Run
- Terhubung ke Database yang Terkelola Sepenuhnya dari Cloud Run
- Memicu Tugas Cloud Run dengan Cloud Scheduler
- Men-deploy dengan Aman ke Cloud Run
- Mengamankan Traffic Masuk Cloud Run
- Terhubung ke AlloyDB pribadi dari Autopilot GKE
Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource, atau simpan project dan hapus resource satu per satu.
Menghapus project
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.