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 ya da projenizin VPC'sinde çalışan bir iş yükünden gelen isteklere nasıl izin verileceği anlatılmaktadır. Kullanabileceğiniz iki erişim denetimi katmanı vardır: giriş ayarları ve Identity and Access Management (IAM) politikaları.

5aed47d10595c878.png

Giriş ayarları

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

IAM politikası

IAM politikaları, istekleri gönderenin kimliğine göre filtrelemenizi sağlar ve genellikle hizmetten hizmete isteklerinin 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 istiyorsanız şirket içi ana makineler için Özel Google Erişimi'ni yapılandırmanız gerekir. Buna, aşağıda gösterildiği gibi VPC ağında bir Cloud VPN ağ geçidi ayarlamak da dahildir.

31611f6a2f12fd0c.png

VPC'de atlama sunucusu 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 ana makineden istek gönderme işlevini burada gösterildiği gibi simüle edeceksiniz.

aebf22740c7a84f0.png

Atlama sunucusu olarak kullanacağınız Compute Engine sanal makinesi, Cloud VPN Ağ Geçidi ile aynı ağ kaynağına sahiptir. Bu nedenle, bu sanal makineyi, şirket içi iş yükünden istek gönderme simülasyonu yapmak için kullanabilirsiniz.

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. Bir ortam değişkenini daha sonraki komutlarda kullanmak üzere proje kimliğine 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 gerekli 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ölge 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 herkesin erişimine açık bırakmanız gerekir. Tarayıcınızdan istek gönderebildiğinizi doğruladıktan sonra, hizmeti kilitleyip yalnızca dahili ağ kaynaklarından gelen isteklere izin veririz.

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

  • Kaynak kodu konumu (...): İş ortağı-kayıt-hizmeti dizininde olduğunuzu doğrulayın ve varsayılanı kabul etmek için Enter tuşuna basın
  • Hizmet adı (iş ortağı-kayıt-hizmeti): Varsayılanı kabul etmek için enter tuşuna basın
  • [partner-registration-service] hizmetine yapılan kimliği doğrulanmamış çağrılara izin verilsin mi (y/H)? E
gcloud run deploy 

Bu komut tamamlandığında Cloud Run hizmetinizin URL'si listelenir. Çıkış şu girişe benzer olacaktı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öreceksiniz:

Partner registration service: RUNNING

Hizmeti yalnızca dahili isteklere izin verecek şekilde ayarlama

Şimdi, 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ında bulunan kaynakları içerir. Bu da bizim kullanım alanımız için mükemmel bir çözümdür.

Ayrıca diğer Google Cloud ürünlerinden gelen istekler, VPC'nin bir parçası olmasa bile dahili olarak kabul edilir. Bu ürünler arasında Pub/Sub ve İş Akışları yer alır.

Bu kaynaklardan gelen istekler run.app URL'sinden hizmetinize erişse bile Google ağında kalır ve herkese açık erişim yasaklanı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: Yasak - Erişim yasak" mesajını görürsünüz.

Tarayıcınız isteği Google Cloud projesine dahili bir kaynaktan değil, harici bir ağ kaynağından gönderdiğinden bu, beklenen sonucu verir. Hizmetiniz artık daha güvenli.

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

Sonraki adım, VPC'de atlama sunucusu olarak kullanılacak bir Compute Engine örneği oluşturarak Cloud VPN ağ geçidi aracılığıyla şirket içi sunucudan gelen istekleri simüle etmektir.

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 doğrudan VPC ağındaki makineden istek göndereceksiniz.

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

gcloud compute ssh jump-server

Şu 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 (dahili bir kaynaktır) çalıştığı için bu isteğin başarılı olması gerekir.

export SERVICE_URL=https://

curl ${SERVICE_URL}

Çıkış şu ifadeleri içermelidir:

Partner registration service: RUNNING

5. Peki ya IAM tabanlı erişim denetimi?

Bu laboratuvarda, giriş ayarlarının nasıl ve ne zaman kullanılacağı gösterilmiştir. Şirket içi bir iş yükünü Cloud Run'a bağlıyorsanız giriş ayarları mükemmel bir ilk adımdır.

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

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

Google, erişim denetimi için çok katmanlı bir yaklaşım önerir. Giriş ayarlarını yalnızca dahili ana makinelerle kısıtlamak için kullanmak ideal bir ilk adımdır ancak bununla yetinmeyin.

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

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.