1. بررسی اجمالی
شما مراحل پیشفرض برای استقرار یک سرویس در Cloud Run را تغییر میدهید تا امنیت را بهبود ببخشید و سپس نحوه دسترسی به برنامه مستقر شده را به روشی امن مشاهده خواهید کرد. این برنامه یک "سرویس ثبت شریک" برنامه Cymbal Eats است که توسط شرکت هایی که با Cymbal Eats کار می کنند برای پردازش سفارشات غذا استفاده می شود.
آنچه خواهید آموخت
با ایجاد چند تغییر کوچک در حداقل مراحل پیشفرض برای استقرار یک برنامه در Cloud Run، میتوانید امنیت آن را به میزان قابل توجهی افزایش دهید. یک برنامه موجود و دستورالعملهای استقرار را دریافت میکنید و مراحل استقرار را برای بهبود امنیت برنامه مستقر شده تغییر میدهید.
سپس نحوه مجوز دسترسی به برنامه و درخواست های مجاز را خواهید دید.
این یک نگاه جامع به امنیت استقرار برنامه نیست، بلکه نگاهی به تغییراتی است که میتوانید در همه استقرار برنامههای آینده خود ایجاد کنید که امنیت آنها را با تلاش بسیار کمی بهبود میبخشد.
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. شما می توانید آن را در هر زمان به روز کنید.
- شناسه پروژه در تمام پروژههای Google Cloud منحصربهفرد است و تغییرناپذیر است (پس از تنظیم نمیتوان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (معمولاً به عنوان
PROJECT_ID
شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، میتوانید خودتان را امتحان کنید و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند. - برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
- در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، می توانید منابعی را که ایجاد کرده اید حذف کنید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
Cloud Shell را فعال کنید
- از Cloud Console، روی Activate Cloud Shell کلیک کنید .
اگر قبلاً Cloud Shell را راهاندازی نکردهاید، یک صفحه میانی (در زیر تاشو) برای شما نمایش داده میشود که آن را توصیف میکند. اگر اینطور است، روی Continue کلیک کنید (و دیگر آن را نخواهید دید). در اینجا به نظر می رسد که آن صفحه یک بار مصرف:
تهیه و اتصال به Cloud Shell فقط باید چند لحظه طول بکشد.
این ماشین مجازی با تمام ابزارهای توسعه مورد نیاز شما بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. بیشتر، اگر نه همه، کار شما در این کد لبه را می توان به سادگی با یک مرورگر یا Chromebook انجام داد.
پس از اتصال به Cloud Shell، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی ID پروژه شما تنظیم شده است.
- برای تایید احراز هویت، دستور زیر را در 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`
- دستور زیر را در Cloud Shell اجرا کنید تا تأیید کنید که دستور gcloud از پروژه شما اطلاع دارد:
gcloud config list project
خروجی فرمان
[core] project = <PROJECT_ID>
اگر اینطور نیست، می توانید آن را با این دستور تنظیم کنید:
gcloud config set project <PROJECT_ID>
خروجی فرمان
Updated property [core/project].
راه اندازی محیط
شما دستورات را در خط فرمان Cloud Shell برای این آزمایشگاه اجرا خواهید کرد. معمولاً میتوانید دستورات را کپی کرده و آنها را همانطور که هستند جایگذاری کنید، اگرچه در برخی موارد باید مقادیر مکاننما را برای تصحیح تغییر دهید.
- یک متغیر محیطی را برای استفاده در دستورات بعدی روی Project ID تنظیم کنید:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export SERVICE_NAME=partner-registration-service
- 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
- پایگاه داده 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
- مخزن نمونه برنامه را کلون کنید و به دایرکتوری بروید
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 مستقر میکند و اکثر گزینهها را در حالت پیشفرض قرار میدهد. شما این مرحله را برای ایمن تر کردن استقرار به دو روش کلیدی تغییر خواهید داد:
- اجازه دسترسی بدون احراز هویت را ندهید . این می تواند برای آزمایش چیزها در حین کاوش راحت باشد، اما این یک سرویس وب برای استفاده شرکای تجاری است و همیشه باید کاربرانش را احراز هویت کند.
- مشخص کنید که برنامه باید از یک حساب سرویس اختصاصی که فقط دارای امتیازات لازم است استفاده کند، به جای یک حساب پیشفرض که احتمالاً دسترسی به 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 در حساب فراخوانی کند. این مجوز می تواند در صورت نیاز لغو شود، که در یک برنامه تولیدی مطلوب است. به جای انجام آن در حال حاضر، یک حساب سرویس جدید بدون هیچ امتیاز یا نقشی ایجاد میکنید و از آن برای دسترسی به برنامه مستقر شده استفاده میکنید.
- یک حساب سرویس به نام
tester
ایجاد کنید.
gcloud iam service-accounts create tester
- شما یک رمز هویت برای این حساب جدید دریافت خواهید کرد، دقیقاً به همان روشی که قبلاً برای حساب پیش فرض خود دریافت کردید. با این حال، لازم است حساب پیشفرض شما مجوز جعل هویت حسابهای سرویس را داشته باشد. این مجوز را به حساب خود بدهید.
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
- اکنون دستور زیر را اجرا کنید تا یک رمز هویت برای این حساب جدید در متغیر محیطی TEST_IDENTITY ذخیره شود. اگر دستور پیغام خطا نشان داد، یک یا دو دقیقه صبر کنید و دوباره امتحان کنید.
export TEST_TOKEN=$( \
gcloud auth print-identity-token \
--impersonate-service-account \
"tester@$PROJECT_ID.iam.gserviceaccount.com" \
)
- درخواست وب تأیید شده را مانند قبل انجام دهید، اما با استفاده از این رمز هویت:
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 انجام می دهند، انجام دهد. نحوه انجام آن خارج از محدوده این کد لبه است.
ممکن است متوجه شده باشید که پاسخها به درخواستهای نمونه تاکنون، اشیاء 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 را کاوش کنید:
- راهاندازی گردشهای کاری ابری با Eventarc
- راه اندازی پردازش رویداد از فضای ذخیره سازی ابری
- اتصال به Private CloudSQL از Cloud Run
- اتصال به پایگاه های داده کاملاً مدیریت شده از Cloud Run
- برنامه امن بدون سرور با پروکسی آگاه از هویت (IAP)
- راه اندازی Cloud Run Jobs با Cloud Scheduler
- ایمن سازی ترافیک ورودی در اجرای ابر
- اتصال به AlloyDB خصوصی از GKE Autopilot
تمیز کردن
برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این آموزش، یا پروژه حاوی منابع را حذف کنید یا پروژه را نگه دارید و منابع فردی را حذف کنید.
حذف پروژه
ساده ترین راه برای حذف صورتحساب، حذف پروژه ای است که برای آموزش ایجاد کرده اید.