استقرار ایمن در Cloud Run

1. بررسی اجمالی

شما مراحل پیش‌فرض برای استقرار یک سرویس در Cloud Run را تغییر می‌دهید تا امنیت را بهبود ببخشید و سپس نحوه دسترسی به برنامه مستقر شده را به روشی امن مشاهده خواهید کرد. این برنامه یک "سرویس ثبت شریک" برنامه Cymbal Eats است که توسط شرکت هایی که با Cymbal Eats کار می کنند برای پردازش سفارشات غذا استفاده می شود.

آنچه خواهید آموخت

با ایجاد چند تغییر کوچک در حداقل مراحل پیش‌فرض برای استقرار یک برنامه در Cloud Run، می‌توانید امنیت آن را به میزان قابل توجهی افزایش دهید. یک برنامه موجود و دستورالعمل‌های استقرار را دریافت می‌کنید و مراحل استقرار را برای بهبود امنیت برنامه مستقر شده تغییر می‌دهید.

سپس نحوه مجوز دسترسی به برنامه و درخواست های مجاز را خواهید دید.

این یک نگاه جامع به امنیت استقرار برنامه نیست، بلکه نگاهی به تغییراتی است که می‌توانید در همه استقرار برنامه‌های آینده خود ایجاد کنید که امنیت آنها را با تلاش بسیار کمی بهبود می‌بخشد.

2. راه اندازی و الزامات

