1. بررسی اجمالی
در این آزمایشگاه، پورتال کارمندی را مستقر خواهید کرد که به کارمندان اجازه می دهد تا سفارشات را از برنامه Cymbal Eats مشاهده، به روز رسانی و حذف کنند. شما از Identity Aware Proxy (IAP) برای ایمن کردن دسترسی به پورتال بدون استفاده از شبکه خصوصی مجازی (VPN) استفاده خواهید کرد. IAP پیادهسازی یک مدل دسترسی بدون اعتماد را ساده میکند و زمان کمتری نسبت به VPN برای کارگران از راه دور، هم در محل و هم در محیطهای ابری با یک نقطه کنترل واحد برای مدیریت دسترسی به برنامههای شما میگیرد.
پروکسی با آگاهی از هویت چیست؟
Identity-Aware Proxy (IAP) یک سرویس Google Cloud است که درخواستهای ارسال شده به برنامه شما را رهگیری میکند، کاربر درخواستی را با استفاده از سرویس هویت Google احراز هویت میکند و تنها در صورتی به درخواستها اجازه میدهد که از طرف کاربری باشند که مجاز به دسترسی به برنامه هستند. علاوه بر این، میتواند سرصفحههای درخواست را طوری تغییر دهد که اطلاعات مربوط به کاربر تأیید شده را شامل شود.
آنچه خواهید آموخت
- نحوه پیکربندی یک گروه نقطه پایانی شبکه بدون سرور (NEG)
- نحوه پیکربندی یک متعادل کننده بار
- نحوه فعال کردن IAP برای محدود کردن دسترسی
- نحوه محدود کردن دسترسی با استفاده از IAP
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. شما می توانید آن را در هر زمان به روز کنید.
- شناسه پروژه در تمام پروژههای Google Cloud منحصربهفرد است و تغییرناپذیر است (پس از تنظیم نمیتوان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (معمولاً به عنوان
PROJECT_ID
شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، میتوانید خودتان را امتحان کنید و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند. - برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
- در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، می توانید منابعی را که ایجاد کرده اید حذف کنید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
راه اندازی محیط
- متغیرهای محیطی مرتبط با پروژه و منابع را ایجاد کنید
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های سرویس IAP و Cloud Resource Manager را فعال کنید
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
- پورتال Employee را با استفاده از اسکریپت راه اندازی مستقر کنید. قبل از رفتن به مرحله بعدی منتظر بمانید تا اسکریپت کامل شود
./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
- روی لینک سرویس URL کلیک کنید
3. پیکربندی یک گروه نقطه پایانی شبکه بدون سرور (NEG)
شما یک گروه نقطه پایانی شبکه بدون سرور ( NEG بدون سرور ) برای سرویس UI کارمند Cloud Run ایجاد خواهید کرد. NEG های بدون سرور به شما امکان می دهند از برنامه های بدون سرور Google Cloud با تعادل بار HTTP(S) خارجی استفاده کنید.
- یک گروه نقطه پایانی شبکه برای سرویس UI کارمند ایجاد کنید.
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 تعریف می کند. پیکربندی سرویس پشتیبان شامل مجموعهای از مقادیر است، مانند پروتکل مورد استفاده برای اتصال به پشتیبانها، تنظیمات مختلف توزیع و جلسه، بررسیهای سلامت و زمانبندی. این تنظیمات کنترل دقیقی بر نحوه رفتار متعادل کننده بار شما فراهم می کند.
- یک سرویس پشتیبان ایجاد کنید
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 برای هدایت درخواست های دریافتی به سرویس پشتیبان ایجاد کنید
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
4. پیکربندی اجزای Load Balancer
نمودار زیر نشان می دهد که متعادل کننده بار از یک باطن NEG بدون سرور برای هدایت درخواست ها به یک سرویس 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 با مدیریت Google ایجاد کنید
- یک منبع گواهی SSL با مدیریت Google ایجاد کنید
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 Balancer 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
- روی لینک سرویس URL کلیک کنید
اکنون دسترسی به URL سرویس Cloud Run ممنوع نشان داده می شود.
5. فعال کردن Cloud Identity-Aware Proxy (IAP) در Load Balancer
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)')
- در Cloud Console، پروژه را از منوی کشویی انتخاب پروژه انتخاب کنید
- به صفحه رضایت OAuth در Cloud Console بروید
- در قسمت User Type روی MAKE EXTERNAL کلیک کنید
- Testing را به عنوان وضعیت انتشار انتخاب کنید
- روی تایید کلیک کنید
6. محدود کردن دسترسی با IAP
دسترسی به سرویس پشتیبان را با استفاده از IAP محدود کنید سپس تأیید کنید که برنامه غیرقابل دسترسی است.
- IAP را در سرویس باطن فعال کنید
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 ACTIVE است
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
- دریافت URL خدمات
echo https://$DOMAIN
خروجی نمونه
https://34.102.234.98.nip.io
- برای باز کردن پورتال کارمند، روی URL سرویس کلیک کنید.
- با استفاده از مشخصات آزمایشگاهی خود وارد شوید.
- مرورگر را ببندید
به کاربر اجازه دسترسی به پورتال کارمند را بدهید
- برای کاربر ایجاد شده در مرحله قبل، یک اتصال خط مشی 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].
تست دسترسی به سرویس
تأیید کنید که دسترسی به پورتال کارمند اعطا شده است
- دریافت URL خدمات
echo https://$DOMAIN
خروجی نمونه
https://34.102.234.98.nip.io
- برای باز کردن پورتال کارمند، روی URL سرویس کلیک کنید.
اکنون باید به پورتال کارمند دسترسی داشته باشید.
(اختیاری) استقرار همه وابستگی ها، استقرار این میکروسرویس ها ممکن است 20 دقیقه طول بکشد.
unset ORDER_SERVICE_URL
unset INVENTORY_SERVICE_URL
unset MENU_SERVICE_URL
cd ~/cymbal-eats
./setup.sh
./get-site-urls.sh
7. تبریک می گویم!
تبریک می گویم، شما نرم افزار کد را تمام کردید!
بعدش چیه:
سایر کدهای Cymbal Eats را کاوش کنید:
- راهاندازی گردشهای کاری ابری با Eventarc
- راه اندازی پردازش رویداد از فضای ذخیره سازی ابری
- اتصال به Private CloudSQL از Cloud Run
- اتصال به پایگاه های داده کاملاً مدیریت شده از Cloud Run
- راه اندازی Cloud Run Jobs با Cloud Scheduler
- استقرار ایمن در Cloud Run
- ایمن سازی ترافیک ورودی در اجرای ابر
- اتصال به AlloyDB خصوصی از GKE Autopilot
تمیز کردن
برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این آموزش، یا پروژه حاوی منابع را حذف کنید یا پروژه را نگه دارید و منابع فردی را حذف کنید.
حذف پروژه
ساده ترین راه برای حذف صورتحساب، حذف پروژه ای است که برای آموزش ایجاد کرده اید.