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

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

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

5aed47d10595c878.png

इन्ग्रेस डेटा ट्रैफ़िक की सेटिंग

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

IAM नीति

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

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

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

इस लैब में, हम कंपनी की इमारत में होने वाले वर्कलोड को सिम्युलेट करेंगे. कंपनी की इमारत में होस्ट को Cloud Run से कनेक्ट करने के लिए, आपको कंपनी की इमारत में होस्ट किए जाने वाले होस्ट के लिए निजी Google ऐक्सेस को कॉन्फ़िगर करना होगा. इसमें VPC नेटवर्क में, Cloud VPN गेटवे सेट अप करना भी शामिल है, जैसा कि नीचे बताया गया है.

31611f6a2f12fd0c.png

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

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

aebf22740c7a84f0.png

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

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 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. सेवा को डिप्लॉय करें

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

जब आप निम्न आदेश चलाएं, तो इन निर्देशों का पालन करें:

  • सोर्स कोड लोकेशन (...): पुष्टि करें कि आप पार्टनर-रजिस्ट्रेशन-सेवा डायरेक्ट्री में हैं और डिफ़ॉल्ट को स्वीकार करने के लिए, Enter दबाएं
  • सेवा का नाम (partner-register-service): डिफ़ॉल्ट को स्वीकार करने के लिए enter दबाएं
  • क्या [partner-registration-service] (y/N) को शुरू करने की अनुमति नहीं दी गई है? हां
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 सेवा वाले प्रोजेक्ट (या VPC सर्विस कंट्रोल पेरीमीटर) में मौजूद होते हैं. इससे यह हमारे इस्तेमाल के उदाहरण के लिए सबसे सही होता है.

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

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

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

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

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

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

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

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

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 इंस्टेंस से सेवा को अनुरोध भेजें

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

अगर यहां दिया गया निर्देश आपको 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

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

export SERVICE_URL=https://

curl ${SERVICE_URL}

आउटपुट में यह लिखा होना चाहिए:

Partner registration service: RUNNING

5. IAM पर आधारित ऐक्सेस कंट्रोल की सुविधा क्या है?

इस लैब से पता चलता है कि इन्ग्रेस डेटा ट्रैफ़िक की सेटिंग को कब और कैसे इस्तेमाल करना चाहिए. अगर कंपनी की इमारत में मौजूद वर्कलोड को Cloud Run से कनेक्ट करना है, तो इन्ग्रेस डेटा ट्रैफ़िक की सेटिंग सबसे ज़रूरी कदम है.

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

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

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

6. बधाई हो!

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

आने वाले समय में मिलने वाली सुविधाएं:

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

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

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

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

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

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

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