۱. مرور کلی
در این آزمایشگاه، شما پورتال کارمندان را مستقر خواهید کرد که به کارمندان امکان مشاهده، بهروزرسانی و حذف سفارشات از برنامه Cymbal Eats را میدهد. شما از پروکسی آگاه از هویت (IAP) برای ایمنسازی دسترسی به پورتال بدون استفاده از شبکه خصوصی مجازی (VPN) استفاده خواهید کرد. IAP پیادهسازی مدل دسترسی بدون اعتماد (zero-trust) را ساده میکند و برای کارمندان از راه دور، چه در محل و چه در محیطهای ابری، زمان کمتری نسبت به VPN میبرد و یک نقطه کنترل واحد برای مدیریت دسترسی به برنامههای شما دارد.

پروکسی آگاه از هویت چیست؟
پروکسی آگاه از هویت (IAP) یک سرویس ابری گوگل است که درخواستهای ارسالی به برنامه شما را رهگیری میکند، کاربری را که با استفاده از سرویس هویت گوگل درخواست را ارسال میکند، احراز هویت میکند و فقط به درخواستهایی اجازه عبور میدهد که از طرف کاربری باشند که مجاز به دسترسی به برنامه است. علاوه بر این، میتواند هدرهای درخواست را تغییر دهد تا شامل اطلاعات مربوط به کاربر احراز هویت شده باشد.
آنچه یاد خواهید گرفت
- نحوه پیکربندی یک گروه نقطه پایانی شبکه بدون سرور (NEG)
- نحوه پیکربندی متعادل کننده بار
- نحوه فعال کردن IAP برای محدود کردن دسترسی
- نحوه محدود کردن دسترسی با استفاده از IAP
۲. تنظیمات و الزامات
تنظیم محیط خودتنظیم
- وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .



- نام پروژه ، نام نمایشی برای شرکتکنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمیشود. میتوانید آن را در هر زمانی بهروزرسانی کنید.
- شناسه پروژه در تمام پروژههای گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید میکند؛ معمولاً برای شما مهم نیست که چیست. در اکثر آزمایشگاههای کد، باید به شناسه پروژه ارجاع دهید (که معمولاً با عنوان
PROJECT_IDشناخته میشود). اگر شناسه تولید شده را دوست ندارید، میتوانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، میتوانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی خواهد ماند. - برای اطلاع شما، یک مقدار سوم هم وجود دارد، شماره پروژه که برخی از APIها از آن استفاده میکنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
- در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد، اگر اصلاً هزینهای نداشته باشد، هزینه زیادی نخواهد داشت. برای خاموش کردن منابع به طوری که پس از این آموزش متحمل پرداخت صورتحساب نشوید، میتوانید منابعی را که ایجاد کردهاید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
تنظیمات محیط
- ایجاد متغیرهای محیطی مرتبط با پروژه و منابع
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export REGION=us-east1
export ORDER_SERVICE_URL=order-service
export INVENTORY_SERVICE_URL=inventory-service
export MENU_SERVICE_URL=menu-service
- فعال کردن رابطهای برنامهنویسی کاربردی (API) سرویس مدیریت منابع ابری (Cloud resource manager) و IAP
gcloud services enable \
iap.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudidentity.googleapis.com \
compute.googleapis.com
- مخزن برنامه نمونه را کلون کنید و به دایرکتوری بروید
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/employee-ui
- پورتال کارمندان را با استفاده از اسکریپت راهاندازی، مستقر کنید. قبل از رفتن به مرحله بعدی، منتظر بمانید تا اسکریپت تکمیل شود.
./setup.sh
خروجی مثال
... Done. Service [employee-ui-service] revision [employee-ui-service-00001-quw] has been deployed and is serving 100 percent of traffic. Service URL: https://employee-ui-service-gbtuuy5eda-uk.a.run.app
- روی لینک آدرس اینترنتی سرویس کلیک کنید

