1. Genel Bakış
Bu laboratuvarda, çalışanların Cymbal Eats uygulamasından siparişleri görüntülemelerine, güncellemelerine ve silmelerine olanak tanıyan çalışan portalını dağıtacaksınız. Sanal özel ağ (VPN) kullanmadan portal erişimini güvence altına almak 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 hem şirket içi hem de bulut ortamlarındaki uzak çalışanlar için uygulamalarınıza erişimi yönetmek üzere tek bir kontrol noktası sunarak VPN'den daha az zaman alır.
Identity-Aware Proxy nedir?
Identity-Aware Proxy (IAP); uygulamanıza gönderilen isteklerini karşılayan, Google Kimlik Hizmeti'ni kullanarak istekte bulunan kullanıcıların kimliğini doğrulayan ve yalnızca uygulamaya erişme yetkisine sahip kullanıcılardan 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'yi kullanarak erişimi kısıtlama
2. Kurulum ve Gereksinimler
Kendi hızınızda 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ının görünen adıdı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 değiştirilemez (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dize otomatik olarak oluşturur. Bu dizenin ne olduğu genellikle önemli değildir. Çoğu kod laboratuvarında proje kimliğine (genellikle
PROJECT_ID
olarak tanımlanır) referans vermeniz gerekir. Oluşturulan kimliği beğenmezseniz rastgele başka bir kimlik oluşturabilirsiniz. Alternatif olarak, kendi anahtarınızı deneyerek kullanılabilir olup olmadığını görebilirsiniz. Bu adımdan sonra değiştirilemez ve proje boyunca geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer (Proje Numarası) olduğunu belirtmek isteriz. Bu üç değer hakkında daha fazla bilgiyi dokümanlar bölümünde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmak çok pahalı olmayacaktır. Bu eğitimden sonra faturalandırılmamak 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ğerindeki ücretsiz deneme programına uygundur.
Ortam Kurulumu
- Proje ve kaynaklarla 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 hizmet API'lerini etkinleştirme
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ı grubunu (NEG) yapılandırma
Çalışan kullanıcı arayüzü Cloud Run hizmeti için bir sunucusuz ağ uç noktası grubu( Sunucusuz NEG) oluşturursunuz. 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şturun ve sunucusuz NEG'yi ekleyin
Arka uç hizmetleri, 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 kontrolleri 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 şemada, yük dengeleyicinin isteklerini 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 IPv4 adresi ayırma ve alanı depolama
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ı depolama
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'sini 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 Dengelemesi ü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 hizmet URL'sine erişim artık yasak olarak görünüyor.
5. Load Balancing'de 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ılara yönelik markalaşma bilgilerini içeren OAuth izin ekranıdır. Markalar, dahili veya herkese açık kullanıcılarla sınırlı olabilir. 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ı internet erişimi olan herkese açık hale getirir.
- 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 İstemcisi Oluşturma
- Önceki adımdaki marka adını kullanarak bir istemci 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 sırrını saklama
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çim 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 aşamasında'yı seçin.
- ONAYLA'yı tıklayın.
6. IAP ile erişimi kısıtlama
IAP'yi kullanarak arka uç hizmetine erişimi kısıtlayın, ardından uygulamaya erişilemediğini 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
IAP yapılandırmasını doğrulama
- SSL sertifikasının ETKİLİ 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.
- Lab kimlik bilgilerinizi kullanarak giriş yapın.
- Tarayıcıyı kapatma
Kullanıcıya çalışan portalına erişim izni verme
- Önceki adımda oluşturulan kullanıcı için
'roles/iap.httpsResourceAccessor'
rolü için bir IAM politika bağlaması 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şim izninin verildiğini onaylama
- 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, kod laboratuvarını tamamladınız.
Sıradaki adım:
Diğer Cymbal Eats codelab'lerini keşfedin:
- Eventarc ile Cloud iş akışlarını tetikleme
- Cloud Storage'dan etkinlik işlemeyi tetikleme
- Cloud Run'dan Private CloudSQL'e bağlanma
- Cloud Run'dan Tümüyle Yönetilen Veritabanlara Bağlanma
- Cloud Scheduler ile Cloud Run işlerini tetikleme
- Cloud Run'a Güvenli Dağıtım
- Cloud Run giriş trafiğinin güvenliğini sağlama
- GKE Autopilot'ten özel AlloyDB'ye bağlanma
Temizleme
Bu eğiticide kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız kaynakları içeren projeyi silin veya projeyi saklayıp kaynakları tek tek silin.
Projeyi silme
Faturalandırmanın önüne geçmenin en kolay yolu, eğitim için oluşturduğunuz projeyi silmektir.