पहचान की जानकारी वाले प्रॉक्सी (IAP) की मदद से, बिना सर्वर वाले सुरक्षित ऐप्लिकेशन को सुरक्षित रखें

1. खास जानकारी

इस लैब में, आपको कर्मचारी पोर्टल डिप्लॉय करने के बारे में बताया जाएगा. इससे कर्मचारी, Cymbal Eats ऐप्लिकेशन से ऑर्डर देख सकते हैं, उन्हें अपडेट कर सकते हैं, और मिटा सकते हैं. आपको वर्चुअल प्राइवेट नेटवर्क (वीपीएन) का इस्तेमाल किए बिना, पोर्टल के ऐक्सेस को सुरक्षित करने के लिए Identity Aware Proxy (IAP) का इस्तेमाल करना होगा. IAP की मदद से, ज़ीरो-ट्रस्ट ऐक्सेस मॉडल को आसानी से लागू किया जा सकता है. साथ ही, यह वीपीएन की तुलना में कम समय लेता है. इसका इस्तेमाल, ऑफ़िस और क्लाउड एनवायरमेंट में काम करने वाले रिमोट वर्कर, दोनों के लिए किया जा सकता है. इससे, आपके ऐप्लिकेशन के ऐक्सेस को मैनेज करने के लिए एक ही कंट्रोल पॉइंट मिलता है.

94b06525c85408ad.png

Identity-Aware Proxy क्या है?

Identity-Aware Proxy (IAP), Google Cloud की एक सेवा है. यह आपके ऐप्लिकेशन को भेजे गए अनुरोधों को इंटरसेप्ट करती है. साथ ही, Google Identity Service का इस्तेमाल करके, अनुरोध करने वाले व्यक्ति की पुष्टि करती है. इसके बाद, यह सिर्फ़ उन अनुरोधों को आगे बढ़ने देती है जो ऐसे व्यक्ति ने किए हों जिसे ऐप्लिकेशन को ऐक्सेस करने की अनुमति मिली हो. इसके अलावा, यह पुष्टि किए गए उपयोगकर्ता की जानकारी शामिल करने के लिए, अनुरोध के हेडर में बदलाव कर सकता है.

आपको क्या-क्या सीखने को मिलेगा

  • सर्वरलेस नेटवर्क एंडपॉइंट ग्रुप (एनईजी) को कॉन्फ़िगर करने का तरीका
  • लोड बैलेंसर को कॉन्फ़िगर करने का तरीका
  • ऐक्सेस को सीमित करने के लिए, IAP को चालू करने का तरीका
  • IAP का इस्तेमाल करके ऐक्सेस को सीमित करने का तरीका

2. सेटअप और ज़रूरी शर्तें

अपनी स्पीड से एनवायरमेंट सेट अप करना

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.

b35bf95b8bf3d5d8.pnga99b7ace416376c4.pngbd84a6d3004737c5.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते हैं. इसे कभी भी अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. Cloud Console, यूनीक स्ट्रिंग को अपने-आप जनरेट करता है. आम तौर पर, आपको इससे कोई फ़र्क़ नहीं पड़ता कि यह क्या है. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे PROJECT_ID के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो कोई दूसरा रैंडम आईडी जनरेट किया जा सकता है. इसके अलावा, आपके पास अपना नाम आज़माने का विकल्प भी है. इससे आपको पता चलेगा कि वह नाम उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट की अवधि तक रहेगा.
  • आपकी जानकारी के लिए बता दें कि एक तीसरी वैल्यू भी होती है, जिसे प्रोजेक्ट नंबर कहते हैं. इसका इस्तेमाल कुछ एपीआई करते हैं. इन तीनों वैल्यू के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.
  1. इसके बाद, आपको Cloud Console में बिलिंग की सुविधा चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. इस ट्यूटोरियल के बाद बिलिंग से बचने के लिए, बनाए गए संसाधनों को बंद किया जा सकता है. इसके लिए, बनाए गए संसाधनों को मिटाएं या पूरे प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ताओं को, मुफ़्त में आज़माने के लिए 300 डॉलर का क्रेडिट मिलता है.

एनवायरमेंट सेटअप करना

  1. प्रोजेक्ट और संसाधन से जुड़े एनवायरमेंट वैरिएबल बनाना
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
  1. IAP और Cloud Resource Manager सेवा के एपीआई चालू करें