۳. پیکربندی یک گروه نقطه پایانی شبکه بدون سرور (NEG)
شما یک گروه نقطه پایانی شبکه بدون سرور ( Serverless Network Endpoint Group) برای سرویس Cloud Run رابط کاربری کارمندان ایجاد خواهید کرد. NEG های بدون سرور به شما امکان میدهند از برنامههای بدون سرور Google Cloud با متعادلسازی بار HTTP(S) خارجی استفاده کنید.

- یک گروه نقطه پایانی شبکه برای سرویس رابط کاربری کارمندان ایجاد کنید.
gcloud compute network-endpoint-groups create employee-ui-iap-neg \
--project $PROJECT_ID \
--region=$REGION \
--network-endpoint-type=serverless \
--cloud-run-service=employee-ui-service
خروجی مثال
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/regions/us-east1/networkEndpointGroups/employee-ui-iap-neg]. Created network endpoint group [employee-ui-iap-neg].
یک سرویس backend ایجاد کنید و NEG بدون سرور را اضافه کنید
یک سرویس backend نحوه توزیع ترافیک توسط Cloud Load Balancing را تعریف میکند. پیکربندی سرویس backend شامل مجموعهای از مقادیر، مانند پروتکل مورد استفاده برای اتصال به backendها، تنظیمات مختلف توزیع و session، بررسیهای سلامت و timeoutها است. این تنظیمات کنترل دقیقی بر نحوه رفتار load balancer شما ارائه میدهند.
- ایجاد یک سرویس بکاند
gcloud compute backend-services create employee-ui-iap-backend \
--global
خروجی مثال
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend]. NAME: employee-ui-iap-backend BACKENDS: PROTOCOL: HTTP
- NEG بدون سرور را به عنوان backend به سرویس backend اضافه کنید.
gcloud compute backend-services add-backend employee-ui-iap-backend \
--global \
--network-endpoint-group=employee-ui-iap-neg \
--network-endpoint-group-region=$REGION
خروجی مثال
Updated [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend].
- ایجاد یک نقشه URL برای هدایت درخواستهای ورودی به سرویس backend
gcloud compute url-maps create employee-ui-iap-url-map \
--default-service employee-ui-iap-backend
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/urlMaps/employee-ui-iap-url-map]. NAME: employee-ui-iap-url-map DEFAULT_SERVICE: backendServices/employee-ui-iap-backend
۴. پیکربندی اجزای متعادلکننده بار
نمودار زیر نشان میدهد که متعادلکننده بار از یک سرور NEG backend برای هدایت درخواستها به یک سرویس Cloud Run بدون سرور استفاده میکند.

یک آدرس IP ثابت رزرو کنید
- یک آدرس IPv4 استاتیک رزرو کنید و دامنه را ذخیره کنید
gcloud compute addresses create employee-ui-iap-ip \
--network-tier=PREMIUM \
--ip-version=IPV4 \
--global
خروجی مثال
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/addresses/employee-ui-iap-ip].
- دامنه nip.io را ذخیره کنید
export DOMAIN=$(gcloud compute addresses list --filter employee-ui-iap-ip --format='value(ADDRESS)').nip.io
یک منبع گواهی SSL تحت مدیریت گوگل ایجاد کنید
- یک منبع گواهی SSL تحت مدیریت گوگل ایجاد کنید
gcloud compute ssl-certificates create employee-ui-iap-cert \
--description=employee-ui-iap-cert \
--domains=$DOMAIN \
--global
خروجی مثال
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/sslCertificates/employee-ui-iap-cert]. NAME: employee-ui-iap-cert TYPE: MANAGED CREATION_TIMESTAMP: 2022-04-18T06:39:37.474-07:00 EXPIRE_TIME: MANAGED_STATUS: PROVISIONING 34.102.234.98.nip.io: PROVISIONING
یک پروکسی HTTPS هدف ایجاد کنید
- پروکسی HTTPS هدف را برای هدایت درخواستها به نقشه URL خود ایجاد کنید.
gcloud compute target-https-proxies create employee-ui-iap-http-proxy \
--ssl-certificates employee-ui-iap-cert \
--url-map employee-ui-iap-url-map
خروجی مثال
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/targetHttpsProxies/employee-ui-iap-http-proxy]. NAME: employee-ui-iap-http-proxy SSL_CERTIFICATES: employee-ui-iap-cert URL_MAP: employee-ui-iap-url-map CERTIFICATE_MAP:
پیکربندی قوانین ارسال
- یک قانون ارسال برای هدایت درخواستهای ورودی به پروکسی ایجاد کنید
gcloud compute forwarding-rules create employee-ui-iap-forwarding-rule \
--load-balancing-scheme=EXTERNAL \
--network-tier=PREMIUM \
--address=employee-ui-iap-ip \
--global \
--ports=443 \
--target-https-proxy employee-ui-iap-http-proxy
خروجی مثال
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/forwardingRules/employee-ui-iap-forwarding-rule].
محدود کردن دسترسی به سرویس Cloud Run
ترافیک ورودی را محدود کنید تا فقط درخواستهای داخلی و درخواستهایی که از طریق HTTP(S) Load Balancing میآیند را بپذیرد.

