Cloud Run इन्ग्रेस ट्रैफ़िक को सुरक्षित करना

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

इस लैब में, आपको Cloud Run सेवा के ऐक्सेस को सीमित करने का तरीका बताया गया है. साथ ही, इसमें यह भी बताया गया है कि कंपनी की इमारत में या आपके प्रोजेक्ट के वीपीसी में चल रहे वर्कलोड से सिर्फ़ अनुरोधों को अनुमति कैसे दी जा सकती है. ऐक्सेस कंट्रोल की दो लेयर का इस्तेमाल किया जा सकता है: इनग्रेस सेटिंग और Identity and Access Management (IAM) नीतियां.

5aed47d10595c878.png

इनग्रेस सेटिंग

इनग्रेस सेटिंग की मदद से, अनुरोधों को उनके नेटवर्क के हिसाब से फ़िल्टर किया जा सकता है. जैसे, अनुरोध संगठन के नेटवर्क से किया गया है या किसी बाहरी नेटवर्क से. डिफ़ॉल्ट रूप से, सभी अनुरोधों को पास होने की अनुमति होती है. इनमें सार्वजनिक इंटरनेट से किए गए अनुरोध भी शामिल हैं.

आईएएम नीति

IAM नीतियां, अनुरोध भेजने वाले की पहचान के आधार पर अनुरोधों को फ़िल्टर करने की सुविधा देती हैं. इनका इस्तेमाल आम तौर पर, सेवा से सेवा के अनुरोधों की पुष्टि करने के लिए किया जाता है.

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

कंपनी की इमारत में मौजूद होस्ट, वीपीसी के ज़रिए कनेक्ट होते हैं

इस लैब में, हम ऑन-प्रिमाइसेस वर्कलोड को सिम्युलेट करेंगे. किसी ऑन-प्रिमाइसेस होस्ट को Cloud Run से कनेक्ट करने के लिए, आपको ऑन-प्रिमाइसेस होस्ट के लिए Private Google Access को कॉन्फ़िगर करना होगा. इसमें वीपीसी नेटवर्क में Cloud वीपीएन गेटवे सेट अप करना शामिल है. इसे यहां दिखाया गया है.

31611f6a2f12fd0c.png

वीपीसी में जंप सर्वर का इस्तेमाल करके, कंपनी की इमारत में मौजूद वर्कलोड को सिम्युलेट करना

इस लैब में, वीपीसी में मौजूद Compute Engine वर्चुअल मशीन से अनुरोध भेजकर, कंपनी की इमारत में मौजूद होस्ट से अनुरोध भेजने का सिम्युलेशन किया जाएगा. इसे यहां दिखाया गया है.

aebf22740c7a84f0.png

जिस Compute Engine वर्चुअल मशीन का इस्तेमाल जंप सर्वर के तौर पर किया जाएगा उसका नेटवर्क ओरिजिन, Cloud VPN Gateway के नेटवर्क ओरिजिन के जैसा ही है. इसलिए, इसका इस्तेमाल करके कंपनी की इमारत में मौजूद वर्कलोड से अनुरोध भेजने का सिम्युलेशन किया जा सकता है.

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 REGION=us-central1
export ZONE=us-central1-a
  1. इस लैब को पूरा करने के लिए ज़रूरी एपीआई चालू करें.
gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  compute.googleapis.com \
  artifactregistry.googleapis.com
  1. सैंपल के तौर पर मिले ऐप्लिकेशन की रिपॉज़िटरी क्लोन करें और डायरेक्ट्री पर जाएं
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git

cd cymbal-eats/partner-registration-service
  1. Compute Engine और Cloud Run के लिए, डिफ़ॉल्ट क्षेत्र और ज़ोन सेट करना
gcloud config set compute/region ${REGION}
gcloud config set run/region ${REGION}
gcloud config set compute/zone ${ZONE}

3. सेवा को डिप्लॉय करना

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

नीचे दी गई कमांड चलाने के दौरान, इन निर्देशों का पालन करें:

  • सोर्स कोड की जगह (...): पुष्टि करें कि आप partner-registration-service डायरेक्ट्री में हैं और डिफ़ॉल्ट वैल्यू स्वीकार करने के लिए, Enter दबाएं
  • सेवा का नाम (partner-registration-service): डिफ़ॉल्ट वैल्यू स्वीकार करने के लिए, Enter दबाएं
  • क्या पुष्टि न किए गए लोगों को [partner-registration-service] को कॉल करने की अनुमति देनी है (y/N)? Y
gcloud run deploy 

यह कमांड पूरी होने पर, यह आपकी Cloud Run सेवा का यूआरएल दिखाती है. आउटपुट, इस लिस्टिंग जैसा दिखेगा:

Service [partner-registration-service] revision [partner-registration-service-00001-haz] has been deployed and is serving 100 percent of traffic.
Service URL: https://partner-registration-service-ssssssssss-uc.a.run.app

अपने ब्राउज़र में सेवा का यूआरएल खोलें. आपको यह आउटपुट दिखेगा:

Partner registration service: RUNNING

