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

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

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

5aed47d10595c878.png

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

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

आईएएम नीति

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

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

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

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

31611f6a2f12fd0c.png

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

इस लैब में, आपको ऑन-प्राइमिस होस्ट से अनुरोध भेजने का सिम्युलेशन करना होगा. इसके लिए, आपको वीपीसी में मौजूद 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 के संसाधनों/एपीआई का इस्तेमाल करने के लिए, 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. सेवा को डिप्लॉय करना

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

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

  • सोर्स कोड की जगह (...): पुष्टि करें कि आप 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 सेवा के साथ एक ही प्रोजेक्ट (या VPC सर्विस कंट्रोल पेरीमीटर) में होते हैं. इस वजह से, यह हमारे इस्तेमाल के उदाहरण के लिए सबसे सही है.

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

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

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

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

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

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

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

अगला चरण, Cloud वीपीएन गेटवे के ज़रिए ऑन-प्राइमिस सर्वर से अनुरोधों को सिम्युलेट करना है. इसके लिए, आपको VPC में 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 इंस्टेंस से सेवा को अनुरोध भेजना

अब आपको वर्चुअल मशीन पर टर्मिनल खोलना होगा और सीधे मशीन से 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

अब यूआरएल को कॉपी करें और 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 पर ऐक्सेस कंट्रोल की दो लेयर के बारे में ज़्यादा जानने में मदद मिलेगी.