gcloud services enable \
    iap.googleapis.com \
    cloudresourcemanager.googleapis.com \
    cloudidentity.googleapis.com \
    compute.googleapis.com
  1. सैंपल के तौर पर मिले ऐप्लिकेशन की रिपॉज़िटरी क्लोन करें और डायरेक्ट्री पर जाएं
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/employee-ui
  1. सेटअप स्क्रिप्ट का इस्तेमाल करके, कर्मचारी पोर्टल डिप्लॉय करें. अगले चरण पर जाने से पहले, स्क्रिप्ट के पूरा होने का इंतज़ार करें
./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
  1. सेवा के यूआरएल लिंक पर क्लिक करें

86416f68c0b8152a.png

3. सर्वरलेस नेटवर्क एंडपॉइंट ग्रुप (एनईजी) को कॉन्फ़िगर करना

कर्मचारी के यूज़र इंटरफ़ेस (यूआई) के लिए, Cloud Run सेवा का इस्तेमाल करके बिना सर्वर वाला नेटवर्क एंडपॉइंट ग्रुप ( बिना सर्वर वाला एनईजी) बनाया जाएगा. सर्वरलेस एनईजी की मदद से, Google Cloud के सर्वरलेस ऐप्लिकेशन को एक्सटर्नल एचटीटीपी या एचटीटीपीएस लोड बैलेंसिंग के साथ इस्तेमाल किया जा सकता है.

2abe669e53c27186.png

  1. कर्मचारी के यूज़र इंटरफ़ेस (यूआई) की सेवा के लिए, नेटवर्क एंडपॉइंट ग्रुप बनाएं.
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, ट्रैफ़िक को कैसे डिस्ट्रिब्यूट करता है. बैकएंड सेवा के कॉन्फ़िगरेशन में वैल्यू का एक सेट होता है. जैसे, बैकएंड से कनेक्ट करने के लिए इस्तेमाल किया गया प्रोटोकॉल, डिस्ट्रिब्यूशन और सेशन की अलग-अलग सेटिंग, हेल्थ चेक, और टाइमआउट. इन सेटिंग से, आपको यह कंट्रोल मिलता है कि आपका लोड बैलेंसर कैसे काम करेगा.

  1. बैकएंड सेवा बनाना
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
  1. सर्वरलेस एनईजी को बैकएंड सेवा के बैकएंड के तौर पर जोड़ें
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].
  1. बैकएंड सेवा पर आने वाले अनुरोधों को रूट करने के लिए, यूआरएल मैप बनाएं
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. लोड बैलेंसर कॉम्पोनेंट कॉन्फ़िगर करना

इस डायग्राम में दिखाया गया है कि लोड बैलेंसर, सर्वरलेस एनईजी बैकएंड का इस्तेमाल करके अनुरोधों को सर्वरलेस Cloud Run सेवा पर भेजता है.

335f4674737a6514.png

स्टैटिक आईपी पता रिज़र्व करना

  1. स्टैटिक 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].
  1. यह कुकी, nip.io डोमेन को सेव करती है
export DOMAIN=$(gcloud compute addresses list --filter employee-ui-iap-ip --format='value(ADDRESS)').nip.io

Google की ओर से मैनेज किए जाने वाले एसएसएल सर्टिफ़िकेट का संसाधन बनाना

  1. 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

टारगेट एचटीटीपीएस प्रॉक्सी बनाएं

  1. अपने यूआरएल मैप पर अनुरोधों को रूट करने के लिए, टारगेट एचटीटीपीएस प्रॉक्सी बनाएं
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:

फ़ॉरवर्ड करने के नियम कॉन्फ़िगर करना

  1. इनकमिंग अनुरोधों को प्रॉक्सी पर रूट करने के लिए, आगे बढ़ाने का नियम बनाएं
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 सेवा के लिए इन्ग्रेस को सीमित करना

सिर्फ़ इंटरनल अनुरोधों और एचटीटीपी या एचटीटीपीएस लोड बैलेंसिंग के ज़रिए आने वाले अनुरोधों को स्वीकार करने के लिए, इनग्रेस ट्रैफ़िक को सीमित करें.

26cb0b2a9162e7ab.png

  1. सेवा को अपडेट करें, ताकि वह सिर्फ़ इंटरनल अनुरोधों और एचटीटीपी या एचटीटीपीएस लोड बैलेंसर के ज़रिए किए गए अनुरोधों से आने वाले ट्रैफ़िक को अनुमति दे सके
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
  1. सेवा के यूआरएल लिंक पर क्लिक करें

8505fde7e0784bf1.png

Cloud Run सेवा के यूआरएल का ऐक्सेस अब 'अनुमति नहीं है' के तौर पर दिखता है.

5. लोड बैलेंसर पर Cloud Identity-Aware Proxy (IAP) चालू करना