सिर्फ़ इंटरनल अनुरोधों को अनुमति देने के लिए, सेवा सेट करना

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

इसके अलावा, Google Cloud के अन्य प्रॉडक्ट से किए गए अनुरोधों को इंटरनल माना जाता है. भले ही, वे वीपीसी का हिस्सा न हों. इन प्रॉडक्ट में, Pub/Sub और Workflows शामिल हैं.

इन सोर्स से किए गए अनुरोध, Google नेटवर्क में ही रहते हैं. भले ही, वे run.app यूआरएल पर आपकी सेवा को ऐक्सेस करते हों. साथ ही, सार्वजनिक ऐक्सेस की अनुमति नहीं होती.

सिर्फ़ इंटरनल अनुरोधों को अनुमति देने के लिए, सेवा को अपडेट करें:

gcloud run services update partner-registration-service --ingress=internal

अगर आपने सेवा देने वाली कंपनी का यूआरएल फिर से खोला, तो आपको "गड़बड़ी: अनुमति नहीं है - ऐक्सेस नहीं दिया गया है" मैसेज दिखेगा

आपका ब्राउज़र, Google Cloud प्रोजेक्ट के इंटरनल ऑरिजिन से नहीं, बल्कि किसी बाहरी नेटवर्क ऑरिजिन से अनुरोध भेजता है. इसलिए, आपको यही नतीजा मिलेगा. आपकी सेवा अब ज़्यादा सुरक्षित है.

4. Compute Engine वर्चुअल मशीन को जंप सर्वर के तौर पर बनाना

अगला चरण, Cloud VPN गेटवे के ज़रिए किसी कंपनी की इमारत में मौजूद सर्वर से अनुरोधों को सिम्युलेट करना है. इसके लिए, वीपीसी में Compute Engine इंस्टेंस बनाएं, ताकि उसे जंप सर्वर के तौर पर इस्तेमाल किया जा सके:

gcloud compute instances create jump-server --scopes=https://www.googleapis.com/auth/cloud-platform

इस कमांड का आउटपुट कुछ ऐसा दिखना चाहिए:

NAME         ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
jump-server  us-central1-a  n1-standard-1               10.128.0.10  34.170.108.8  RUNNING

Compute Engine इंस्टेंस से सेवा को अनुरोध भेजना

अब वर्चुअल मशीन पर एक टर्मिनल खोलें और वीपीसी नेटवर्क में मौजूद मशीन से सीधे अनुरोध भेजें.

अगर इस कमांड से आपको Cloud Shell में एसएसएच सेट अप करने के लिए कहा जाता है, तो इन निर्देशों का पालन करें:

gcloud compute ssh jump-server

इस निर्देश का इस्तेमाल करके, Cloud Run सेवा का यूआरएल पाएं:

gcloud run services describe partner-registration-service --region us-central1

आउटपुट की शुरुआती कुछ लाइनें ऐसी दिखनी चाहिए:

✔ Service partner-registration-service in region us-central1

URL:     https://partner-registration-service-ssssssssss-uc.a.run.app
Ingress: internal

अब यूआरएल को कॉपी करें और curl का इस्तेमाल करके, Compute Engine इंस्टेंस से अनुरोध भेजें. यह अनुरोध पूरा हो जाएगा, क्योंकि वीएम इंस्टेंस आपके प्रोजेक्ट के वीपीसी नेटवर्क में चलता है. यह एक इंटरनल सोर्स है.

export SERVICE_URL=https://

curl ${SERVICE_URL}

आउटपुट में यह जानकारी होनी चाहिए:

Partner registration service: RUNNING

5. आईएएम पर आधारित ऐक्सेस कंट्रोल के बारे में क्या जानकारी है?

इस लैब में, आपको इनग्रेस सेटिंग इस्तेमाल करने का तरीका और समय बताया गया. अगर आपको किसी ऑन-प्रिमाइसेस वर्कलोड को Cloud Run से कनेक्ट करना है, तो इनग्रेस सेटिंग एक शानदार शुरुआत है.

IAM पर आधारित ऐक्सेस कंट्रोल को लागू करने में ज़्यादा मेहनत लगती है. खास तौर पर, अगर कॉल किसी कंपनी की इमारत में मौजूद होस्ट से किया जा रहा है, तो:

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

Google, ऐक्सेस कंट्रोल के लिए कई स्तरों वाले तरीके का सुझाव देता है. सिर्फ़ इंटरनल होस्ट के लिए ऐक्सेस को सीमित करने के लिए, इनग्रेस सेटिंग का इस्तेमाल करना एक शानदार शुरुआत है. हालांकि, आपको यहीं नहीं रुकना चाहिए!

6. बधाई हो!

बधाई हो, आपने कोडलैब पूरा कर लिया है!

इसके बाद क्या होगा:

Cymbal Eats के अन्य कोडलैब एक्सप्लोर करें:

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

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

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

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

काम के रेफ़रंस

यहां कुछ और संसाधन दिए गए हैं. इनसे आपको Cloud Run पर ऐक्सेस कंट्रोल की दो लेयर के बारे में ज़्यादा जानने में मदद मिलेगी.