Cloud Run'a Güvenli Şekilde Dağıtma

1. Genel Bakış

Güvenliği artırmak için bir hizmeti Cloud Run'a dağıtmayla ilgili varsayılan adımları değiştirecek ve ardından dağıtılan uygulamaya güvenli bir şekilde nasıl erişeceğinizi göreceksiniz. Uygulama, Cymbal Eats uygulamasının "iş ortağı kayıt hizmeti"dir. Yemek siparişlerini işlemek için Cymbal Eats ile çalışan şirketler tarafından kullanılır.

Öğrenecekleriniz

Bir uygulamayı Cloud Run'a dağıtmak için gereken minimum varsayılan adımlarda birkaç küçük değişiklik yaparak uygulamanın güvenliğini önemli ölçüde artırabilirsiniz. Mevcut bir uygulamayı ve dağıtım talimatlarını alıp dağıtılan uygulamanın güvenliğini artırmak için dağıtım adımlarını değiştirirsiniz.

Ardından, uygulamaya erişimi nasıl yetkilendireceğinizi ve yetkili istekler nasıl göndereceğinizi göreceksiniz.

Bu makalede, uygulama dağıtım güvenliğine dair kapsamlı bir inceleme yapılmamaktadır. Bunun yerine, gelecekteki tüm uygulama dağıtımlarınızda çok az çabayla güvenliklerini artıracak değişikliklere yer verilmektedir.

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.

Cloud Shell'i etkinleştirme

  1. Cloud Console'da Cloud Shell'i etkinleştir 'i 853e55310c205094.png tıklayın.

55efc1aaa7a4d3ad.png

Cloud Shell'i daha önce hiç başlatmadıysanız Cloud Shell'in ne olduğunu açıklayan bir ara ekran (ekranın altında) gösterilir. Bu durumda Devam'ı tıklayın (bu ekranı bir daha görmezsiniz). Tek seferlik ekran aşağıdaki gibi görünür:

9c92662c6a846a5c.png

Cloud Shell'e bağlanmak ve ortam oluşturmak yalnızca birkaç dakikanızı alır.

9f0e51b578fecce5.png

Bu sanal makinede ihtiyacınız olan tüm geliştirme araçları yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışır. Bu sayede ağ performansını ve kimlik doğrulamayı büyük ölçüde iyileştirir. Bu kod laboratuvarındaki çalışmanızın tamamı olmasa da büyük bir kısmı yalnızca bir tarayıcı veya Chromebook'unuzla yapılabilir.

Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize göre ayarlandığını görürsünüz.

  1. Kimliğinizi doğrulamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud auth list

Komut çıkışı

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud komutunun projeniz hakkında bilgi sahibi olduğunu onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Aksi takdirde aşağıdaki komutla ayarlayabilirsiniz:

gcloud config set project <PROJECT_ID>

Komut çıkışı

Updated property [core/project].

Ortam Kurulumu

Bu laboratuvarda Cloud Shell komut satırında komutlar çalıştıracaksınız. Genellikle komutları kopyalayıp olduğu gibi yapıştırabilirsiniz ancak bazı durumlarda yer tutucu değerlerini doğru değerlerle değiştirmeniz gerekir.

  1. Daha sonra oluşturulacak komutlarda kullanmak için proje kimliğiyle bir ortam değişkeni ayarlayın:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export SERVICE_NAME=partner-registration-service
  1. Uygulamanızı çalıştıracak Cloud Run hizmet API'sini, NoSQL veri depolama alanı sağlayacak Firestore API'yi, dağıtım komutu tarafından kullanılacak Cloud Build API'yi ve oluşturulurken uygulama kapsayıcısını tutmak için kullanılacak Artifact Registry'yi etkinleştirin:
gcloud services enable \
  run.googleapis.com \
  firestore.googleapis.com \
  cloudbuild.googleapis.com \
  artifactregistry.googleapis.com
  1. Firestore veritabanını yerel modda başlatın. Bu komut App Engine API'yi kullandığından önce bu API'nin etkinleştirilmesi gerekir.

Komut, App Engine için bir bölge (kullanmayacağız ancak geçmiş nedenlerle oluşturmamız gerekir) ve veritabanı için bir bölge belirtmelidir. App Engine için us-central, veritabanı için nam5 kullanacağız. nam5, ABD'deki çok bölgeli konumdur. Çoklu bölge konumları, veritabanının kullanılabilirliğini ve dayanıklılığını en üst düzeye çıkarır.

gcloud services enable appengine.googleapis.com

gcloud app create --region=us-central
gcloud firestore databases create --region=nam5
  1. Örnek uygulama deposunu klonlayın ve dizine gidin
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git

