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

1. Genel Bakış

Güvenliği artırmak için bir hizmetin Cloud Run'a dağıtımıyla ilgili varsayılan adımları değiştirecek ve ardından dağıtılan uygulamaya güvenli bir şekilde erişmeyi öğreneceksiniz. Uygulama bir "iş ortağı kayıt hizmetidir" siparişlerini işleme almak için Cymbal Eats ile çalışan şirketler tarafından kullanılan Cymbal Eats uygulamasından

Öğrenecekleriniz

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

Ardından, uygulamaya erişimi nasıl yetkilendireceğinizi ve yetkilendirilmiş istekleri nasıl yapacağınızı görürsünüz.

Burada, uygulama dağıtımı güvenliğiyle ilgili kapsamlı bir inceleme sunulmamıştır. Ancak gelecekteki tüm uygulama dağıtımlarınızda, çok az çabayla güvenliklerini iyileştirecek değişiklikler yapabilirsiniz.

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.

Cloud Shell'i etkinleştirme

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

55efc1aaa7a4d3ad.png

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

9c92662c6a846a5c.png

Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.

9f0e51b578fecce5.png

İhtiyaç duyduğunuz tüm geliştirme araçları bu sanal makinede yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki çalışmalarınızın tamamı olmasa bile 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 ayarlandığını görürsünüz.

  1. Kimlik doğrulamanızın tamamlandığını onaylamak 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 projenizi bildiğini onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Doğru değilse 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 komut çalıştıracaksınız. Genellikle komutları kopyalayıp olduğu gibi yapıştırabilirsiniz ancak bazı durumlarda yer tutucu değerlerini doğru komutlarla değiştirmeniz gerekir.

  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 SERVICE_NAME=partner-registration-service
  1. Uygulamanızı çalıştıracak Cloud Run hizmet API'sini, NoSQL veri depolama alanını sağlayacak Firestore API'sini, dağıtım komutu tarafından kullanılacak Cloud Build API'yi ve derlendiğinde 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 App Engine API etkinleştirilmelidir.

Komutun, App Engine için kullanamayacağımız ancak geçmişe dayalı nedenlerle oluşturması gereken bir bölge ve veritabanı için bir bölge belirtmelidir. App Engine için us-central, veritabanı için de nam5 kullanacağız. nam5, ABD çok bölgeli konumudur. Çok bölgeli 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. BENİOKUUYU inceleyin

Düzenleyiciyi açın ve uygulamayı içeren dosyalara bakın. Bu uygulamanın dağıtımı için gereken adımların açıklandığı README.md dosyasını görüntüleyin. Bu adımlardan bazıları, göz önünde bulundurulması gereken örtülü veya açık güvenlik kararları içerebilir. Dağıtılan uygulamanızın güvenliğini iyileştirmek için bu seçeneklerden birkaçını aşağıda açıklandığı şekilde değiştireceksiniz:

3. Adım - npm install komutunu çalıştırın

Bir uygulamada kullanılan üçüncü taraf yazılımlarının kaynağını ve bütünlüğünü bilmek önemlidir. Yazılım Tedarik Zinciri Güvenliği'nin yönetilmesi, yalnızca Cloud Run'a dağıtılan uygulamaların değil, tüm yazılımların oluşturulmasıyla ilgilidir. Bu laboratuvar dağıtıma odaklandığından bu alana değinmez. Ancak bu konuyu ayrı olarak araştırmanız önerilir.

4. ve 5. adım: deploy.sh öğesini düzenleyin ve çalıştırın

Bu adımlar uygulamayı Cloud Run'a dağıtır. Çoğu seçenek varsayılanda kalır. Dağıtımı daha güvenli hale getirmek için bu adımı iki şekilde değiştireceksiniz:

  1. Kimliği doğrulanmayan erişime izin vermeyin. Keşif sırasında bir şeyler denemek için buna izin vermek kolaylık sağlayabilir ancak bu, ticari iş ortaklarının kullanımına yönelik bir web hizmetidir ve her zaman kullanıcıların kimliğini doğrulamalıdır.
  2. Uygulamanın, muhtemelen gerekenden daha fazla API ve kaynak erişimine sahip olacak varsayılan bir hesap yerine, yalnızca gerekli ayrıcalıklara sahip olan özel bir hizmet hesabı kullanması gerektiğini belirtin. Bu en az ayrıcalık ilkesi olarak bilinir ve uygulama güvenliği için temel bir kavramdır.

6-11. adımlar: Doğru davranışı doğrulamak için örnek web isteklerinde bulunun

Uygulama dağıtımı artık kimlik doğrulama gerektirdiğinden, bu isteklerde artık istekte bulunanın kimliğini gösteren bir kanıt bulunmalı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 gerektiği gibi tanımlanan iki değişiklik vardı: kimliği doğrulanmamış erişime izin vermeme ve minimum ayrıcalığa sahip özel bir hizmet hesabı kullanma.

