1. खास जानकारी
इस लैब में, आपको कर्मचारी पोर्टल को डिप्लॉय करना होगा. इससे कर्मचारी, Cymbal Eats ऐप्लिकेशन से ऑर्डर देख पाएंगे, उन्हें अपडेट कर पाएंगे, और मिटा पाएंगे. पोर्टल का ऐक्सेस सुरक्षित करने के लिए, वर्चुअल प्राइवेट नेटवर्क (वीपीएन) का इस्तेमाल किए बिना, Identity Aware Proxy (IAP) का इस्तेमाल किया जाएगा. IAP की मदद से, ज़ीरो-ट्रस्ट ऐक्सेस मॉडल को लागू करना आसान हो जाता है. साथ ही, यह वीपीएन की तुलना में कम समय लेता है. इससे, ऑफ़िस से दूर काम करने वाले लोगों को, ऑन-प्राइमिस और क्लाउड, दोनों प्लैटफ़ॉर्म पर अपने ऐप्लिकेशन का ऐक्सेस मैनेज करने के लिए, एक ही जगह से कंट्रोल करने की सुविधा मिलती है.
Identity-Aware Proxy क्या है?
Identity-Aware Proxy (IAP), Google Cloud की एक सेवा है. यह आपके ऐप्लिकेशन पर भेजे गए अनुरोधों को इंटरसेप्ट करती है. साथ ही, Google Identity Service का इस्तेमाल करके, अनुरोध करने वाले उपयोगकर्ता की पुष्टि करती है. यह सिर्फ़ उन अनुरोधों को स्वीकार करती है जो ऐप्लिकेशन को ऐक्सेस करने की अनुमति वाले उपयोगकर्ता से मिले हों. इसके अलावा, यह पुष्टि किए गए उपयोगकर्ता की जानकारी शामिल करने के लिए, अनुरोध के हेडर में बदलाव कर सकता है.
आपको क्या सीखने को मिलेगा
- सर्वरलेस नेटवर्क एंडपॉइंट ग्रुप (एनईजी) को कॉन्फ़िगर करने का तरीका
- लोड बैलेंसर को कॉन्फ़िगर करने का तरीका
- ऐक्सेस पर पाबंदी लगाने के लिए, IAP को चालू करने का तरीका
- आईएपी का इस्तेमाल करके, ऐक्सेस पर पाबंदी लगाने का तरीका
2. सेटअप और ज़रूरी शर्तें
अपने हिसाब से एनवायरमेंट सेट अप करना
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.
- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे कभी भी अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, अपने-आप एक यूनीक स्ट्रिंग जनरेट करता है. आम तौर पर, आपको यह जानने की ज़रूरत नहीं होती कि यह स्ट्रिंग क्या है. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे
PROJECT_ID
के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं आता है, तो कोई दूसरा आईडी जनरेट किया जा सकता है. इसके अलावा, आपके पास खुद से भी यह पता लगाने का विकल्प है कि यह सुविधा उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट के दौरान बना रहेगा. - आपकी जानकारी के लिए बता दें कि तीसरी वैल्यू, प्रोजेक्ट नंबर होती है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
- इसके बाद, आपको Cloud के संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी. इस कोडलैब को चलाने में ज़्यादा खर्च नहीं आता. इस ट्यूटोरियल के बाद, आपसे कोई शुल्क न लिया जाए, इसके लिए संसाधनों को बंद किया जा सकता है. इसके लिए, आपने जो संसाधन बनाए हैं उन्हें मिटाएं या पूरा प्रोजेक्ट मिटाएं. 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
- IAP और Cloud Resource Manager Service API चालू करना
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
- सेवा के यूआरएल के लिंक पर क्लिक करें
3. सर्वरलेस नेटवर्क एंडपॉइंट ग्रुप (एनईजी) कॉन्फ़िगर करना
आपको कर्मचारी के यूज़र इंटरफ़ेस (यूआई) वाली Cloud Run सेवा के लिए, सर्वरलेस नेटवर्क एंडपॉइंट ग्रुप (सर्वरलेस एनईजी) बनाना होगा. सर्वरलेस एनईजी की मदद से, एक्सटर्नल एचटीटीपी या एचटीटीपीएस लोड बैलेंसी के साथ Google Cloud के सर्वरलेस ऐप्लिकेशन इस्तेमाल किए जा सकते हैं.
- कर्मचारी यूज़र इंटरफ़ेस (यूआई) सेवा के लिए, नेटवर्क एंडपॉइंट ग्रुप बनाएं.
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].
बैकएंड सेवा बनाना और सर्वरलेस एनईजी जोड़ना
बैकएंड सेवा से यह तय होता है कि 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
- बैकएंड सेवा में, सर्वरलेस एनईजी को बैकएंड के तौर पर जोड़ना
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].
- आने वाले अनुरोधों को बैकएंड सेवा पर भेजने के लिए, यूआरएल मैप बनाएं
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. लोड बैलेंसर कॉम्पोनेंट कॉन्फ़िगर करना
नीचे दिए गए डायग्राम में दिखाया गया है कि लोड बैलेंसर, सर्वरलेस NEG बैकएंड का इस्तेमाल करके, अनुरोधों को सर्वरलेस Cloud Run सेवा पर भेजता है.
स्टैटिक आईपी पता रिज़र्व करना
- स्टैटिक 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
Google की ओर से मैनेज किया जाने वाला एसएसएल सर्टिफ़िकेट रिसॉर्स बनाना
- 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
टारगेट एचटीटीपीएस प्रॉक्सी बनाना
- अपने यूआरएल मैप पर अनुरोधों को रूट करने के लिए, टारगेट एचटीटीपीएस प्रॉक्सी बनाएं
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 सेवा के लिए इनग्रेस पर पाबंदी लगाना
इनग्रेस ट्रैफ़िक को सिर्फ़ इंटरनल अनुरोध और एचटीटीपी या एचटीटीपीएस लोड बैलेंसी के ज़रिए आने वाले अनुरोध स्वीकार करने की अनुमति दें.
- सेवा को अपडेट करें, ताकि सिर्फ़ इंटरनल अनुरोधों और एचटीटीपी या एचटीटीपीएस लोड बैलेंसर के ज़रिए किए गए अनुरोधों से आने वाले ट्रैफ़िक को अनुमति दी जा सके
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 सेवा के यूआरएल का ऐक्सेस अब 'अनुमति नहीं है' के तौर पर दिखता है.
5. लोड बैलेंसर पर Cloud Identity-Aware Proxy (IAP) को चालू करना
IAP की मदद से, एचटीटीपीएस से ऐक्सेस किए जाने वाले ऐप्लिकेशन के लिए, अनुमति देने वाली एक मुख्य लेयर बनाई जा सकती है. नेटवर्क-लेवल फ़ायरवॉल के बजाय, ऐप्लिकेशन-लेवल ऐक्सेस कंट्रोल मॉडल का इस्तेमाल किया जा सकता है.
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 में, प्रोजेक्ट चुनने के लिए ड्रॉप-डाउन मेन्यू से प्रोजेक्ट चुनें
- Cloud Console में, OAuth के लिए सहमति देने वाली स्क्रीन पर जाएं
- 'उपयोगकर्ता का टाइप' में जाकर, 'बाहरी उपयोगकर्ता बनाएं' पर क्लिक करें
- पब्लिश करने की स्थिति के तौर पर 'जांच की जा रही है' चुनें
- 'पुष्टि करें' पर क्लिक करें
6. आईएपी की मदद से ऐक्सेस पर पाबंदी लगाना
IAP का इस्तेमाल करके, बैकएंड सेवा के ऐक्सेस पर पाबंदी लगाएं. इसके बाद, पुष्टि करें कि ऐप्लिकेशन को ऐक्सेस नहीं किया जा सकता.
- बैकएंड सेवा पर आईएपी चालू करना
gcloud iap web enable --resource-type=backend-services \
--oauth2-client-id=$CLIENT_ID \
--oauth2-client-secret=$CLIENT_SECRET \
--service=employee-ui-iap-backend
आईएपी कॉन्फ़िगरेशन की पुष्टि करना
- पुष्टि करें कि एसएसएल सर्टिफ़िकेट चालू है
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
- सेवा का यूआरएल पाना
echo https://$DOMAIN
आउटपुट का उदाहरण
https://34.102.234.98.nip.io
- कर्मचारी पोर्टल खोलने के लिए, सेवा के यूआरएल पर क्लिक करें.
- अपने लैब क्रेडेंशियल का इस्तेमाल करके लॉगिन करें.
- ब्राउज़र बंद करना
कर्मचारी पोर्टल का ऐक्सेस देना
- पिछले चरण में बनाए गए उपयोगकर्ता के लिए,
'roles/iap.httpsResourceAccessor'
की भूमिका के लिए IAM नीति बाइंडिंग जोड़ें
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
- कर्मचारी पोर्टल खोलने के लिए, सेवा के यूआरएल पर क्लिक करें.
अब आपके पास कर्मचारी पोर्टल का ऐक्सेस होना चाहिए.
(ज़रूरी नहीं) सभी डिपेंडेंसी डिप्लॉय करें. इन माइक्रोसर्विस को डिप्लॉय करने में करीब 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 की मदद से Cloud Workflows को ट्रिगर करना
- Cloud Storage से इवेंट प्रोसेसिंग को ट्रिगर करना
- Cloud Run से निजी CloudSQL से कनेक्ट करना
- Cloud Run से पूरी तरह मैनेज किए जाने वाले डेटाबेस से कनेक्ट करना
- Cloud Scheduler की मदद से, Cloud Run जॉब ट्रिगर करना
- Cloud Run पर सुरक्षित तरीके से डिप्लॉय करना
- Cloud Run के इनग्रेस ट्रैफ़िक को सुरक्षित करना
- GKE Autopilot से निजी AlloyDB से कनेक्ट करना
व्यवस्थित करें
इस ट्यूटोरियल में इस्तेमाल किए गए संसाधनों के लिए, आपके Google Cloud खाते से शुल्क न लिया जाए, इसके लिए संसाधनों वाले प्रोजेक्ट को मिटाएं या प्रोजेक्ट को बनाए रखें और अलग-अलग संसाधनों को मिटाएं.
प्रोजेक्ट मिटाना
बिलिंग की सुविधा बंद करने का सबसे आसान तरीका, ट्यूटोरियल के लिए बनाया गया प्रोजेक्ट मिटाना है.