۱. مرور کلی
این آزمایش به شما نشان میدهد که چگونه دسترسی به یک سرویس Cloud Run را محدود کنید و فقط به درخواستهای مربوط به یک بار کاری که در محل یا در VPC پروژه شما اجرا میشود، اجازه دسترسی دهید. دو لایه کنترل دسترسی وجود دارد که میتوانید از آنها استفاده کنید: تنظیمات ورود و سیاستهای مدیریت هویت و دسترسی (IAM).

تنظیمات ورودی
تنظیمات Ingress به شما امکان میدهد درخواستها را بر اساس مبدا شبکه (داخلی یا خارجی) فیلتر کنید. به طور پیشفرض، همه درخواستها، از جمله درخواستهای اینترنت عمومی، مجاز به عبور هستند.
سیاست IAM
سیاستهای IAM به شما امکان میدهند درخواستها را بر اساس هویت فرستنده فیلتر کنید و معمولاً برای تأیید اعتبار درخواستهای سرویس به سرویس استفاده میشوند.
در این آزمایش، یاد خواهید گرفت که چگونه و چه زمانی از تنظیمات ورودی استفاده کنید.
میزبانهای داخلی از طریق VPC متصل میشوند
در این آزمایش، ما یک بار کاری در محل را شبیهسازی خواهیم کرد. برای اتصال یک میزبان در محل به Cloud Run، باید Private Google Access را برای میزبانهای در محل پیکربندی کنید. این شامل راهاندازی یک دروازه Cloud VPN در شبکه VPC است، همانطور که در زیر نشان داده شده است.

شبیهسازی حجم کار داخلی با استفاده از یک سرور پرشی در VPC
در این آزمایش، شما ارسال درخواستها از یک میزبان داخلی را با ارسال درخواستها از یک ماشین مجازی Compute Engine در VPC، همانطور که در اینجا نشان داده شده است، شبیهسازی خواهید کرد.

ماشین مجازی Compute Engine که به عنوان سرور Jump استفاده خواهید کرد، همان مبدا شبکه Cloud VPN Gateway را دارد، به همین دلیل است که میتوانید از آن برای شبیهسازی ارسال درخواستها از یک بار کاری داخلی استفاده کنید.
۲. تنظیمات و الزامات
تنظیم محیط خودتنظیم
- وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .



- نام پروژه ، نام نمایشی برای شرکتکنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمیشود. میتوانید آن را در هر زمانی بهروزرسانی کنید.
- شناسه پروژه در تمام پروژههای گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید میکند؛ معمولاً برای شما مهم نیست که چه باشد. در اکثر آزمایشگاههای کد، باید به شناسه پروژه ارجاع دهید (که معمولاً با عنوان
PROJECT_IDشناخته میشود). اگر شناسه تولید شده را دوست ندارید، میتوانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، میتوانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی خواهد ماند. - برای اطلاع شما، یک مقدار سوم هم وجود دارد، شماره پروژه که برخی از APIها از آن استفاده میکنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
- در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد، اگر اصلاً هزینهای نداشته باشد، هزینه زیادی نخواهد داشت. برای خاموش کردن منابع به طوری که پس از این آموزش متحمل پرداخت صورتحساب نشوید، میتوانید منابعی را که ایجاد کردهاید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
تنظیمات محیط
- یک متغیر محیطی را برای استفاده در دستورات بعدی روی شناسه پروژه تنظیم کنید:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ZONE=us-central1-a
- API های مورد نیاز برای اجرای این آزمایشگاه را فعال کنید.
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
compute.googleapis.com \
artifactregistry.googleapis.com
- مخزن برنامه نمونه را کلون کنید و به دایرکتوری بروید
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git
cd cymbal-eats/partner-registration-service
- منطقه و ناحیه پیشفرض را برای Compute Engine و Cloud Run تنظیم کنید
gcloud config set compute/region ${REGION}
gcloud config set run/region ${REGION}
gcloud config set compute/zone ${ZONE}
۳. سرویس را مستقر کنید
ابتدا سرویس را مستقر کرده و آن را در دسترس عموم قرار میدهید. پس از اینکه تأیید کردید که میتوانید از مرورگر خود درخواست ارسال کنید، سرویس را قفل میکنیم و فقط درخواستهای منابع شبکه داخلی را مجاز میدانیم.
وقتی دستور زیر را اجرا میکنید، دستورالعملهای زیر را دنبال کنید:
- محل کد منبع (...): تأیید کنید که در دایرکتوری partner-registration-service هستید و برای پذیرش پیشفرض، اینتر را بزنید.
- نام سرویس (partner-registration-service): برای پذیرش پیشفرض، اینتر را بزنید.
- آیا به [partner-registration-service] (y/N) اجازه فراخوانیهای احراز هویت نشده داده میشود؟ بله
gcloud run deploy
وقتی این دستور کامل شد، URL سرویس Cloud Run شما را فهرست میکند. خروجی مشابه این لیست خواهد بود:
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
آدرس اینترنتی سرویس را در مرورگر خود باز کنید. باید این خروجی را مشاهده کنید:
Partner registration service: RUNNING
سرویس را طوری تنظیم کنید که فقط درخواستهای داخلی را بپذیرد
اکنون، از تنظیمات ورودی سرویس Cloud Run استفاده خواهید کرد تا فقط درخواستهای منابع داخلی را مجاز کنید. منابع داخلی شامل منابعی در شبکههای VPC هستند که در همان پروژه (یا محیط کنترلهای سرویس VPC) با سرویس Cloud Run قرار دارند - که آن را برای مورد استفاده ما ایدهآل میکند.
علاوه بر این، درخواستهای سایر محصولات Google Cloud داخلی در نظر گرفته میشوند، حتی اگر بخشی از VPC نباشند. این محصولات شامل Pub/Sub و Workflows میشوند.
درخواستهای این منابع، حتی اگر از طریق آدرس اینترنتی run.app به سرویس شما دسترسی پیدا کنند، در شبکه گوگل باقی میمانند و دسترسی عمومی به آنها ممنوع است.
سرویس را بهروزرسانی کنید تا فقط درخواستهای داخلی مجاز باشند:
gcloud run services update partner-registration-service --ingress=internal
اگر دوباره آدرس اینترنتی سرویس را باز کنید، پیام « خطا: ممنوع - دسترسی ممنوع است » نمایش داده میشود.
از آنجایی که مرورگر شما درخواست را از یک شبکه خارجی ارسال میکند و نه از یک شبکه داخلی در پروژه گوگل کلود، این دقیقاً همان چیزی است که انتظار دارید اتفاق بیفتد. سرویس شما اکنون امنتر است.
۴. یک ماشین مجازی Compute Engine به عنوان سرور پرش ایجاد کنید
مرحله بعدی شبیهسازی درخواستها از یک سرور داخلی از طریق یک دروازه Cloud VPN است، که با ایجاد یک نمونه Compute Engine در VPC برای استفاده به عنوان سرور پرش انجام میشود:
gcloud compute instances create jump-server --scopes=https://www.googleapis.com/auth/cloud-platform
خروجی این دستور باید چیزی شبیه به این باشد:
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 به سرویس
اکنون یک ترمینال روی ماشین مجازی باز میکنید و مستقیماً از دستگاه موجود در شبکه VPC درخواستی ارسال میکنید.
اگر دستور زیر از شما درخواست تنظیم SSH در Cloud Shell را کرد، دستورالعملها را دنبال کنید:
gcloud compute ssh jump-server
با استفاده از این دستور، آدرس اینترنتی سرویس Cloud Run را دریافت کنید:
gcloud run services describe partner-registration-service --region us-central1
چند خط اول خروجی باید به این شکل باشد:
✔ Service partner-registration-service in region us-central1 URL: https://partner-registration-service-ssssssssss-uc.a.run.app Ingress: internal
حالا URL را کپی کنید و با استفاده از curl یک درخواست از نمونه Compute Engine ارسال کنید. این درخواست باید موفقیتآمیز باشد، زیرا نمونه VM در شبکه VPC پروژه شما اجرا میشود - این یک منبع داخلی است.
export SERVICE_URL=https://
curl ${SERVICE_URL}
خروجی باید بگوید:
Partner registration service: RUNNING
۵. کنترل دسترسی مبتنی بر IAM چطور؟
این آزمایش به شما نشان داد که چگونه و چه زمانی از تنظیمات ورودی استفاده کنید. تنظیمات ورودی اولین قدم عالی هستند اگر در حال اتصال یک بار کاری داخلی به Cloud Run هستید.
پیادهسازی کنترل دسترسی مبتنی بر IAM به تلاش بیشتری نیاز دارد، بهخصوص اگر از یک میزبان داخلی تماس میگیرید:
- IAM شما را ملزم به مدیریت اعتبارنامههای حساب کاربری سرویس با طول عمر بالا روی میزبان میکند.
- IAM برای امضای درخواستها با استفاده از اعتبارنامههای حساب سرویس، نیاز به تغییرات کد دارد.
گوگل یک رویکرد چندلایه برای کنترل دسترسی توصیه میکند. استفاده از تنظیمات ورودی برای محدود کردن دسترسی فقط به میزبانهای داخلی، اولین قدم عالی است، اما به همین بسنده نکنید!
۶. تبریک میگویم!
تبریک میگویم، شما codelab را تمام کردید!
قدم بعدی چیست؟
سایر آزمایشگاههای کد Cymbal Eats را کاوش کنید:
- راهاندازی گردشهای کاری ابری با Eventarc
- راهاندازی پردازش رویداد از فضای ذخیرهسازی ابری
- اتصال به CloudSQL خصوصی از Cloud Run
- اتصال به پایگاههای داده کاملاً مدیریتشده از Cloud Run
- برنامه بدون سرور امن با پروکسی آگاه از هویت (IAP)
- راهاندازی کارهای ابری با استفاده از زمانبند ابری
- استقرار ایمن در Cloud Run
- اتصال به AlloyDB خصوصی از GKE Autopilot
تمیز کردن
برای جلوگیری از تحمیل هزینه به حساب گوگل کلود خود برای منابع استفاده شده در این آموزش، یا پروژهای که شامل منابع است را حذف کنید، یا پروژه را نگه دارید و منابع تکی را حذف کنید.
حذف پروژه
سادهترین راه برای حذف هزینهها، حذف پروژهای است که برای آموزش ایجاد کردهاید.
مراجع مفید
در اینجا منابع اضافی وجود دارد که به شما کمک میکند تا در مورد دو لایه کنترل دسترسی در Cloud Run اطلاعات بیشتری کسب کنید.