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

94b06525c85408ad.png

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

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

2abe669e53c27186.png

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

  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, istekleri sunucusuz bir Cloud Run hizmetine yönlendirmek için sunucusuz bir NEG arka ucunun kullanıldığı gösterilmektedir.

335f4674737a6514.png

Statik bir IP adresi ayırtın

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

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

  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:

İletim kurallarını yapılandırın

  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 HTTP(S) Yük Dengeleme'den gelen dahili istekleri ve istekleri kabul edecek şekilde kısıtlayın.

26cb0b2a9162e7ab.png

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

d9740402a74370a8.png

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.

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

bcb460f3ab5241f4.png

  1. Kullanıcı Türü bölümünde HARİCİ OLUŞTUR'u tıklayın
  2. Yayınlama durumu olarak Test'i seçin

27fd7de6e7b7ef21.png

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

  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ğrulayın

  1. SSL sertifikasının ETKİN olduğunu doğrulayın
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
  1. Hizmet URL'sini al
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. Laboratuvar kimlik bilgilerinizi kullanarak giriş yapın.

f7e0318388aa0739.png

  1. Tarayıcıyı kapat

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 izni verildiğini doğrulayın

  1. Hizmet URL'sini al
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ı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:

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.