cd cymbal-eats/partner-registration-service

3. README dosyasını inceleyin

Düzenleyiciyi açıp uygulamayı oluşturan dosyalara bakın. Bu uygulamayı dağıtmak için gereken adımları açıklayan README.md dosyasını görüntüleyin. Bu adımların bazıları, dikkate alınması gereken dolaylı veya açık güvenlik kararları içerebilir. Burada açıklandığı gibi, dağıtılan uygulamanızın güvenliğini artırmak için bu seçeneklerden birkaçını değiştireceksiniz:

3. Adım: npm install dosyasını çalıştırın

Bir uygulamada kullanılan üçüncü taraf yazılımların kaynağını ve bütünlüğünü bilmek önemlidir. Yazılım tedarik zinciri güvenliğini yönetmek, yalnızca Cloud Run'a dağıtılan uygulamalarla değil, herhangi bir yazılımın geliştirilmesiyle ilgilidir. Bu laboratuvar dağıtıma odaklandığından bu konuyu ele almıyor ancak konuyu ayrı olarak araştırmak isteyebilirsiniz.

4. ve 5. adımlar: deploy.sh dosyasını düzenleyip çalıştırma

Bu adımlar, uygulamayı Cloud Run'a dağıtır ve çoğu seçeneği varsayılan ayarlarında bırakır. Dağıtım işlemini daha güvenli hale getirmek için bu adımı iki önemli şekilde değiştireceksiniz:

  1. Kimlik doğrulaması yapılmamış erişime izin vermeyin. Keşif sırasında bir şeyleri denemek için buna izin vermek uygun olabilir ancak bu, ticari iş ortaklarının kullanması için tasarlanmış bir web hizmetidir ve her zaman kullanıcılarının kimliğini doğrulamalıdır.
  2. Uygulamanın, muhtemelen ihtiyaç duyulandan daha fazla API ve kaynak erişimine sahip olacak varsayılan bir hesap yerine yalnızca gerekli ayrıcalıklara sahip özel bir hizmet hesabı kullanması gerektiğini belirtin. Bu, en az ayrıcalık ilkesi olarak bilinir ve uygulama güvenliğinin temel bir kavramıdır.

6 ila 11. adımlar: Doğru davranışı doğrulamak için örnek web istekleri gönderin

Uygulama dağıtımı artık kimlik doğrulama gerektirdiğinden, bu istekler artık istek sahibinin kimliğini kanıtlamalıdır. Bu dosyaları değiştirmek yerine doğrudan komut satırından istek gönderirsiniz.

4. Hizmeti güvenli bir şekilde dağıtma

deploy.sh komut dosyasında yapılması gereken iki değişiklik tespit edildi: kimliği doğrulanmamış erişime izin vermemek ve minimum ayrıcalıklara sahip özel bir hizmet hesabı kullanmak.

Önce yeni bir hizmet hesabı oluşturur, ardından deploy.sh komut dosyasını bu hizmet hesabını referans alacak ve kimliği doğrulanmamış erişime izin vermeyecek şekilde düzenler, ardından değiştirilmiş deploy.sh komut dosyasını çalıştırmadan önce değiştirilmiş komut dosyasını çalıştırarak hizmeti dağıtırsınız.

Bir hizmet hesabı oluşturun ve bu hesaba Firestore/Datastore'a gerekli erişimi verin

gcloud iam service-accounts create partner-sa

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:partner-sa@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role=roles/datastore.user

deploy.sh öğesini düzenle

deploy.sh dosyasını, kimliği doğrulanmamış erişime izin vermeyecek(–no-allow-unauthenticated) ve dağıtılan uygulama için yeni hizmet hesabını(–service-account) belirtecek şekilde değiştirin. GOOGLE_PROJECT_ID değerini kendi projenizin kimliğiyle düzeltin.

İlk iki satırı siler ve diğer üç satırı aşağıda gösterildiği gibi değiştirirsiniz.

gcloud run deploy $SERVICE_NAME \
  --source . \
  --platform managed \
  --region ${REGION} \
  --no-allow-unauthenticated \
  --project=$PROJECT_ID \
  --service-account=partner-sa@${PROJECT_ID}.iam.gserviceaccount.com

Hizmeti dağıtma

Komut satırından deploy.sh komut dosyasını çalıştırın:

./deploy.sh

Dağıtım tamamlandığında, komut çıktısının son satırında yeni uygulamanın hizmet URL'si gösterilir. URL'yi bir ortam değişkenine kaydedin:

export SERVICE_URL=<URL from last line of command output>

