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

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

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

94b06525c85408ad.png

पहचान-जागरूक प्रॉक्सी क्या है?

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

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

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

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

86416f68c0b8152a.png

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

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

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

बैकएंड सेवा बनाएं और बिना सर्वर वाला NEG जोड़ें

बैकएंड सेवा यह तय करती है कि क्लाउड लोड बैलेंसिंग, ट्रैफ़िक को कैसे बांटती है. बैकएंड सेवा के कॉन्फ़िगरेशन में वैल्यू का एक सेट होता है. जैसे, बैकएंड से कनेक्ट करने के लिए इस्तेमाल किया जाने वाला प्रोटोकॉल, डिस्ट्रिब्यूशन और सेशन की सेटिंग, हेल्थ चेक, और टाइम आउट. इन सेटिंग की मदद से, यह कंट्रोल किया जा सकता है कि लोड बैलेंसर कैसा काम करे.

  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. बैकएंड सेवा में बैकएंड के तौर पर, बिना सर्वर वाला NEG जोड़ें
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. लोड बैलेंसर कॉम्पोनेंट कॉन्फ़िगर करना

यहां दिए गए डायग्राम में दिखाया गया है कि लोड बैलेंसर, बिना सर्वर वाले NEG बैकएंड का इस्तेमाल करता है, ताकि बिना सर्वर वाली 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. सेवा URL लिंक पर क्लिक करें

8505fde7e0784bf1.png

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

5. लोड बैलेंसर पर Cloud Identity-Aware Proxy (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) से ऐक्सेस को सीमित करना

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

  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

आईएपी कॉन्फ़िगरेशन की पुष्टि करें

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

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

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

352b600209c3fb33.png

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

f7e0318388aa0739.png

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

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

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

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

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

  1. सेवा URL पाएं
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 Eagles के अन्य कोडलैब एक्सप्लोर करें:

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

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

प्रोजेक्ट मिटाया जा रहा है

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