Cloud Run Giriş Trafiğinin Güvenliğini Sağlama

1. Genel Bakış

Bu laboratuvarda, Cloud Run hizmetine erişimi nasıl kısıtlayacağınız ve yalnızca şirket içinde veya projenizin VPC'sinde çalışan bir iş yükünden gelen isteklere nasıl izin vereceğiniz gösterilmektedir. Kullanabileceğiniz iki erişim denetimi katmanı vardır: giriş ayarları ve Kimlik ve Erişim Yönetimi (IAM) politikaları.

5aed47d10595c878.png

Giriş ayarları

Giriş ayarları, istekleri ağ kaynağına (dahili veya harici) göre filtrelemenize olanak tanır. Herkese açık internetten gelenler de dahil olmak üzere tüm isteklerin geçmesine varsayılan olarak izin verilir.

IAM politikası

IAM politikaları, istekleri gönderenin kimliğine göre filtrelemenize olanak tanır ve genellikle hizmetten hizmete isteklerin kimliğini doğrulamak için kullanılır.

Bu laboratuvarda, giriş ayarlarını nasıl ve ne zaman kullanacağınızı öğreneceksiniz.

Şirket içi ana makineler VPC üzerinden bağlanır

Bu laboratuvarda, şirket içi bir iş yükünü simüle edeceğiz. Şirket içi bir ana makineyi Cloud Run'a bağlamak için şirket içi ana makineler için Özel Google Erişimi'ni yapılandırmanız gerekir. Bu, VPC ağında Cloud VPN ağ geçidi oluşturmayı içerir (aşağıda gösterildiği gibi).

31611f6a2f12fd0c.png

VPC'deki bir atlama sunucusunu kullanarak şirket içi iş yükünü simüle etme

Bu laboratuvarda, VPC'deki bir Compute Engine sanal makinesinden istek göndererek şirket içi bir ana makineden istek göndermeyi simüle edeceksiniz.

aebf22740c7a84f0.png

Atlama sunucusu olarak kullanacağınız Compute Engine sanal makinesi, Cloud VPN ağ geçidiyle aynı ağ kaynağına sahiptir. Bu nedenle, şirket içi iş yükünden istek göndermeyi simüle etmek için bu makineyi kullanabilirsiniz.

2. Kurulum ve Gereksinimler

Yönlendirmesiz 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ı 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_ID olarak 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.
  1. 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

  1. Daha sonraki komutlarda kullanılmak üzere proje kimliği için bir ortam değişkeni ayarlayın:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ZONE=us-central1-a
  1. Bu laboratuvarı yürütmek için gereken API'leri etkinleştirin.
gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  compute.googleapis.com \
  artifactregistry.googleapis.com
  1. Örnek uygulama deposunu klonlayın ve dizine gidin.
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git

cd cymbal-eats/partner-registration-service
  1. Compute Engine ve Cloud Run için varsayılan bölgeyi ve alt bölgeyi ayarlama
gcloud config set compute/region ${REGION}
gcloud config set run/region ${REGION}
gcloud config set compute/zone ${ZONE}

3. Hizmeti dağıtma

Öncelikle hizmeti dağıtıp herkese açık erişime bırakırsınız. Tarayıcınızdan istek gönderebildiğinizi doğruladıktan sonra hizmeti kilitleriz ve yalnızca dahili ağ kaynaklarından gelen isteklere izin veririz.

Aşağıdaki komutu çalıştırdığınızda bu talimatları uygulayın:

  • Kaynak kodu konumu (...): partner-registration-service dizininde olduğunuzu doğrulayın ve varsayılanı kabul etmek için Enter tuşuna basın
  • Hizmet adı (partner-registration-service): Varsayılanı kabul etmek için Enter tuşuna basın
  • [partner-registration-service] hizmetine kimliği doğrulanmamış çağrıların gönderilmesine izin verilsin mi? (y/N) Y
gcloud run deploy 

Bu komut tamamlandığında Cloud Run hizmetinizin URL'si listelenir. Çıkış, bu listelemeye benzer şekilde görünür:

Service [partner-registration-service] revision [partner-registration-service-00001-haz] has been deployed and is serving 100 percent of traffic.
Service URL: https://partner-registration-service-ssssssssss-uc.a.run.app

Hizmet URL'sini tarayıcınızda açın. Aşağıdaki çıkışı görmeniz gerekir:

Partner registration service: RUNNING

Hizmeti yalnızca dahili isteklere izin verecek şekilde ayarlayın.