تنظیم محیط خود به خود

  1. به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. شما می توانید آن را در هر زمان به روز کنید.
  • شناسه پروژه در تمام پروژه‌های Google Cloud منحصربه‌فرد است و تغییرناپذیر است (پس از تنظیم نمی‌توان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (معمولاً به عنوان PROJECT_ID شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، می‌توانید خودتان را امتحان کنید و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند.
  • برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
  1. در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، می توانید منابعی را که ایجاد کرده اید حذف کنید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

Cloud Shell را فعال کنید

  1. از Cloud Console، روی Activate Cloud Shell کلیک کنید 853e55310c205094.png .

55efc1aaa7a4d3ad.png

اگر قبلاً Cloud Shell را راه‌اندازی نکرده‌اید، یک صفحه میانی (در زیر تاشو) برای شما نمایش داده می‌شود که آن را توصیف می‌کند. اگر اینطور است، روی Continue کلیک کنید (و دیگر آن را نخواهید دید). در اینجا به نظر می رسد که آن صفحه یک بار مصرف:

9c92662c6a846a5c.png

تهیه و اتصال به Cloud Shell فقط باید چند لحظه طول بکشد.

9f0e51b578fecce5.png

این ماشین مجازی با تمام ابزارهای توسعه مورد نیاز شما بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. بیشتر، اگر نه همه، کار شما در این کد لبه را می توان به سادگی با یک مرورگر یا Chromebook انجام داد.

پس از اتصال به Cloud Shell، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی ID پروژه شما تنظیم شده است.

  1. برای تایید احراز هویت، دستور زیر را در Cloud Shell اجرا کنید:
gcloud auth list

خروجی فرمان

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

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. دستور زیر را در Cloud Shell اجرا کنید تا تأیید کنید که دستور gcloud از پروژه شما اطلاع دارد:
gcloud config list project

خروجی فرمان

[core]
project = <PROJECT_ID>

اگر اینطور نیست، می توانید آن را با این دستور تنظیم کنید:

gcloud config set project <PROJECT_ID>

خروجی فرمان

Updated property [core/project].

راه اندازی محیط

شما دستورات را در خط فرمان Cloud Shell برای این آزمایشگاه اجرا خواهید کرد. معمولاً می‌توانید دستورات را کپی کرده و آن‌ها را همان‌طور که هستند جای‌گذاری کنید، اگرچه در برخی موارد باید مقادیر مکان‌نما را برای تصحیح تغییر دهید.

  1. یک متغیر محیطی را برای استفاده در دستورات بعدی روی Project ID تنظیم کنید:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export SERVICE_NAME=partner-registration-service
  1. API سرویس Cloud Run که برنامه شما را اجرا می‌کند، API Firestore که ذخیره‌سازی داده NoSQL را فراهم می‌کند، API Cloud Build که توسط فرمان استقرار استفاده می‌شود، و رجیستری Artifact که برای نگهداری کانتینر برنامه در هنگام ساخت استفاده می‌شود، فعال کنید. :
gcloud services enable \
  run.googleapis.com \
  firestore.googleapis.com \
  cloudbuild.googleapis.com \
  artifactregistry.googleapis.com
  1. پایگاه داده Firestore را در حالت Native راه اندازی کنید. این دستور از App Engine API استفاده می کند، بنابراین ابتدا باید آن را فعال کنید.

دستور باید یک منطقه برای App Engine مشخص کند، که ما از آن استفاده نمی کنیم، بلکه باید به دلایل تاریخی ایجاد کنیم، و یک منطقه برای پایگاه داده. ما از us-central برای App Engine و nam5 برای پایگاه داده استفاده خواهیم کرد. nam5 مکان چند منطقه ای ایالات متحده است. مکان های چند منطقه ای در دسترس بودن و دوام پایگاه داده را به حداکثر می رساند.

gcloud services enable appengine.googleapis.com

gcloud app create --region=us-central
gcloud firestore databases create --region=nam5
  1. مخزن نمونه برنامه را کلون کنید و به دایرکتوری بروید
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git

cd cymbal-eats/partner-registration-service

3. README را مرور کنید

ویرایشگر را باز کنید و به فایل های شامل برنامه نگاه کنید. README.md را مشاهده کنید، که مراحل لازم برای استقرار این برنامه را شرح می دهد. برخی از این مراحل ممکن است شامل تصمیمات امنیتی ضمنی یا صریح برای در نظر گرفتن باشد. همانطور که در اینجا توضیح داده شده است، تعدادی از این انتخاب ها را برای بهبود امنیت برنامه مستقر خود تغییر خواهید داد:

مرحله 3 - npm install اجرا کنید

دانستن منشأ و یکپارچگی هر نرم افزار شخص ثالثی که در یک برنامه استفاده می شود بسیار مهم است. مدیریت امنیت زنجیره تامین نرم افزار مربوط به ساخت هر نرم افزاری است، نه فقط برنامه هایی که در Cloud Run مستقر شده اند. این آزمایشگاه بر روی استقرار متمرکز شده است، بنابراین به این حوزه نمی پردازد، اما ممکن است بخواهید این موضوع را جداگانه تحقیق کنید.

مراحل 4 و 5 - deploy.sh را ویرایش و اجرا کنید

این مراحل، برنامه را در Cloud Run مستقر می‌کند و اکثر گزینه‌ها را در حالت پیش‌فرض قرار می‌دهد. شما این مرحله را برای ایمن تر کردن استقرار به دو روش کلیدی تغییر خواهید داد:

  1. اجازه دسترسی بدون احراز هویت را ندهید . این می تواند برای آزمایش چیزها در حین کاوش راحت باشد، اما این یک سرویس وب برای استفاده شرکای تجاری است و همیشه باید کاربرانش را احراز هویت کند.
  2. مشخص کنید که برنامه باید از یک حساب سرویس اختصاصی که فقط دارای امتیازات لازم است استفاده کند، به جای یک حساب پیش‌فرض که احتمالاً دسترسی به API و منابع بیشتری نسبت به نیاز دارد. این به عنوان اصل حداقل امتیاز شناخته می شود و یک مفهوم اساسی امنیت برنامه است.

مراحل 6 تا 11 - نمونه درخواست های وب را برای تأیید رفتار صحیح انجام دهید

از آنجایی که استقرار برنامه اکنون نیاز به احراز هویت دارد، این درخواست‌ها اکنون باید دارای مدرک هویت درخواست‌کننده باشند. به جای تغییر این فایل ها، مستقیماً از خط فرمان درخواست می دهید.

4. به طور ایمن سرویس را مستقر کنید

دو تغییر در صورت نیاز در اسکریپت deploy.sh شناسایی شد: عدم اجازه دسترسی غیرقانونی و استفاده از یک حساب سرویس اختصاصی با حداقل امتیازات.

ابتدا یک حساب سرویس جدید ایجاد می‌کنید، سپس اسکریپت deploy.sh را ویرایش می‌کنید تا به آن حساب سرویس ارجاع داده شود و دسترسی غیرقانونی را مجاز نکنید، سپس با اجرای اسکریپت اصلاح‌شده، سرویس را قبل از اینکه بتوانیم اسکریپت تغییر یافته deploy.sh را اجرا کنیم، گسترش دهید.

یک حساب کاربری ایجاد کنید و به آن دسترسی لازم را به Firestore/Datastore بدهید

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 را ویرایش کنید

فایل deploy.sh را تغییر دهید تا دسترسی غیرمجاز (–no-allow-unauthenticated) غیر مجاز باشد و حساب سرویس جدید (–service-account) برای برنامه مستقر شده مشخص شود. GOOGLE_PROJECT_ID را تصحیح کنید تا شناسه پروژه شما باشد.

شما دو خط اول را حذف خواهید کرد و سه خط دیگر را مطابق شکل زیر تغییر خواهید داد.

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

سرویس را مستقر کنید

از خط فرمان، اسکریپت deploy.sh را اجرا کنید:

./deploy.sh

هنگامی که استقرار کامل شد، آخرین خط خروجی فرمان URL سرویس برنامه جدید را نشان می دهد. URL را در یک متغیر محیطی ذخیره کنید:

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

اکنون سعی کنید با استفاده از ابزار curl یک سفارش از برنامه دریافت کنید:

curl -i -X GET $SERVICE_URL/partners

پرچم -i برای دستور curl به آن می گوید که سرصفحه های پاسخ را در خروجی قرار دهد. خط اول خروجی باید به صورت زیر باشد:

HTTP/2 403

این برنامه با گزینه ای برای غیرمجاز کردن درخواست های احراز هویت نشده مستقر شد. این دستور curl حاوی اطلاعات احراز هویت نیست، بنابراین توسط Cloud Run رد می شود. برنامه واقعی مستقر شده حتی هیچ داده ای را از این درخواست اجرا نمی کند یا دریافت نمی کند.

5. درخواست های احراز هویت شده ارسال کنید

برنامه مستقر شده با ایجاد درخواست های وب فراخوانی می شود، که اکنون باید برای Cloud Run احراز هویت شوند تا به آنها اجازه دهد. درخواست‌های وب با گنجاندن سرصفحه Authorization در فرم احراز هویت می‌شوند:

Authorization: Bearer identity-token حامل

شناسه یک رشته رمزگذاری شده کوتاه مدت با امضای رمزنگاری شده است که توسط یک ارائه دهنده احراز هویت قابل اعتماد صادر می شود. در این مورد، یک رمز هویت منقضی نشده معتبر و صادر شده توسط Google مورد نیاز است.

درخواستی را به عنوان حساب کاربری خود ارسال کنید

ابزار Google Cloud CLI می تواند یک توکن برای کاربر تأیید شده پیش فرض ارائه دهد. این دستور را اجرا کنید تا یک رمز هویت برای حساب خود دریافت کنید و آن را در متغیر محیطی ID_TOKEN ذخیره کنید:

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

به‌طور پیش‌فرض، توکن‌های هویتی صادر شده توسط Google برای یک ساعت اعتبار دارند. دستور curl زیر را اجرا کنید تا درخواستی را که قبلاً به دلیل مجاز نبودن رد شده بود، ایجاد کنید. این دستور شامل هدر لازم خواهد بود:

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

خروجی فرمان باید با HTTP/2 200 شروع شود که نشان می دهد درخواست قابل قبول است و در حال انجام است. (اگر یک ساعت صبر کنید و دوباره این درخواست را امتحان کنید، با شکست مواجه می‌شود، زیرا نشانه منقضی شده است.) بدنه پاسخ در انتهای خروجی، پس از یک خط خالی است:

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

هنوز شریکی وجود ندارد.

شرکا را با استفاده از داده های نمونه JSON در دایرکتوری با دو دستور curl ثبت کنید:

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

و

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

درخواست قبلی GET را تکرار کنید تا اکنون همه شرکای ثبت شده را ببینید:

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

باید داده‌های JSON را با محتوای بسیار بیشتری ببینید که اطلاعاتی درباره دو شریک ثبت‌شده ارائه می‌دهد.

به عنوان یک حساب کاربری غیرمجاز درخواست دهید

درخواست احراز هویت شده در آخرین مرحله نه تنها به این دلیل که احراز هویت شده بود، بلکه به این دلیل که کاربر احراز هویت شده (حساب شما) مجاز بود، موفق شد. یعنی حساب مجوز فراخوانی برنامه را داشت. همه حساب‌های احراز هویت شده مجاز به انجام این کار نیستند.

حساب پیش‌فرض مورد استفاده در درخواست قبلی مجاز است زیرا این حسابی است که پروژه حاوی برنامه را ایجاد کرده است و به طور پیش‌فرض به آن اجازه می‌دهد تا هر برنامه‌ای را در Cloud Run در حساب فراخوانی کند. در صورت نیاز می توان آن مجوز را لغو کرد که در یک برنامه تولیدی مطلوب است. به جای انجام آن در حال حاضر، یک حساب سرویس جدید بدون هیچ امتیاز یا نقشی ایجاد می‌کنید و از آن برای دسترسی به برنامه مستقر شده استفاده می‌کنید.

  1. یک حساب سرویس به نام tester ایجاد کنید.
gcloud iam service-accounts create tester
  1. شما یک رمز هویت برای این حساب جدید دریافت خواهید کرد، دقیقاً به همان روشی که قبلاً برای حساب پیش فرض خود یکی را دریافت کردید. با این حال، لازم است حساب پیش‌فرض شما مجوز جعل هویت حساب‌های سرویس را داشته باشد. این مجوز را به حساب خود بدهید.
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. اکنون دستور زیر را اجرا کنید تا یک رمز هویت برای این حساب جدید در متغیر محیطی TEST_IDENTITY ذخیره شود. اگر دستور پیغام خطا نشان داد، یک یا دو دقیقه صبر کنید و دوباره امتحان کنید.
export TEST_TOKEN=$( \
  gcloud auth print-identity-token \
    --impersonate-service-account \
    "tester@$PROJECT_ID.iam.gserviceaccount.com" \
)
  1. درخواست وب تأیید شده را مانند قبل انجام دهید، اما با استفاده از این رمز هویت:
curl -i -X GET $SERVICE_URL/partners \
  -H "Authorization: Bearer $TEST_TOKEN"

خروجی فرمان دوباره با HTTP/2 403 شروع می‌شود، زیرا درخواست، اگرچه احراز هویت شده است ، مجاز نیست. حساب سرویس جدید مجوز فراخوانی این برنامه را ندارد.

مجوز دادن به یک حساب کاربری

یک حساب کاربری یا سرویس باید نقش Cloud Run Invoker را در سرویس Cloud Run داشته باشد تا بتواند به آن درخواست بدهد. این نقش را با دستور به حساب سرویس تستر بدهید:

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}

پس از یک یا دو دقیقه منتظر ماندن برای به روز رسانی نقش جدید، درخواست احراز هویت شده را تکرار کنید. اگر یک ساعت یا بیشتر از اولین ذخیره آن گذشته است، یک TEST_TOKEN جدید ذخیره کنید.

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

خروجی فرمان اکنون با HTTP/1.1 200 OK شروع می شود و آخرین خط حاوی پاسخ JSON است. این درخواست توسط Cloud Run پذیرفته شد و توسط برنامه پردازش شد.

6. برنامه های احراز هویت در مقابل کاربران احراز هویت

درخواست‌های احراز هویتی که تاکنون انجام داده‌اید از ابزار خط فرمان curl استفاده کرده‌اند. ابزارها و زبان های برنامه نویسی دیگری نیز وجود دارند که می توانستند به جای آن استفاده شوند. با این حال، درخواست های Cloud Run احراز هویت شده را نمی توان با استفاده از یک مرورگر وب با صفحات وب ساده انجام داد. اگر کاربر روی پیوندی کلیک کند یا روی دکمه ای برای ارسال فرم در یک صفحه وب کلیک کند، مرورگر سرصفحه Authorization مورد نیاز Cloud Run را برای درخواست های احراز هویت اضافه نمی کند.

مکانیزم احراز هویت داخلی Cloud Run برای استفاده توسط برنامه ها در نظر گرفته شده است، نه توسط کاربران نهایی.

توجه داشته باشید:

Cloud Run می‌تواند میزبان برنامه‌های کاربردی وب کاربر باشد، اما این نوع برنامه‌ها باید Cloud Run را طوری تنظیم کنند که درخواست‌های احراز هویت نشده از مرورگرهای وب کاربران را مجاز کند. اگر برنامه‌ها نیاز به احراز هویت کاربر دارند، برنامه باید به جای درخواست از Cloud Run آن را مدیریت کند. برنامه می تواند این کار را به همان روشی که برنامه های وب خارج از Cloud Run انجام می دهند، انجام دهد. نحوه انجام این کار خارج از محدوده این Codelab است.

ممکن است متوجه شده باشید که پاسخ‌ها به درخواست‌های نمونه تاکنون، اشیاء JSON بوده‌اند، نه صفحات وب. دلیل آن این است که این سرویس ثبت شریک برای استفاده برنامه‌ها در نظر گرفته شده است و JSON فرم مناسبی برای استفاده آنهاست. در مرحله بعد، برنامه ای را برای مصرف و استفاده از این داده ها می نویسید و اجرا می کنید.

درخواست های تایید شده از یک برنامه پایتون

یک برنامه می‌تواند درخواست‌های احراز هویت یک برنامه Cloud Run ایمن را از طریق درخواست‌های وب HTTP استاندارد، اما شامل سرصفحه Authorization ، ارسال کند. تنها چالش جدید برای آن برنامه‌ها دریافت یک رمز هویت معتبر و منقضی نشده برای قرار دادن در آن سربرگ است. این توکن توسط Cloud Run با استفاده از Google Cloud Identity and Access Management (IAM) اعتبارسنجی می‌شود، بنابراین رمز باید توسط مرجعی که توسط IAM شناخته شده است صادر و امضا شود. کتابخانه‌های سرویس گیرنده‌ای به زبان‌های بسیاری وجود دارد که برنامه‌ها می‌توانند از آنها برای درخواست صدور چنین توکنی استفاده کنند. کتابخانه سرویس گیرنده ای که این مثال استفاده می کند، Python google.auth one است. چندین کتابخانه پایتون برای ایجاد درخواست های وب به طور کلی وجود دارد. این مثال از ماژول requests محبوب استفاده می کند.

اولین مرحله نصب دو کتابخانه مشتری است:

pip install google-auth
pip install requests

کد پایتون برای درخواست رمز هویت برای کاربر پیش‌فرض عبارت است از:

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

اگر از پوسته فرمانی مانند Cloud Shell یا پوسته ترمینال استاندارد در رایانه خود استفاده می کنید، کاربر پیش فرض هر کدام از آنها در داخل پوسته احراز هویت شده است. در Cloud Shell معمولاً کاربری است که وارد Google شده است. در موارد دیگر، هر کاربری که با gcloud auth login یا سایر دستورات gcloud احراز هویت شده باشد. اگر کاربر هرگز وارد نشده باشد، کاربر پیش فرضی وجود نخواهد داشت و این کد از کار می افتد.

برای برنامه ای که از برنامه دیگری درخواست می کند، معمولاً نمی خواهید از هویت یک شخص استفاده کنید، بلکه از هویت برنامه درخواست کننده استفاده کنید. این همان چیزی است که حساب های خدماتی برای آن هستند. شما سرویس Cloud Run را با یک حساب سرویس اختصاصی مستقر کرده اید که هویتی را که هنگام درخواست API استفاده می کند، مانند Cloud Firestore، ارائه می دهد. هنگامی که یک برنامه در یک پلت فرم Google Cloud اجرا می شود، کتابخانه های سرویس گیرنده به طور خودکار از حساب سرویس اختصاص داده شده به آن به عنوان هویت پیش فرض آن استفاده می کنند، بنابراین کد برنامه یکسان در هر دو موقعیت کار می کند.

کد پایتون برای درخواست با هدر مجوز اضافه شده عبارت است از:

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

برنامه کامل پایتون زیر یک درخواست احراز هویت از سرویس Cloud Run برای بازیابی همه شرکای ثبت‌شده و سپس چاپ نام و شناسه‌های اختصاص داده شده آن‌ها ارائه می‌کند. دستور زیر را کپی و اجرا کنید تا این کد در فایل print_partners.py ذخیره شود.

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

این برنامه را با دستور shell اجرا خواهید کرد. ابتدا باید به عنوان کاربر پیش فرض احراز هویت کنید تا برنامه بتواند از آن اعتبارنامه ها استفاده کند. دستور gcloud auth زیر را اجرا کنید:

gcloud auth application-default login

دستورالعمل ها را برای تکمیل ورود دنبال کنید. سپس برنامه را از خط فرمان اجرا کنید:

python print_partners.py

خروجی چیزی شبیه به زیر خواهد بود:

10102: Zippy food delivery
67292: Foodful

درخواست این برنامه به سرویس Cloud Run رسید زیرا با هویت شما احراز هویت شد و شما مالک این پروژه هستید و بنابراین به طور پیش فرض مجاز به اجرای آن هستید. معمول تر است که این برنامه تحت شناسه یک حساب سرویس اجرا شود. هنگامی که در اکثر محصولات Google Cloud اجرا می شود، مانند Cloud Run یا App Engine، هویت پیش فرض یک حساب سرویس خواهد بود و به جای حساب شخصی استفاده می شود.

7. تبریک می گویم!

تبریک می گویم، شما نرم افزار کد را تمام کردید!

بعدش چیه:

سایر کدهای Cymbal Eats را کاوش کنید:

پاک کردن

برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این آموزش، یا پروژه حاوی منابع را حذف کنید یا پروژه را نگه دارید و منابع فردی را حذف کنید.

حذف پروژه

ساده ترین راه برای حذف صورتحساب، حذف پروژه ای است که برای آموزش ایجاد کرده اید.