Şimdi curl aracını kullanarak uygulamadan bir sipariş getirmeyi deneyin:

curl -i -X GET $SERVICE_URL/partners

curl komutu için -i işareti, yanıt üst bilgilerini çıktıya eklemesini söyler. Çıktının ilk satırı şu şekilde olmalıdır:

HTTP/2 403

Uygulama, kimliği doğrulanmayan isteklere izin vermeme seçeneğiyle dağıtıldı. Bu curl komutu kimlik doğrulama bilgisi içermediğinden Cloud Run tarafından reddedilir. Gerçekten dağıtılan uygulama, bu istekle çalıştırılmaz veya bu istekten veri almaz.

5. Kimlik doğrulanmış istekler gönderme

Dağıtılan uygulama, web istekleri gönderilerek çağrılır. Bu isteklerin Cloud Run'un izin vermesi için kimlik doğrulaması yapılması gerekir. Web isteklerinin kimliği, formun Authorization başlığı eklenerek doğrulanır:

Authorization: Bearer identity-token

identity-token, güvenilir bir kimlik doğrulama sağlayıcısı tarafından verilen kısa süreli, kriptografik olarak imzalanmış, kodlanmış bir dizedir. Bu durumda, süresi dolmamış, geçerli, Google tarafından verilen bir kimlik jetonu gereklidir.

Kullanıcı hesabınızla istek gönderme

Google Cloud CLI aracı, varsayılan olarak kimliği doğrulanmış kullanıcı için jeton sağlayabilir. Kendi hesabınız için kimlik jetonu almak ve bu jetonu ID_TOKEN ortam değişkenine kaydetmek üzere aşağıdaki komutu çalıştırın:

export ID_TOKEN=$(gcloud auth print-identity-token)

Google tarafından verilen kimlik jetonları varsayılan olarak bir saat geçerlidir. Daha önce yetkilendirilmediği için reddedilen isteği yapmak üzere aşağıdaki curl komutunu çalıştırın. Bu komut gerekli başlığı içerir:

curl -i -X GET $SERVICE_URL/partners \
  -H "Authorization: Bearer $ID_TOKEN"

Komut çıktısı HTTP/2 200 ile başlamalıdır. Bu, isteğin kabul edildiğini ve yerine getirildiğini gösterir. (Bir saat bekleyip bu isteği tekrar denerseniz jetonun süresi dolduğu için istek başarısız olur.) Yanıtın gövdesi, boş bir satırdan sonra çıkışın sonunda yer alır:

{"status":"success","data":[]}

Henüz iş ortağı yok.

İki curl komutuyla dizindeki örnek JSON verilerini kullanarak iş ortaklarını kaydedin:

curl -X POST \
  -H "Authorization: Bearer $ID_TOKEN" \
  -H "Content-Type: application/json" \
  -d "@example-partner.json" \
  $SERVICE_URL/partner

ve

curl -X POST \
  -H "Authorization: Bearer $ID_TOKEN" \
  -H "Content-Type: application/json" \
  -d "@example-partner2.json" \
  $SERVICE_URL/partner

Kayıtlı tüm iş ortaklarını görmek için önceki GET isteğini tekrarlayın:

curl -i -X GET $SERVICE_URL/partners \
  -H "Authorization: Bearer $ID_TOKEN"

İki kayıtlı iş ortağı hakkında bilgi veren, çok daha fazla içeriğe sahip JSON verilerini görürsünüz.

Yetkisiz hesap olarak istek gönderme

Son adımda yapılan kimliği doğrulanmış istek, yalnızca kimliği doğrulandığı için değil, kimliği doğrulanmış kullanıcının (hesabınız) yetkili olduğu için de başarılı oldu. Yani hesabın, uygulamayı çağırma izni vardı. Kimliği doğrulanmış tüm hesapların bunu yapmaya yetkisi yoktur.

Önceki isteğinde kullanılan varsayılan hesap, uygulamayı içeren projeyi oluşturan hesap olduğu ve varsayılan olarak hesaptaki tüm Cloud Run uygulamalarını çağırma izni verdiği için yetkilendirilmiştir. Gerekirse bu izin iptal edilebilir. Bu, üretim uygulamasında istenilen bir durumdur. Bunu şimdi yapmak yerine, atanmış ayrıcalıkları veya rolleri olmayan yeni bir hizmet hesabı oluşturup dağıtılan uygulamaya erişmeye çalışmak için bu hesabı kullanırsınız.

  1. tester adlı bir hizmet hesabı oluşturun.