- سرویس را بهروزرسانی کنید تا فقط ترافیک ورودی از درخواستهای داخلی و درخواستهای از طریق متعادلکننده بار HTTP(S) مجاز باشد.
gcloud run services update employee-ui-service \
--ingress internal-and-cloud-load-balancing \
--region $REGION
خروجی مثال
OK Deploying... Done. OK Creating Revision... OK Routing traffic... Done. Service [employee-ui-service] revision [employee-ui-service-00001-quw] has been deployed and is serving 100 percent of traffic. Service URL: https://employee-ui-service-gbtuuy5eda-uk.a.run.app
- روی لینک آدرس اینترنتی سرویس کلیک کنید

دسترسی به آدرس اینترنتی سرویس Cloud Run اکنون به عنوان ممنوعه نمایش داده میشود.
۵. فعال کردن پروکسی ابری آگاه از هویت (IAP) روی متعادلکننده بار
IAP به شما امکان میدهد یک لایه مجوز مرکزی برای برنامههایی که از طریق HTTPS قابل دسترسی هستند، ایجاد کنید. میتوانید به جای فایروالهای سطح شبکه، از یک مدل کنترل دسترسی در سطح برنامه استفاده کنید.

پیکربندی صفحه رضایت OAuth
یک برند، صفحه رضایت OAuth است که حاوی اطلاعات برندسازی برای کاربران است. برندها ممکن است محدود به کاربران داخلی یا عمومی باشند. یک برند داخلی به جریان OAuth اجازه میدهد تا توسط عضوی از همان سازمان Google Workspace که پروژه در آن قرار دارد، قابل دسترسی باشد. یک برند عمومی، جریان OAuth را برای هر کسی که به اینترنت دسترسی دارد، قابل دسترسی میکند.
- ایجاد یک برند
export USER_EMAIL=$(gcloud config list account --format "value(core.account)")
gcloud alpha iap oauth-brands create \
--application_title="Cymbal Eats" \
--support_email=$USER_EMAIL
خروجی مثال
Created [462858740426]. applicationTitle: Cymbal Eats name: projects/462858740426/brands/462858740426 orgInternalOnly: true
ایجاد یک کلاینت IAP OAuth
- با استفاده از نام تجاری مرحله قبل، یک مشتری ایجاد کنید
gcloud alpha iap oauth-clients create \
projects/$PROJECT_ID/brands/$PROJECT_NUMBER \
--display_name=cymbal-eats-employee-ui
خروجی مثال
Created [462858740426-tkpv8n03opijg7erd3s9ccued2pfllsd.apps.googleusercontent.com]. displayName: cymbal-eats-employee-ui name: projects/462858740426/brands/462858740426/identityAwareProxyClients/462858740426-tkpv8n03opijg7erd3s9ccued2pfllsd.apps.googleusercontent.com secret: [secret-removed]
- نام، شناسه و رمز کلاینت را ذخیره کنید
export CLIENT_NAME=$(gcloud alpha iap oauth-clients list \
projects/$PROJECT_NUMBER/brands/$PROJECT_NUMBER --format='value(name)' \
--filter="displayName:cymbal-eats-employee-ui")
export CLIENT_ID=${CLIENT_NAME##*/}
export CLIENT_SECRET=$(gcloud alpha iap oauth-clients describe $CLIENT_NAME --format='value(secret)')
- در کنسول ابری، پروژه را از منوی کشویی انتخاب پروژه انتخاب کنید
- به صفحه رضایت OAuth در کنسول ابری بروید

- در قسمت نوع کاربر، روی «خارجیسازی» کلیک کنید.
- گزینه «در حال آزمایش» را به عنوان وضعیت انتشار انتخاب کنید.

- روی تأیید کلیک کنید
۶. محدود کردن دسترسی با IAP
دسترسی به سرویس backend را با استفاده از IAP محدود کنید و سپس تأیید کنید که برنامه غیرقابل دسترس است.
- فعال کردن IAP در سرویس backend
gcloud iap web enable --resource-type=backend-services \
--oauth2-client-id=$CLIENT_ID \
--oauth2-client-secret=$CLIENT_SECRET \
--service=employee-ui-iap-backend
پیکربندی IAP را تأیید کنید
- تأیید کنید که گواهی SSL فعال است
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
- دریافت آدرس اینترنتی سرویس
echo https://$DOMAIN
خروجی مثال
https://34.102.234.98.nip.io
- برای باز کردن پورتال کارمندان، روی آدرس اینترنتی سرویس کلیک کنید.

- با استفاده از اطلاعات کاربری آزمایشگاه خود وارد شوید.

- مرورگر را ببندید
اعطای دسترسی به پورتال کارمندان برای کاربران
- یک الزامآور برای سیاست IAM برای نقش
'roles/iap.httpsResourceAccessor'برای کاربری که در مرحله قبل ایجاد شده است، اضافه کنید.
gcloud iap web add-iam-policy-binding \
--resource-type=backend-services \
--service=employee-ui-iap-backend \
--member=user:$USER_EMAIL \
--role='roles/iap.httpsResourceAccessor'
خروجی مثال
Updated IAM policy for backend service [projects/462858740426/iap_web/compute/services/employee-ui-iap-backend].
تست دسترسی به سرویس
تأیید کنید که دسترسی به پورتال کارمندان اعطا شده است
- دریافت آدرس اینترنتی سرویس
echo https://$DOMAIN
خروجی مثال
https://34.102.234.98.nip.io
- برای باز کردن پورتال کارمندان، روی آدرس اینترنتی سرویس کلیک کنید.

اکنون باید به پورتال کارمندان دسترسی داشته باشید.
(اختیاری) تمام وابستگیها را مستقر کنید، استقرار این میکروسرویسها ممکن است حدود ۲۰ دقیقه طول بکشد.
unset ORDER_SERVICE_URL
unset INVENTORY_SERVICE_URL
unset MENU_SERVICE_URL
cd ~/cymbal-eats
./setup.sh
./get-site-urls.sh
۷. تبریک میگویم!
تبریک میگویم، شما codelab را تمام کردید!
قدم بعدی چیست؟
سایر آزمایشگاههای کد Cymbal Eats را کاوش کنید:
- راهاندازی گردشهای کاری ابری با Eventarc
- راهاندازی پردازش رویداد از فضای ذخیرهسازی ابری
- اتصال به CloudSQL خصوصی از Cloud Run
- اتصال به پایگاههای داده کاملاً مدیریتشده از Cloud Run
- راهاندازی کارهای ابری با استفاده از زمانبند ابری
- استقرار ایمن در Cloud Run
- ایمنسازی ترافیک ورودی Cloud Run
- اتصال به AlloyDB خصوصی از GKE Autopilot
تمیز کردن
برای جلوگیری از تحمیل هزینه به حساب گوگل کلود خود برای منابع استفاده شده در این آموزش، یا پروژهای که شامل منابع است را حذف کنید، یا پروژه را نگه دارید و منابع تکی را حذف کنید.
حذف پروژه
سادهترین راه برای حذف هزینهها، حذف پروژهای است که برای آموزش ایجاد کردهاید.