1. Genel Bakış
Bu laboratuvarda, çalışanların Cymbal Eats uygulamasındaki siparişleri görüntülemesine, güncellemesine ve silmesine olanak tanıyan çalışan portalını dağıtacaksınız. Sanal Özel Ağ (VPN) kullanmadan portal erişimini güvenli hale getirmek için Identity Aware Proxy (IAP)'yi kullanacaksınız. IAP, sıfır güven erişim modelinin uygulanmasını kolaylaştırır ve uygulamalarınıza erişimi yönetmek için tek bir kontrol noktası sunarak hem şirket içi hem de bulut ortamlarındaki uzaktan çalışanlar için VPN'den daha kısa sürede uygulanır.

Identity-Aware Proxy nedir?
Identity-Aware Proxy (IAP); uygulamanıza gönderilen istekleri karşılayan, Google Kimlik Hizmeti'ni kullanarak istekte bulunan kullanıcının kimliğini doğrulayan ve yalnızca uygulamaya erişmek için yetkilendirilmiş bir kullanıcıdan gelen isteklere izin veren bir Google Cloud hizmetidir. Ayrıca istek başlıklarını, kimliği doğrulanmış kullanıcı hakkında bilgi içerecek şekilde değiştirebilir.
Öğrenecekleriniz
- Sunucusuz ağ uç noktası grubu (NEG) yapılandırma
- Yük dengeleyiciyi yapılandırma
- Erişimi kısıtlamak için IAP'yi etkinleştirme
- IAP kullanarak erişimi kısıtlama
2. Kurulum ve Gereksinimler
Yönlendirmesiz ortam kurulumu
- Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.



- Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Dilediğiniz zaman bunu güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğine (genellikle
PROJECT_IDolarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırma ücreti alınmaması için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projenin tamamını silebilirsiniz. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
Ortam Kurulumu
- Proje ve kaynakla ilgili ortam değişkenleri oluşturma
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
- IAP ve Cloud Resource Manager hizmeti API'lerini etkinleştirin
gcloud services enable \
iap.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudidentity.googleapis.com \
compute.googleapis.com
- Örnek uygulama deposunu klonlayın ve dizine gidin.
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/employee-ui
- Kurulum komut dosyasını kullanarak çalışan portalını dağıtın. Sonraki adıma geçmeden önce komut dosyasının tamamlanmasını bekleyin.
./setup.sh
Örnek çıkış
... 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
- Hizmet URL'si bağlantısını tıklayın.

3. Sunucusuz ağ uç noktası grubu (NEG) yapılandırma
Çalışan kullanıcı arayüzü Cloud Run hizmeti için bir sunucusuz ağ uç noktası grubu( sunucusuz NEG) oluşturacaksınız. Sunucusuz NEG'ler, Google Cloud sunucusuz uygulamalarını harici HTTP(S) yük dengeleme ile kullanmanıza olanak tanır.

- Çalışan kullanıcı arayüzü hizmeti için bir ağ uç noktası grubu oluşturun.
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
Örnek Çıkış
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].
Arka uç hizmeti oluşturma ve sunucusuz NEG'yi ekleme
Arka uç hizmeti, Cloud Load Balancing'in trafiği nasıl dağıttığını tanımlar. Arka uç hizmeti yapılandırması, arka uçlara bağlanmak için kullanılan protokol, çeşitli dağıtım ve oturum ayarları, durum denetimleri ve zaman aşımları gibi bir dizi değer içerir. Bu ayarlar, yük dengeleyicinizin davranışı üzerinde ayrıntılı kontrol sağlar.
- Arka uç hizmeti oluşturma
gcloud compute backend-services create employee-ui-iap-backend \
--global
Örnek Çıkış
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
- Sunucusuz NEG'yi arka uç hizmetine arka uç olarak ekleme
gcloud compute backend-services add-backend employee-ui-iap-backend \
--global \
--network-endpoint-group=employee-ui-iap-neg \
--network-endpoint-group-region=$REGION
Örnek Çıkış
Updated [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend].
- Gelen istekleri arka uç hizmetine yönlendirmek için bir URL eşlemesi oluşturun.
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. Yük dengeleyici bileşenlerini yapılandırma
Aşağıdaki diyagramda, yük dengeleyicinin istekleri sunucusuz bir Cloud Run hizmetine yönlendirmek için sunucusuz bir NEG arka ucu kullandığı gösterilmektedir.

Statik bir IP adresi ayırtın
- Statik bir IPv4 adresi ayırın ve alanı saklayın
gcloud compute addresses create employee-ui-iap-ip \
--network-tier=PREMIUM \
--ip-version=IPV4 \
--global
Örnek Çıkış
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/addresses/employee-ui-iap-ip].
- nip.io alanını saklayın
export DOMAIN=$(gcloud compute addresses list --filter employee-ui-iap-ip --format='value(ADDRESS)').nip.io
Google tarafından yönetilen SSL sertifikası kaynağı oluşturma
- Google tarafından yönetilen SSL sertifikası kaynağı oluşturma
gcloud compute ssl-certificates create employee-ui-iap-cert \
--description=employee-ui-iap-cert \
--domains=$DOMAIN \
--global
Örnek Çıkış
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
Hedef HTTPS proxy'si oluşturma
- İstekleri URL eşlemenize yönlendirmek için hedef HTTPS proxy'si oluşturun.
gcloud compute target-https-proxies create employee-ui-iap-http-proxy \
--ssl-certificates employee-ui-iap-cert \
--url-map employee-ui-iap-url-map
Örnek Çıkış
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:
Yönlendirme kurallarını yapılandırma
- Gelen istekleri proxy'ye yönlendirmek için bir iletim kuralı oluşturun.
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
Örnek çıkış
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/forwardingRules/employee-ui-iap-forwarding-rule].
Cloud Run hizmetine girişi kısıtlama
Giriş trafiğini yalnızca dahili istekleri ve HTTP(S) yük dengeleme üzerinden gelen istekleri kabul edecek şekilde kısıtlayın.