gcloud iam service-accounts create tester
  1. Bu yeni hesap için, daha önce varsayılan hesabınız için aldığınıza benzer bir kimlik jetonu alırsınız. Ancak bunun için varsayılan hesabınızın, hizmet hesaplarının kimliğine bürünme iznine sahip olması gerekir. Hesabınıza bu izni verin.
export USER_EMAIL=$(gcloud config list account --format "value(core.account)")

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="user:$USER_EMAIL" \
  --role=roles/iam.serviceAccountTokenCreator
  1. Ardından, bu yeni hesap için kimlik jetonunu TEST_IDENTITY ortam değişkenine kaydetmek üzere aşağıdaki komutu çalıştırın. Komut bir hata mesajı gösteriyorsa bir iki dakika bekleyip tekrar deneyin.
export TEST_TOKEN=$( \
  gcloud auth print-identity-token \
    --impersonate-service-account \
    "tester@$PROJECT_ID.iam.gserviceaccount.com" \
)
  1. Kimlik doğrulaması yapılmış web isteğini, önceki gibi yapın ancak bu kimlik jetonunu kullanın:
curl -i -X GET $SERVICE_URL/partners \
  -H "Authorization: Bearer $TEST_TOKEN"

İstek kimliği doğrulanmış olsa da yetkilendirilmediği için komut çıktısı yine HTTP/2 403 ile başlar. Yeni hizmet hesabının bu uygulamayı çağırma izni yok.

Hesabı yetkilendirme

Bir kullanıcı veya hizmet hesabının, Cloud Run hizmetine istek gönderebilmesi için Cloud Run Çağırıcı rolüne sahip olması gerekir. Test kullanıcısı hizmet hesabına aşağıdaki komutu kullanarak bu rolü verin:

export REGION=us-central1
gcloud run services add-iam-policy-binding ${SERVICE_NAME} \
  --member="serviceAccount:tester@$PROJECT_ID.iam.gserviceaccount.com" \
  --role=roles/run.invoker \
  --region=${REGION}

Yeni rolün güncellenmesi için bir veya iki dakika bekledikten sonra kimlik doğrulaması yapılmış isteği tekrarlayın. İlk kaydedildikten bir saat veya daha uzun süre geçtiyse yeni bir TEST_TOKEN kaydedin.

curl -i -X GET $SERVICE_URL/partners \
  -H "Authorization: Bearer $TEST_TOKEN"

Komut çıkışı artık HTTP/1.1 200 OK ile başlar ve son satırda JSON yanıtı bulunur. Bu istek Cloud Run tarafından kabul edildi ve uygulama tarafından işlendi.

6. Programların kimliğini doğrulama ve kullanıcıların kimliğini doğrulama

Şimdiye kadar gönderdiğiniz kimlik doğrulaması yapılmış istekler için curl komut satırı aracı kullanıldı. Bunun yerine kullanılabilecek başka araçlar ve programlama dilleri vardır. Ancak kimliği doğrulanmış Cloud Run istekleri, düz web sayfalarına sahip bir web tarayıcısı kullanılarak yapılamaz. Kullanıcı bir bağlantıyı veya bir web sayfasındaki formu göndermek için bir düğmeyi tıkladığında tarayıcı, kimliği doğrulanmış istekler için Cloud Run tarafından gereken Authorization üstbilgisini eklemez.

Cloud Run'un yerleşik kimlik doğrulama mekanizması, son kullanıcılar tarafından değil, programlar tarafından kullanılmak üzere tasarlanmıştır.

Not:

Cloud Run, kullanıcılara yönelik web uygulamalarını barındırabilir ancak bu tür uygulamalar, Cloud Run'u kullanıcıların web tarayıcılarından gelen kimliği doğrulanmamış isteklere izin verecek şekilde ayarlamalıdır. Uygulamalar kullanıcı kimlik doğrulaması gerektiriyorsa Cloud Run'dan bunu yapmasını istemek yerine uygulamanın bunu yapması gerekir. Uygulama bunu Cloud Run dışındaki web uygulamalarının yaptığı şekilde yapabilir. Bunun nasıl yapıldığı bu codelab'in kapsamı dışındadır.

Şimdiye kadarki örnek isteklerin yanıtlarının web sayfaları değil, JSON nesneleri olduğunu fark etmiş olabilirsiniz. Bunun nedeni, bu iş ortağı kaydı hizmetinin programların kullanması için tasarlanmış olması ve JSON'un programların kullanabileceği uygun bir biçim olmasıdır. Ardından, bu verileri tüketmek ve kullanmak için bir program yazıp çalıştıracaksınız.

Python programından gelen kimliği doğrulanmış istekler

