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

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.

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

  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 (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.
  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. Mengaktifkan API layanan IAP dan Cloud Resource Manager
gcloud services enable \
    iap.googleapis.com \
    cloudresourcemanager.googleapis.com \
    cloudidentity.googleapis.com \
    compute.googleapis.com
  1. 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 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.

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

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.

  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 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].
  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 load balancer menggunakan backend NEG tanpa server untuk mengarahkan permintaan ke layanan Cloud Run tanpa server.

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

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

26cb0b2a9162e7ab.png

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

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.

  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. 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)')
  1. Di Cloud Console, pilih project dari menu pilihan project drop-down
  2. Buka OAuth consent screen di Cloud Console

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 pastikan 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. Menutup browser

Memberikan akses pengguna ke portal karyawan

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

  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

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:

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.