- Hizmeti yalnızca dahili isteklerden ve HTTP(S) yük dengeleyici üzerinden gelen isteklerden gelen giriş trafiğine izin verecek şekilde güncelleyin.
gcloud run services update employee-ui-service \
--ingress internal-and-cloud-load-balancing \
--region $REGION
Örnek çıkış
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
- Hizmet URL'si bağlantısını tıklayın.

Cloud Run hizmeti URL'sine erişim artık yasak olarak gösteriliyor.
5. Yük dengeleyicide Cloud Identity-Aware Proxy'yi (IAP) etkinleştirme
IAP, HTTPS ile erişilen uygulamalar için merkezi bir yetkilendirme katmanı oluşturmanıza olanak tanır. Ağ düzeyinde güvenlik duvarları yerine uygulama düzeyinde bir erişim denetimi modeli kullanabilirsiniz.

OAuth kullanıcı rızası ekranını yapılandırma
Marka, kullanıcılar için markalama bilgilerini içeren OAuth kullanıcı rızası ekranıdır. Markalar, dahili veya herkese açık kullanıcılarla sınırlandırılabilir. Dahili marka, OAuth akışına projeyle aynı Google Workspace kuruluşunun bir üyesi tarafından erişilmesine olanak tanır. Herkese açık bir marka, OAuth akışını internete erişimi olan herkesin kullanımına sunar.
- Marka oluşturma
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
Örnek Çıkış
Created [462858740426]. applicationTitle: Cymbal Eats name: projects/462858740426/brands/462858740426 orgInternalOnly: true
IAP OAuth istemcisi oluşturma
- Önceki adımdaki marka adını kullanarak bir müşteri oluşturun.
gcloud alpha iap oauth-clients create \
projects/$PROJECT_ID/brands/$PROJECT_NUMBER \
--display_name=cymbal-eats-employee-ui
Örnek Çıkış
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]
- İstemci adını, kimliğini ve gizli anahtarını saklayın
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)')
- Cloud Console'da, açılır proje seçimi menüsünden projeyi seçin.
- Cloud Console'da OAuth kullanıcı rızası ekranı'na gidin.

- Kullanıcı Türü bölümünde HARİCİ YAP'ı tıklayın.
- Yayınlama durumu olarak Test Etme'yi seçin.

- ONAYLA'yı tıklayın.
6. IAP ile Erişimi Kısıtlama
IAP kullanarak arka uç hizmetine erişimi kısıtlayın ve uygulamanın erişilemez olduğunu doğrulayın.
- Arka uç hizmetinde IAP'yi etkinleştirme
gcloud iap web enable --resource-type=backend-services \
--oauth2-client-id=$CLIENT_ID \
--oauth2-client-secret=$CLIENT_SECRET \
--service=employee-ui-iap-backend
UAI yapılandırmasını doğrulama
- SSL sertifikasının ETKİN olduğunu doğrulayın.
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
- Hizmet URL'sini alma
echo https://$DOMAIN
Örnek çıkış
https://34.102.234.98.nip.io
- Çalışan portalını açmak için hizmet URL'sini tıklayın.

- Laboratuvar kimlik bilgilerinizi kullanarak giriş yapın.

- Tarayıcıyı kapatın.
Kullanıcılara çalışan portalına erişim izni verme
- Önceki adımda oluşturulan kullanıcı için
'roles/iap.httpsResourceAccessor'rolüne bir IAM politika bağlama işlemi ekleyin.
gcloud iap web add-iam-policy-binding \
--resource-type=backend-services \
--service=employee-ui-iap-backend \
--member=user:$USER_EMAIL \
--role='roles/iap.httpsResourceAccessor'
Örnek çıkış
Updated IAM policy for backend service [projects/462858740426/iap_web/compute/services/employee-ui-iap-backend].
Hizmet erişimini test etme
Çalışan portalına erişimin verildiğini doğrulayın
- Hizmet URL'sini alma
echo https://$DOMAIN
Örnek çıkış
https://34.102.234.98.nip.io
- Çalışan portalını açmak için hizmet URL'sini tıklayın.

Artık çalışan portalına erişebilirsiniz.
(İsteğe bağlı) Tüm bağımlılıkları dağıtın. Bu mikro hizmetlerin dağıtılması yaklaşık 20 dakika sürebilir.
unset ORDER_SERVICE_URL
unset INVENTORY_SERVICE_URL
unset MENU_SERVICE_URL
cd ~/cymbal-eats
./setup.sh
./get-site-urls.sh
7. Tebrikler!
Tebrikler, codelab'i tamamladınız.
Sıradaki adım:
Diğer Cymbal Eats codelab'lerini keşfedin:
- Eventarc ile Cloud Workflows'u tetikleme
- Cloud Storage'dan etkinlik işlemeyi tetikleme
- Cloud Run'dan özel Cloud SQL'e bağlanma
- Cloud Run'dan tam olarak yönetilen veritabanlarına bağlanma
- Cloud Scheduler ile Cloud Run İşlerini Tetikleme
- Cloud Run'a güvenli bir şekilde dağıtma
- Cloud Run Giriş Trafiğinin Güvenliğini Sağlama
- GKE Autopilot'tan özel AlloyDB'ye bağlanma
Temizleme
Bu eğitimde kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini önlemek amacıyla kaynakları içeren projeyi silin veya projeyi koruyup tek tek kaynakları silin.
Projeyi silme
Faturalandırılmanın önüne geçmenin en kolay yolu, eğitim için oluşturduğunuz projeyi silmektir.