Bir program, standart HTTP web istekleri üzerinden güvenli bir Cloud Run uygulamasına kimliği doğrulanmış istekler gönderebilir ancak bu istekler Authorization üst bilgisi içermelidir. Bu programlar için tek yeni zorluk, bu üstbilgiye yerleştirilecek geçerli ve süresi dolmamış bir kimlik jetonu elde etmektir. Bu jeton, Google Cloud Identity and Access Management (IAM) kullanılarak Cloud Run tarafından doğrulanacağından jetonun IAM tarafından tanınan bir yetkili tarafından yayınlanması ve imzalanması gerekir. Programların bu tür bir jetonun verilmesini istemek için kullanabileceği birçok dilde istemci kitaplıkları mevcuttur. Bu örnekte Python google.auth istemci kitaplığı kullanılacaktır. Genel olarak web isteği göndermek için birkaç Python kitaplığı vardır. Bu örnekte popüler requests modülü kullanılmaktadır.

İlk adım, iki istemci kitaplığını yüklemektir:

pip install google-auth
pip install requests

Varsayılan kullanıcı için kimlik jetonu isteğinde bulunmaya yarayan Python kodu:

credentials, _ = google.auth.default()
credentials.refresh(google.auth.transport.requests.Request())
identity_token = credentials.id_token

Cloud Shell gibi bir komut kabuğu veya kendi bilgisayarınızda standart terminal kabuğu kullanıyorsanız varsayılan kullanıcı, söz konusu kabukta kimlik doğrulaması yapan kullanıcıdır. Cloud Shell'de bu genellikle Google'da oturum açmış kullanıcıdır. Diğer durumlarda, gcloud auth login veya başka bir gcloud komutuyla kimlik doğrulaması yapan kullanıcıdır. Kullanıcı hiç giriş yapmadıysa varsayılan kullanıcı olmaz ve bu kod başarısız olur.

Başka bir programdan istek alan bir program için genellikle bir kişinin kimliğini değil, istek gönderen programın kimliğini kullanmak istersiniz. Hizmet hesapları bu amaçla kullanılır. Cloud Run hizmetini, Cloud Firestore gibi API isteklerinde kullanacağı kimliği sağlayan özel bir hizmet hesabıyla dağıttınız. Bir program Google Cloud platformunda çalıştırıldığında istemci kitaplıkları, varsayılan kimliği olarak kendisine atanan hizmet hesabını otomatik olarak kullanır. Bu nedenle, aynı program kodu her iki durumda da çalışır.

Eklenmiş bir Yetkilendirme başlığıyla istek göndermek için Python kodu:

auth_header = {"Authorization": "Bearer " + identity_token}
response = requests.get(url, headers=auth_header)

Aşağıdaki eksiksiz Python programı, kayıtlı tüm iş ortaklarını almak için Cloud Run hizmetine kimlik doğrulaması yapılmış bir istek gönderir ve ardından adlarını ve atanan kimliklerini yazdırır. Bu kodu print_partners.py dosyasına kaydetmek için aşağıdaki komutu kopyalayıp çalıştırın.

cat > ./print_partners.py << EOF
def print_partners():
    import google.auth
    import google.auth.transport.requests
    import requests

    credentials, _ = google.auth.default()
    credentials.refresh(google.auth.transport.requests.Request())
    identity_token = credentials.id_token

    auth_header = {"Authorization": "Bearer " + identity_token}
    response = requests.get("${SERVICE_URL}/partners", headers=auth_header)

    parsed_response = response.json()
    partners = parsed_response["data"]

    for partner in partners:
        print(f"{partner['partnerId']}: {partner['name']}")


print_partners()
EOF

Bu programı bir kabuk komutuyla çalıştırırsınız. Programın bu kimlik bilgilerini kullanabilmesi için önce varsayılan kullanıcı olarak kimliğinizi doğrulamanız gerekir. Aşağıdaki gcloud auth komutunu çalıştırın:

gcloud auth application-default login

Giriş işlemini tamamlamak için talimatları uygulayın. Ardından programı komut satırından çalıştırın:

python print_partners.py

Çıkış şu şekilde görünür:

10102: Zippy food delivery
67292: Foodful

Program, kimliğinizle kimlik doğrulaması yapıldığı için Cloud Run hizmetine ulaştı. Bu projenin sahibi olduğunuzdan ve varsayılan olarak çalıştırma yetkiniz olduğundan programın isteği Cloud Run hizmetine ulaştı. Bu programın bir hizmet hesabının kimliği altında çalıştırılması daha yaygındır. Cloud Run veya App Engine gibi çoğu Google Cloud ürününde çalıştırıldığında varsayılan kimlik bir hizmet hesabı olur ve kişisel hesap yerine kullanılır.

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.