1. Genel Bakış
Bu laboratuvarda, çalışanların Cymbal Eats uygulamasından 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şiminin güvenliğini sağlamak için Identity Aware Proxy'yi (IAP) kullanacaksınız. IAP, sıfır güven ilkeli 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çinde hem de bulut ortamlarında uzaktan çalışanlar için VPN'den daha az zaman alı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ıların kimliğini doğrulayan ve yalnızca uygulamaya erişim yetkisi olan bir kullanıcıdan gelen isteklere izin veren bir Google Cloud hizmetidir. Ayrıca istek üstbilgilerini, 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
Kendi hızınızda ortam kurulumu
- Google Cloud Console'da oturum açıp 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. İstediğiniz zaman güncelleyebilirsiniz.
- Proje Kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de proje kimliğini (genellikle
PROJECT_ID
olarak tanımlanır) referans almanız gerekir. Oluşturulan kimliği beğenmezseniz rastgele bir kimlik daha oluşturabilirsiniz. Alternatif olarak, kendi ölçümünüzü deneyip mevcut olup olmadığına bakabilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince kalır. - Bilginiz için bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Sonraki adımda, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırma yapılmaması için kaynakları kapatmak isterseniz oluşturduğunuz kaynakları silebilir veya projenin tamamını silebilirsiniz. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden 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 kaynak yöneticisi hizmeti 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ı 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ışanların 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
Bir 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 şemada yük dengeleyicinin, istekleri sunucusuz bir Cloud Run hizmetine yönlendirmek için sunucusuz bir NEG arka ucunun kullanıldığı gösterilmektedir.
Statik bir IP adresi ayırtın
- Statik bir IPv4 adresi ayırtma ve alan adını 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ı depolayın
export DOMAIN=$(gcloud compute addresses list --filter employee-ui-iap-ip --format='value(ADDRESS)').nip.io
Google tarafından yönetilen bir SSL sertifika kaynağı oluşturma
- Google tarafından yönetilen bir SSL sertifika 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:
İletim kurallarını yapılandırın
- 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 HTTP(S) Yük Dengeleme'den gelen dahili istekleri ve istekleri kabul edecek şekilde kısıtlayın.
- Hizmeti yalnızca HTTP(S) Yük Dengeleyici aracılığıyla dahili isteklerden ve 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ö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 erişim denetimi modeli kullanabilirsiniz.
OAuth izin ekranını yapılandırma
Marka, kullanıcıların marka bilgilerini içeren OAuth izin ekranıdır. Markalar, dahili veya herkese açık kullanıcılarla kısıtlanmış olabilir. Şirket içi marka, OAuth akışına projeyle aynı Google Workspace kuruluşunun bir üyesinin erişmesine olanak tanır. Herkese açık bir marka, OAuth akışını internete erişimi olan herkes için erişilebilir 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ımda kullandığınız marka adını kullanarak müşteri oluşturma
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ı depolayı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 izin ekranına gidin.
- Kullanıcı Türü bölümünde HARİCİ OLUŞTUR'u tıklayın
- Yayınlama durumu olarak Test'i 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ıp 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
IAP yapılandırmasını doğrulayın
- SSL sertifikasının ETKİN olduğunu doğrulayın
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
- Hizmet URL'sini al
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
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 izni verildiğini doğrulayın
- Hizmet URL'sini al
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ımı 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 İşlemeyi Tetikleme
- Cloud Run'dan Private CloudSQL'e bağlanma
- Cloud Run'dan Tümüyle Yönetilen Veritabanlarına Bağlanma
- Cloud Scheduler ile Cloud Run İşlerini Tetikleme
- Cloud Run'a Güvenli Şekilde Dağıtma
- Cloud Run Giriş Trafiğinin Güvenliğini Sağlama
- GKE Autopilot'tan ö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 tutup tek tek kaynakları silin.
Projeyi silme
Faturalandırmayı ortadan kaldırmanın en kolay yolu, eğitim için oluşturduğunuz projeyi silmektir.