Önce yeni bir hizmet hesabı oluşturacaksınız.Ardından, deploy.sh komut dosyasını bu hizmet hesabına referans verecek ve kimlik doğrulamasız erişime izin vermeyecek şekilde düzenleyeceksiniz. Ardından, değiştirilmiş komut dosyasını çalıştırabilmemiz için önce değiştirilmiş komut dosyasını çalıştırarak hizmeti dağıtın.

Bir hizmet hesabı oluşturun ve bu hesap için Firestore/Datastore erişimine izin 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 disallow(–no-allow-unauthenticated) ve dağıtılan uygulama için yeni hizmet hesabını (hizmet-hesabı) belirtecek şekilde değiştirin. GOOGLE_PROJECT_ID değerini kendi projenizin kimliği olarak düzeltin.

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

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 çıkışı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, çıkışa yanıt başlıklarını dahil etmesini söyler. Çıkışın ilk satırı şöyle olmalıdır:

HTTP/2 403

Uygulama, kimliği doğrulanmamış istekleri reddetme seçeneğiyle dağıtılmıştır. Bu curl komutu kimlik doğrulama bilgisi içermediğinden Cloud Run tarafından reddedildi. Dağıtılan gerçek uygulama bile bu isteği çalıştırmaz veya istekten veri almaz.

5. Kimliği Doğrulanmış İstekler Yapma

Dağıtılan uygulama, web istekleri yapılarak çağrılır. Cloud Run'ın izin vermesi için bu isteklerin doğrulanması gerekir. Web isteklerinin kimliği, formun Authorization üstbilgisi eklenerek doğrulanır:

Authorization: Bearer identity-token

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

Kullanıcı hesabınız olarak istekte bulunma

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

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

Varsayılan olarak, Google tarafından verilen kimlik jetonları bir saat boyunca geçerlidir. Yetki verilmediğinden daha önce reddedilen isteği gerçekleştirmek için 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 çıkışı, isteğin kabul edildiğini ve kabul edildiğini gösterecek şekilde HTTP/2 200 ile başlamalıdır. (Bir saat bekleyip bu isteği tekrar denerseniz jetonun süresi dolduğu için istek başarısız olacaktır.) Yanıtın gövdesi, çıkışın sonunda, boş bir satırın ardındandı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"

Kayıtlı iki iş ortağı hakkında bilgi veren ve çok daha fazla içeriğe sahip JSON verileri görürsünüz.

Yetkisiz hesap olarak istekte bulunma

Son adımda yapılan kimliği doğrulanmış istek yalnızca kimliğinin doğrulandığı için değil, aynı zamanda kimliği doğrulanmış kullanıcının (hesabınız) yetkilendirildiği için de başarılı olmuştur. Yani hesabın uygulamayı çağırma izni vardır. Kimliği doğrulanmış hesapların hepsi bu işlem için yetkilendirilmez.

Önceki istekte kullanılan varsayılan hesap, uygulamayı içeren projeyi oluşturan ve varsayılan olarak bu hesaba hesaptaki tüm Cloud Run uygulamalarını çağırma izni veren hesap olduğundan yetkilendirilmiştir. Bu izin gerekirse iptal edilebilir. Bu da üretim uygulamasında tercih edilir. Bunu şimdi yapmak yerine, kendisine hiçbir ayrıcalık veya rol atanmamış yeni bir hizmet hesabı oluşturacak ve bu hesabı kullanarak dağıtılan uygulamaya erişmeye çalışacaksınız.

  1. tester adında bir hizmet hesabı oluşturun.
gcloud iam service-accounts create tester
  1. Bu yeni hesap için kimlik jetonunu, daha önce varsayılan hesabınız için aldığınız şekilde alırsınız. Ancak bunun için varsayılan hesabınızın hizmet hesaplarının kimliğine bürünme izni 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. Şimdi, TEST_IDENTITY ortam değişkenindeki bu yeni hesap için bir kimlik jetonu kaydetmek üzere aşağıdaki komutu çalıştırın. Komutta hata mesajı gösterilirse bir iki dakika bekleyip tekrar deneyin.
export TEST_TOKEN=$( \
  gcloud auth print-identity-token \
    --impersonate-service-account \
    "tester@$PROJECT_ID.iam.gserviceaccount.com" \
)
  1. Bu kimlik jetonunu kullanarak, kimliği doğrulanmış web isteğini önceki gibi yapın:
curl -i -X GET $SERVICE_URL/partners \
  -H "Authorization: Bearer $TEST_TOKEN"

