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

94b06525c85408ad.pngS

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

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

  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. Mengaktifkan IAP dan Cloud Resource Manager API
gcloud services enable \
    iap.googleapis.com \
    cloudresourcemanager.googleapis.com \
    cloudidentity.googleapis.com \
    compute.googleapis.com
  1. Clone repositori aplikasi sampel dan buka direktorinya
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.pngS

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.

2abe669e53c27186.pngS

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

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

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

  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

Membuat proxy HTTPS target

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

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

26cb0b2a9162e7ab.pngS

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

8505fde7e0784bf1.pngS

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.

d9740402a74370a8.png

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.

  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. 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]
  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 pilihan project drop-down
  2. Buka Layar izin OAuth di Konsol Cloud

bcb460f3ab5241f4.png

  1. Klik BUAT EKSTERNAL di bagian Jenis Pengguna
  2. Pilih Pengujian sebagai status Publikasi

27fd7de6e7b7ef21.pngS

  1. Klik KONFIRMASI

6. Membatasi Akses dengan IAP

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

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

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

Beri pengguna akses ke portal karyawan

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

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

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:

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.