ایمن سازی ترافیک ورودی در اجرای ابر

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

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

5aed47d10595c878.png

تنظیمات ورودی

تنظیمات ورودی به شما امکان می‌دهد درخواست‌ها را بر اساس منبع شبکه (داخلی یا خارجی) فیلتر کنید. به‌طور پیش‌فرض، همه درخواست‌ها، از جمله درخواست‌های اینترنت عمومی، مجاز به ارسال هستند.

سیاست IAM

خط‌مشی‌های IAM به شما امکان می‌دهند درخواست‌ها را بر اساس هویت فرستنده فیلتر کنید و معمولاً برای تأیید اعتبار درخواست‌های سرویس به سرویس استفاده می‌شوند.

در این آزمایشگاه، نحوه و زمان استفاده از تنظیمات ورودی را خواهید آموخت.

میزبان های داخلی از طریق VPC متصل می شوند

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

31611f6a2f12fd0c.png

شبیه سازی یک بار کاری در محل با استفاده از سرور پرش در VPC

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

aebf22740c7a84f0.png

ماشین مجازی Compute Engine که به‌عنوان سرور پرش استفاده می‌کنید، منشأ شبکه‌ای مشابه با Cloud VPN Gateway دارد، به همین دلیل است که می‌توانید از آن برای شبیه‌سازی ارسال درخواست‌ها از یک حجم کاری در محل استفاده کنید.

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 دلاری هستند.

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

  1. یک متغیر محیطی را برای استفاده در دستورات بعدی روی Project ID تنظیم کنید:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ZONE=us-central1-a
  1. API های مورد نیاز برای اجرای این آزمایشگاه را فعال کنید.
gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  compute.googleapis.com \
  artifactregistry.googleapis.com
  1. مخزن نمونه برنامه را کلون کنید و به دایرکتوری بروید
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git

cd cymbal-eats/partner-registration-service
  1. منطقه و منطقه پیش فرض را برای Compute Engine و Cloud Run تنظیم کنید
gcloud config set compute/region ${REGION}
gcloud config set run/region ${REGION}
gcloud config set compute/zone ${ZONE}

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

ابتدا سرویس را اجرا می‌کنید و آن را در دسترس عموم قرار می‌دهید. پس از اینکه تأیید کردید می‌توانید از مرورگر خود درخواست ارسال کنید، سرویس را قفل می‌کنیم و فقط درخواست‌های منابع شبکه داخلی را مجاز می‌کنیم.

هنگامی که دستور زیر را اجرا می کنید، این دستورالعمل ها را دنبال کنید:

  • محل کد منبع (...): بررسی کنید که در فهرست راهنمای ثبت نام شریک هستید و اینتر را فشار دهید تا پیش فرض را بپذیرید.
  • نام سرویس (همکار-ثبت-خدمات): برای پذیرش پیش فرض اینتر را فشار دهید
  • فراخوانهای احراز هویت نشده به [partner-registration-service] (y/N) اجازه داده شود؟ Y
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

URL سرویس را در مرورگر خود باز کنید. شما باید این خروجی را ببینید:

Partner registration service: RUNNING

سرویس را طوری تنظیم کنید که فقط درخواست های داخلی را مجاز کند

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

علاوه بر این، درخواست‌های سایر محصولات Google Cloud داخلی در نظر گرفته می‌شوند، حتی اگر بخشی از VPC نباشند. این محصولات شامل Pub/Sub و Workflows هستند.

درخواست‌های این منابع در شبکه Google باقی می‌مانند، حتی اگر در URL run.app به سرویس شما دسترسی داشته باشند و دسترسی عمومی ممنوع است.

سرویس را به‌روزرسانی کنید تا فقط درخواست‌های داخلی مجاز باشد:

gcloud run services update partner-registration-service --ingress=internal

اگر URL سرویس را دوباره باز کنید، می گوید " خطا: ممنوع - دسترسی ممنوع است "

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

4. یک ماشین مجازی Compute Engine به عنوان سرور پرش ایجاد کنید

گام بعدی شبیه سازی درخواست ها از یک سرور داخلی از طریق دروازه VPN Cloud، با ایجاد یک نمونه 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

با این دستور URL سرویس 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

5. در مورد کنترل دسترسی مبتنی بر IAM چطور؟

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

کنترل دسترسی مبتنی بر IAM به تلاش بیشتری برای پیاده سازی نیاز دارد، به خصوص اگر از یک میزبان داخلی تماس می گیرید:

  • IAM از شما می‌خواهد که اعتبار حساب کاربری با عمر طولانی در هاست را مدیریت کنید
  • IAM برای امضای درخواست‌ها با استفاده از اعتبار حساب سرویس نیاز به تغییر کد دارد.

گوگل یک رویکرد چند لایه را برای کنترل دسترسی توصیه می کند. استفاده از تنظیمات ورودی برای محدود کردن دسترسی تنها به میزبان های داخلی اولین قدم عالی است، اما به همین جا بسنده نکنید!

6. تبریک!

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

بعدش چیه:

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

پاک کردن

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

حذف پروژه

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

مراجع مفید

در اینجا منابع اضافی وجود دارد که به شما کمک می کند در مورد دو لایه کنترل دسترسی در Cloud Run اطلاعات بیشتری کسب کنید.