İstek kimliği doğrulanmış olmasına rağmen yetkilendirilmediğinden komut çıkışı tekrar HTTP/2 403 ile başlar. Yeni hizmet hesabının bu uygulamayı çağırma izni yok.

Bir hesaba yetki verme

Bir kullanıcı veya hizmet hesabına istek gönderilebilmesi için kullanıcı veya hizmet hesabının Cloud Run hizmetinde Cloud Run Çağırıcısı rolüne sahip olması gerekir. Test kullanıcısı hizmet hesabına şu 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 kimliği doğrulanmış isteği tekrarlayın. İlk kaydedilmesinden bu yana bir saat veya daha uzun bir 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şlıyor ve son satır JSON yanıtını içeriyor. Bu istek Cloud Run tarafından kabul edildi ve uygulama tarafından işlendi.

6. Programları ve kullanıcı kimliklerini doğrulama

Şimdiye kadar yaptığınız kimliği doğrulanmış isteklerde curl komut satırı aracı kullanıldı. Bunun yerine kullanılabilecek başka araçlar ve programlama dilleri de vardır. Ancak, kimliği doğrulanmış Cloud Run istekleri, düz web sayfaları olan bir web tarayıcısı kullanılarak yapılamaz. Kullanıcı bir bağlantıyı veya web sayfasında form göndermek için bir düğmeyi tıklarsa tarayıcı, kimliği doğrulanmış istekler için Cloud Run'ın gerektirdiği Authorization üst bilgisini eklemez.

Cloud Run'ın yerleşik kimlik doğrulama mekanizması son kullanıcıların değil, programların kullanımı için tasarlanmıştır.

Not:

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

Şimdiye kadar örnek isteklere verilen yanıtların web sayfaları değil, JSON nesneleri olduğunu fark etmiş olabilirsiniz. Bunun nedeni, bu iş ortağı kayıt hizmetinin kullanılacak programların tasarlanması ve JSON'ın bu programların kullanması için uygun bir biçim olmasıdır. Ardından, bu verileri kullanmak ve kullanmak için bir program yazıp çalıştıracaksınız.

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

Bir program, Authorization üstbilgisi de dahil olmak üzere standart HTTP web istekleri aracılığıyla güvenli bir Cloud Run uygulamasının kimliği doğrulanmış isteklerini yapabilir. Bu programların tek zorluğu, ilgili başlığa yerleştirilecek geçerli ve süresi dolmamış bir kimlik jetonu almaktır. Bu jeton, Google Cloud Identity and Access Management (IAM) kullanılarak Cloud Run tarafından doğrulanacaktır. Bu nedenle jetonun IAM tarafından tanınan bir yetkili tarafından verilmesi ve imzalanması gerekir. Birçok dilde, programların bu tür bir jetonun verilmesini istemek için kullanabileceği istemci kitaplıkları bulunur. Bu örneğin kullanacağı istemci kitaplığı, Python google.auth kitaplığıdır. Genel olarak web isteğinde bulunmak için çeşitli Python kitaplıkları 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 isteyecek Python kodu:

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

Bilgisayarınızda Cloud Shell gibi bir komut kabuğu veya standart terminal kabuğu kullanıyorsanız varsayılan kullanıcı bu kabuğun içinde kimlik doğrulaması yapılan kullanıcıdır. Cloud Shell'de bu işlem genellikle kullanıcı Google'a giriş yapar. Diğer durumlarda, gcloud auth login veya diğer gcloud komutuyla kimliği doğrulanmış 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 istekte bulunan bir program için, genellikle bir kişinin kimliğini değil, istekte bulunan programın kimliğini kullanmak istersiniz. Hizmet hesapları bunun için kullanılmaktadır. Cloud Run hizmetini, Cloud Firestore gibi API isteklerinde kullandığı 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ı kendisine atanan hizmet hesabını otomatik olarak varsayılan kimlik olarak kullanır. Böylece her iki durumda da aynı program kodu çalışır.

Yetkilendirme üst bilgisi eklenmiş bir istekte bulunmak için kullanılacak Python kodu:

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

Aşağıdaki eksiksiz Python programı, tüm kayıtlı iş ortaklarını almak ve ardından bunların adlarını ve atanan kimliklerini yazdırmak için Cloud Run hizmetine kimliği doğrulanmış bir istekte bulunur. 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ıracaksınız. Programın bu kimlik bilgilerini kullanabilmesi için öncelikle 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ış şuna benzer:

10102: Zippy food delivery
67292: Foodful

Programın isteği, kimliğinizle kimliği doğrulandığı ve bu projenin sahibi olduğunuz için projeyi varsayılan olarak çalıştırma yetkiniz olduğu için Cloud Run hizmetine ulaştı. Bu programın bir hizmet hesabı kimliği altında çalışması 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, 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.