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

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

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

5aed47d10595c878.png

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

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

आईएएम नीति

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

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

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

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

31611f6a2f12fd0c.png

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

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

aebf22740c7a84f0.png

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

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

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

6. बधाई हो!

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

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

Cymbal Eats के अन्य कोडलैब देखें:

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

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

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

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

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

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