Identity Aware Proxy (IAP) ile Güvenli Sunucusuz Uygulama

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.

94b06525c85408ad.png

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

  1. 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
  1. 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
  1. Örnek uygulama deposunu klonlayın ve dizine gidin
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/employee-ui
  1. 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
  1. Hizmet URL'si bağlantısını tıklayın.

86416f68c0b8152a.png

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.

2abe669e53c27186.png

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

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

335f4674737a6514.png

Statik bir IP adresi ayırtın

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

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

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

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

26cb0b2a9162e7ab.png

  1. 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
  1. Hizmet URL'si bağlantısını tıklayın.

8505fde7e0784bf1.png

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.

d9740402a74370a8.png

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.

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

  1. Ö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]
  1. İ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)')
  1. Cloud Console'da, açılır proje seçim menüsünden projeyi seçin.
  2. Cloud Console'da OAuth kullanıcı rızası ekranına gidin.

bcb460f3ab5241f4.png

  1. Kullanıcı Türü bölümünde HARİCİ YAP'ı tıklayın.
  2. Yayınlama durumu olarak Test aşamasında'yı seçin.

27fd7de6e7b7ef21.png

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

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

  1. SSL sertifikasının ETKİLİ olduğunu doğrulayın
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
  1. Hizmet URL'sini alma
echo https://$DOMAIN

Örnek çıkış

https://34.102.234.98.nip.io
  1. Çalışan portalını açmak için hizmet URL'sini tıklayın.

352b600209c3fb33.png

  1. Lab kimlik bilgilerinizi kullanarak giriş yapın.

f7e0318388aa0739.png

  1. Tarayıcıyı kapatma

Kullanıcıya çalışan portalına erişim izni verme

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

  1. Hizmet URL'sini alma
echo https://$DOMAIN

Örnek çıkış

https://34.102.234.98.nip.io
  1. Çalışan portalını açmak için hizmet URL'sini tıklayın.

86416f68c0b8152a.png

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:

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.