Artık yalnızca dahili kaynaklardan gelen isteklere izin vermek için Cloud Run hizmetinin giriş ayarlarını kullanacaksınız. Dahili kaynaklar, Cloud Run hizmetiyle aynı projede (veya VPC Hizmet Kontrolleri çevresinde) bulunan VPC ağlarındaki kaynakları içerir. Bu nedenle, kullanım alanımız için mükemmeldir.

Ayrıca, VPC'nin parçası olmasalar bile diğer Google Cloud ürünlerinden gelen istekler dahili olarak kabul edilir. Bu ürünlere örnek olarak Pub/Sub ve Workflows verilebilir.

Bu kaynaklardan gelen istekler, hizmetinize run.app URL'sinden erişseler bile Google ağında kalır ve herkese açık erişim yasaktır.

Hizmeti yalnızca dahili isteklere izin verecek şekilde güncelleyin:

gcloud run services update partner-registration-service --ingress=internal

Hizmet URL'sini tekrar açarsanız "Hata: Yasaklandı - Erişim yasaklandı" mesajı gösterilir.

Tarayıcınız isteği Google Cloud projesi için dahili bir kaynaktan değil, harici bir ağ kaynağından gönderdiğinden tam olarak bu durumun gerçekleşmesini beklersiniz. Hizmetiniz artık daha güvenli.

4. Atlama sunucusu olarak Compute Engine sanal makinesi oluşturma

Bir sonraki adım, VPC'de bir Compute Engine örneği oluşturarak şirket içi sunucudan gelen istekleri Cloud VPN ağ geçidi üzerinden simüle etmektir. Bu örnek, atlama sunucusu olarak kullanılır:

gcloud compute instances create jump-server --scopes=https://www.googleapis.com/auth/cloud-platform

Bu komutun çıkışı şuna benzer olmalıdır:

NAME         ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
jump-server  us-central1-a  n1-standard-1               10.128.0.10  34.170.108.8  RUNNING

Compute Engine örneğinden hizmete istek gönderme

Şimdi sanal makinede bir terminal açıp VPC ağındaki makineden doğrudan istek göndereceksiniz.

Aşağıdaki komut, Cloud Shell'de SSH'yi ayarlamanızı isterse talimatları uygulayın:

gcloud compute ssh jump-server

Aşağıdaki komutla Cloud Run hizmetinin URL'sini alın:

gcloud run services describe partner-registration-service --region us-central1

Çıkışın ilk birkaç satırı şu şekilde görünmelidir:

✔ Service partner-registration-service in region us-central1

URL:     https://partner-registration-service-ssssssssss-uc.a.run.app
Ingress: internal

Şimdi URL'yi kopyalayın ve curl kullanarak Compute Engine örneğinden bir istek gönderin. Sanal makine örneği projenizin VPC ağında çalıştığı için bu istek başarılı olur. Bu, dahili bir kaynaktır.

export SERVICE_URL=https://

curl ${SERVICE_URL}

Çıkışta şu ifade yer almalıdır:

Partner registration service: RUNNING

5. IAM tabanlı erişim denetimi hakkında ne söylenebilir?

Bu laboratuvarda, giriş ayarlarının nasıl ve ne zaman kullanılacağı gösterildi. Şirket içi bir iş yükünü Cloud Run'a bağlıyorsanız giriş ayarları, iyi bir başlangıç noktasıdır.

IAM tabanlı erişim denetiminin uygulanması, özellikle şirket içi bir ana makineden çağrı yapıyorsanız daha fazla çaba gerektirir:

  • IAM, uzun süreli hizmet hesabı kimlik bilgilerini ana makinede yönetmenizi gerektirir.
  • IAM, hizmet hesabı kimlik bilgilerini kullanarak istekleri imzalamak için kod değişiklikleri gerektirir.

Google, erişim denetimi için çok katmanlı bir yaklaşım önerir. Giriş ayarlarını kullanarak erişimi yalnızca dahili ana makinelerle sınırlamak başlangıç için harika bir adım olsa da bu yeterli değildir.

6. Tebrikler!

Tebrikler, codelab'i tamamladınız.

Sıradaki adım:

Diğer Cymbal Eats codelab'lerini keşfedin:

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.

Faydalı referanslar

Cloud Run'daki iki erişim denetimi katmanı hakkında daha fazla bilgi edinmenize yardımcı olacak ek kaynakları aşağıda bulabilirsiniz.