IAP की मदद से, एचटीटीपीएस से ऐक्सेस किए जाने वाले ऐप्लिकेशन के लिए, अनुमति देने वाली एक सेंट्रल लेयर बनाई जा सकती है. नेटवर्क-लेवल के फ़ायरवॉल के बजाय, ऐप्लिकेशन-लेवल के ऐक्सेस कंट्रोल मॉडल का इस्तेमाल किया जा सकता है.

d9740402a74370a8.png

ब्रैंड, OAuth की सहमति वाली स्क्रीन होती है. इसमें उपयोगकर्ताओं के लिए ब्रैंडिंग की जानकारी होती है. ब्रैंड को संगठन के अंदर के लोगों या सार्वजनिक उपयोगकर्ताओं के लिए प्रतिबंधित किया जा सकता है. इंटरनल ब्रैंड की मदद से, OAuth फ़्लो को उसी Google Workspace संगठन का सदस्य ऐक्सेस कर सकता है जिसका प्रोजेक्ट है. सार्वजनिक ब्रैंड होने पर, OAuth फ़्लो को इंटरनेट का इस्तेमाल करने वाला कोई भी व्यक्ति ऐक्सेस कर सकता है.

  1. ब्रैंड बनाना
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 क्लाइंट बनाना

  1. पिछले चरण में दिए गए ब्रैंड के नाम का इस्तेमाल करके, क्लाइंट बनाएं
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]
  1. क्लाइंट का नाम, आईडी, और सीक्रेट सेव करता है
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)')
  1. Cloud Console में, प्रोजेक्ट चुनने वाले ड्रॉप-डाउन मेन्यू से प्रोजेक्ट चुनें
  2. Cloud Console में OAuth के लिए सहमति देने की स्क्रीन पर जाएं

bcb460f3ab5241f4.png

  1. उपयोगकर्ता के टाइप में जाकर, बाहरी उपयोगकर्ता के तौर पर सेट करें पर क्लिक करें
  2. पब्लिश करने की स्थिति के तौर पर, 'जांच की जा रही है' को चुनें

27fd7de6e7b7ef21.png

  1. पुष्टि करें पर क्लिक करें

6. IAP की मदद से ऐक्सेस पर पाबंदी लगाना

IAP का इस्तेमाल करके, बैकएंड सेवा के ऐक्सेस पर पाबंदी लगाएं. इसके बाद, पुष्टि करें कि ऐप्लिकेशन को ऐक्सेस नहीं किया जा सकता.

  1. बैकएंड सेवा पर 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 कॉन्फ़िगरेशन की पुष्टि करना

  1. पुष्टि करें कि एसएसएल सर्टिफ़िकेट चालू है
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
  1. सेवा का यूआरएल पाना
echo https://$DOMAIN

आउटपुट का उदाहरण

https://34.102.234.98.nip.io
  1. कर्मचारी पोर्टल खोलने के लिए, सेवा के यूआरएल पर क्लिक करें.

352b600209c3fb33.png

  1. अपने लैब क्रेडेंशियल का इस्तेमाल करके लॉग इन करें.

f7e0318388aa0739.png

  1. ब्राउज़र बंद करें

उपयोगकर्ता को कर्मचारी पोर्टल का ऐक्सेस देना

  1. पिछले चरण में बनाए गए उपयोगकर्ता के लिए, '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].

सेवा के ऐक्सेस की जांच की जा रही है

पुष्टि करें कि कर्मचारी पोर्टल का ऐक्सेस दिया गया है

  1. सेवा का यूआरएल पाना
echo https://$DOMAIN

आउटपुट का उदाहरण

https://34.102.234.98.nip.io
  1. कर्मचारी पोर्टल खोलने के लिए, सेवा के यूआरएल पर क्लिक करें.

86416f68c0b8152a.png

अब आपके पास कर्मचारी पोर्टल का ऐक्सेस होना चाहिए.

(ज़रूरी नहीं) सभी डिपेंडेंसी डिप्लॉय करें. इन माइक्रोसेवाओं को डिप्लॉय करने में ~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 के अन्य कोडलैब एक्सप्लोर करें:

व्यवस्थित करें

इस ट्यूटोरियल में इस्तेमाल किए गए संसाधनों के लिए, अपने Google Cloud खाते से शुल्क न लिए जाने के लिए, संसाधनों वाला प्रोजेक्ट मिटाएं या प्रोजेक्ट को बनाए रखें और अलग-अलग संसाधनों को मिटाएं.

प्रोजेक्ट मिटाना

बिलिंग को बंद करने का सबसे आसान तरीका यह है कि ट्यूटोरियल के लिए बनाया गया प्रोजेक्ट मिटा दिया जाए.