Aplikasi Serverless yang Aman dengan Identity-Aware Proxy (IAP)

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 membutuhkan waktu lebih sedikit daripada VPN untuk pekerja jarak jauh di lingkungan lokal dan cloud dengan satu titik kontrol untuk mengelola akses ke aplikasi Anda.

94b06525c85408ad.png

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 (NEG) Serverless
  • Cara mengonfigurasi load balancer
  • Cara mengaktifkan IAP untuk membatasi akses
  • Cara membatasi akses menggunakan IAP

2. Penyiapan dan Persyaratan

Penyiapan lingkungan mandiri

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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 (biasanya 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.
  1. 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

  1. 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
  1. Aktifkan IAP dan Cloud Resource Manager Service API
gcloud services enable \
    iap.googleapis.com \
    cloudresourcemanager.googleapis.com \
    cloudidentity.googleapis.com \
    compute.googleapis.com
  1. Buat clone repositori aplikasi contoh dan buka direktori
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/employee-ui
  1. 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
  1. Klik link URL Layanan

86416f68c0b8152a.png

3. Mengonfigurasi Grup Endpoint Jaringan (NEG) Serverless

Anda akan membuat Grup Endpoint Jaringan Serverless( NEG Serverless) untuk layanan Cloud Run UI karyawan. NEG serverless memungkinkan Anda menggunakan aplikasi serverless Google Cloud dengan Load Balancing HTTP(S) eksternal.

2abe669e53c27186.png

  1. 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 serverless

Layanan backend menentukan cara Cloud Load Balancing mendistribusikan traffic. Konfigurasi layanan backend berisi serangkaian 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.

  1. Membuat 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
  1. Tambahkan 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].
  1. Buat 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 serverless untuk mengarahkan permintaan ke layanan Cloud Run serverless.

335f4674737a6514.png

Sediakan alamat IP statis

  1. 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].
  1. Simpan 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

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

Buat proxy HTTPS target

  1. Buat proxy HTTPS target untuk mengarahkan 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

  1. Buat 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

Membatasi traffic ingress agar hanya menerima permintaan internal dan permintaan yang masuk melalui Load Balancing HTTP(S).

26cb0b2a9162e7ab.png

  1. Perbarui 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
  1. Klik link URL Layanan

8505fde7e0784bf1.png

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.

d9740402a74370a8.png

Merek adalah layar izin OAuth yang berisi informasi branding untuk pengguna. Merek dapat dibatasi untuk pengguna internal atau publik. Merek 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.

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

  1. 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]
  1. 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)')
  1. Di Konsol Cloud, pilih project dari menu drop-down pemilihan project
  2. Buka layar izin OAuth di Konsol Cloud

bcb460f3ab5241f4.png

  1. Klik JADIKAN EKSTERNAL di bagian Jenis Pengguna
  2. Pilih Pengujian sebagai Status publikasi

27fd7de6e7b7ef21.png

  1. Klik KONFIRMASI

6. Membatasi Akses dengan IAP

Batasi akses ke layanan backend menggunakan IAP, lalu verifikasi bahwa aplikasi tidak dapat diakses.

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

  1. Pastikan sertifikat SSL AKTIF
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
  1. Mendapatkan URL layanan
echo https://$DOMAIN

Contoh output

https://34.102.234.98.nip.io
  1. Klik URL layanan untuk membuka portal karyawan.

352b600209c3fb33.png

  1. Login menggunakan kredensial lab Anda.

f7e0318388aa0739.png

  1. Tutup browser

Memberi pengguna akses ke portal karyawan

  1. Tambahkan 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

Konfirmasi bahwa akses ke portal karyawan telah diberikan

  1. Mendapatkan URL layanan
echo https://$DOMAIN

Contoh output

https://34.102.234.98.nip.io
  1. Klik URL layanan untuk membuka portal karyawan.

86416f68c0b8152a.png

Sekarang Anda seharusnya sudah memiliki akses ke portal karyawan.

(Opsional) Deploy semua dependensi, men-deploy microservice ini dapat 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:

Pembersihan

Agar tidak menimbulkan 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.