वीपीसी सेवा नियंत्रण - BigQuery सुरक्षा कोडलैब (कोड बनाना सीखना) I

1. परिचय

इस कोडलैब में, आपको VPC सेवा कंट्रोल का इस्तेमाल करके BigQuery API को सुरक्षित रखने का तरीका बताया जाएगा. कोडलैब की शुरुआत में, सेवा के पेरीमीटर से सुरक्षित कोई एपीआई सेवा नहीं होती. इससे सार्वजनिक डेटासेट पर क्वेरी चलाई जा सकती हैं और नतीजों को प्रोजेक्ट टेबल में सेव किया जा सकता है. क्वेरी एक प्रोजेक्ट में चलती है और टेबल (जहां नतीजे सेव किए जाते हैं) किसी दूसरे प्रोजेक्ट में बनाई जाती है. यह टेबल ऐसे सेटअप की नकल करती है जिसमें डेटा को एक प्रोजेक्ट में सेव किया जा सकता है, लेकिन इसे ऐक्सेस करने के लिए किसी दूसरे प्रोजेक्ट का इस्तेमाल करना पड़ता है.

इसके बाद, हम डेटा प्रोजेक्ट को सुरक्षित रखने के लिए सर्विस पेरीमीटर की शुरुआत करेंगे. आपको इनग्रेस डेटा ट्रैफ़िक और इग्रेस डेटा ट्रैफ़िक के नियमों का इस्तेमाल करके, हुए उल्लंघनों को ठीक करने के तरीके की जानकारी मिलेगी. साथ ही, आपको इंटरनल आईपी पतों का इस्तेमाल करके ऐक्सेस पर पाबंदी लगाने के लिए, ऐक्सेस लेवल जोड़ने का तरीका भी पता चलेगा. इस कोडलैब के लक्ष्य ये हैं:

  • इन्ग्रेस डेटा ट्रैफ़िक और इग्रेस डेटा ट्रैफ़िक के नियमों का इस्तेमाल करके, इन्ग्रेस डेटा ट्रैफ़िक और इग्रेस डेटा ट्रैफ़िक के उल्लंघनों को ठीक करने का तरीका जानें.
  • जानें कि कोई खास उल्लंघन क्यों हुआ.
  • लागू किए गए उल्लंघन को ठीक करने के दायरे का विश्लेषण करें.
  • ऐक्सेस लेवल का इस्तेमाल करके, VPC नेटवर्क में इंटरनल आईपी पतों से ट्रैफ़िक को अनुमति देने के विकल्प का इस्तेमाल करके, गड़बड़ी के स्कोप (इन्ग्रेस डेटा ट्रैफ़िक या इग्रेस डेटा ट्रैफ़िक के नियम) में बदलाव करें.

2. संसाधनों का सेटअप और ज़रूरी शर्तें

शुरू करने से पहले

इस कोडलैब में, हम मानते हैं कि आपको यह पहले से पता है:

सेटअप

हमारे शुरुआती सेटअप को इस तरह तैयार किया गया है:

शुरुआती डिज़ाइन, जिसमें सर्विस पेरीमीटर हो और एपीआई को सुरक्षित न रखा गया हो.

एक सामान्य सर्विस पेरीमीटर बनाएं

इस कोडलैब में, हम project-1 की सुरक्षा के लिए एक सामान्य सर्विस पेरीमीटर का इस्तेमाल करेंगे.

Compute Engine वीएम बनाएं

इस कोडलैब में, हम project-2 में एक Compute Engine इंस्टेंस का इस्तेमाल करेंगे. यह इंस्टेंस us-central1 में मौजूद होगा और यह default नाम के डिफ़ॉल्ट VPC नेटवर्क का इस्तेमाल करेगा.

लागत

क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, आपको Google Cloud Console में बिलिंग की सुविधा चालू करनी होगी. हम इस्तेमाल किए गए संसाधनों को बंद करने की सलाह देते हैं, ताकि इस कोडलैब के अलावा दूसरी तरह की बिलिंग से बचने में मदद मिल सके. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त में आज़माने वाले प्रोग्राम में शामिल हो सकते हैं.

BigQuery और Compute Engine इंस्टेंस, सिर्फ़ वे संसाधन हैं जिन पर लागत लगती है. BigQuery प्राइसिंग कैलकुलेटर और Compute Engine प्राइसिंग कैलकुलेटर का इस्तेमाल करके, लागत का अनुमान लगाया जा सकता है.

3. VPC सर्विस कंट्रोल से जुड़ी पाबंदियों के बिना BigQuery को ऐक्सेस करना

क्वेरी सार्वजनिक डेटासेट और project-1 में नतीजे सेव करें

  1. आपके पास BigQuery API ऐक्सेस है या नहीं, इसकी पुष्टि करने के लिए project-2 और project-1 को ऐक्सेस करें. इसके लिए, BigQuery Studio पेज पर जाएं. आपको ऐसा करने में समर्थ होना चाहिए, क्योंकि भले ही project-1 किसी सर्विस पेरीमीटर में हो, फिर भी पेरीमीटर किसी भी सेवा की सुरक्षा नहीं कर रहा है.
  2. सार्वजनिक डेटासेट के बारे में क्वेरी करने के लिए, project-2 से नीचे दी गई क्वेरी चलाएं.
SELECT  name, SUM(number) AS total
FROM  `bigquery-public-data.usa_names.usa_1910_2013`
GROUP BY   name
ORDER BY total DESC
LIMIT 10;

सार्वजनिक डेटासेट पर क्वेरी चलाने के बाद (project-2 में बने रहते हुए):

  1. नतीजे सेव करें पर क्लिक करें और BigQuery टेबल चुनें. (नीचे दिया गया स्क्रीनशॉट देखें). BigQuery के नतीजे सेव करें. अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  2. project-1 को डेस्टिनेशन प्रोजेक्ट के तौर पर चुनें.
  3. डेटासेट को codelab_dataset नाम दें. (अगर किसी मौजूदा डेटासेट का इस्तेमाल नहीं किया जा रहा है, तो नया डेटासेट बनाएं चुनें). BigQuery के नतीजे सेव करते समय डेस्टिनेशन प्रोजेक्ट चुनना.
  4. टेबल का नाम इस तरह रखें: codelab-table.
  5. सेव करें पर क्लिक करें.

project-2 से क्वेरी चलाने की वजह से, सार्वजनिक डेटासेट का डेटा project-1 में सेव हो गया है.

क्वेरी डेटासेट को project-2 से project-1 में सेव किया गया

project-2 BigQuery Studio में रहते हुए, इनसे डेटा चुनने के लिए, यहां दी गई क्वेरी चलाएं:

  • प्रोजेक्ट: project-1
  • डेटासेट: codelab_dataset
  • टेबल: codelab-table
SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;

क्वेरी सही तरीके से चलनी चाहिए, क्योंकि project-2 या project-1 में से किसी पर भी BigQuery का इस्तेमाल करने की अनुमति नहीं है. अगर उपयोगकर्ता के पास ज़रूरी IAM अनुमतियां हैं, तो BigQuery को कहीं से भी ऐक्सेस किया जा सकता है.

VPC सर्विस कंट्रोल सेवा के पेरीमीटर के बिना, कोडलैब सेटअप करना. इस डायग्राम में, BigQuery डेटासेट पर क्वेरी करने की प्रोसेस के बारे में बताया गया है. हर BigQuery क्वेरी के लिए, एक BigQuery जॉब शुरू किया जाता है. इसके बाद, यह असल में काम करता है. इस स्थिति में, डेटा पाने के लिए डेटा इकट्ठा किया जाता है. मुख्य ऐक्सेस को Compute Engine इंस्टेंस और इंटरनेट से दिखाया जाता है. ऐसा, सार्वजनिक डेटासेट और अलग Google Cloud प्रोजेक्ट से क्वेरी करते समय किया जाता है. डेटा (GetData) से क्वेरी करने की प्रोसेस पूरी हो गई है. इसे VPC सर्विस कंट्रोल से ब्लॉक नहीं किया गया है.

4. सोर्स डेटासेट प्रोजेक्ट में BigQuery API को सुरक्षित रखें

पेरीमीटर perimeter-1 का कॉन्फ़िगरेशन बदलें और BigQuery API सेवा के साथ-साथ सुरक्षित संसाधन project-1 पर पाबंदी लगाएं.

सेवा पेरीमीटर कॉन्फ़िगर करना

सेवा पैरामीटर के लागू होने की पुष्टि करें

BigQuery Studio में, project-2 से, पिछले चरण की तरह ही, यहां दी गई क्वेरी चलाएं:

SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;

VPC सर्विस कंट्रोल से जुड़ी RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER नीति का उल्लंघन होगा

इग्रेस डेटा ट्रैफ़िक के लिए VPC सर्विस कंट्रोल से जुड़ी नीति का उल्लंघन

उल्लंघन वाला ऑडिट लॉग project-1 में दिखेगा, क्योंकि उसी जगह से उल्लंघन हुआ है. लॉग को मॉनिटर किए गए vpcServiceControlsUniqueId की मदद से फ़िल्टर किया जा सकता है. VPC_SC_DENIAL_UNIQUE_ID को मॉनिटर किए गए यूनीक आईडी से बदलें.

severity=ERROR
resource.type="audited_resource"
protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.metadata.vpcServiceControlsUniqueId="[*VPC_SC_DENIAL_UNIQUE_ID*]"

उल्लंघन, egressViolations है:

  • principalEmail: [क्वेरी करने वाला उपयोगकर्ता खाता]
  • callerIp: [क्वेरी करने वाले उपयोगकर्ता एजेंट का आईपी पता]
     "egressViolations": [
       {
         "targetResource": "projects/project-2",
         "sourceType": "Resource",
         "source": "projects/project-1",
         "servicePerimeter": "accessPolicies/REDACTED/servicePerimeters/perimeter-1",
         "targetResourcePermissions": [ "bigquery.jobs.create"]
       }      ],

5. BigQuery जॉब बनाने के लिए, उल्लंघन को ठीक करना

BigQuery जॉब बनाने के लिए, इग्रेस डेटा ट्रैफ़िक नहीं मिल सका. यह डायग्राम तब दिखाता है, जब कोई मुख्य खाता project-1 में मौजूद डेटासेट के लिए, project-2 से क्वेरी करता है. जिस प्रोजेक्ट (project-2) से क्वेरी चलाई जाती है उसमें डेटासेट प्रोजेक्ट (project-1) से BigQuery जॉब बनाने की कार्रवाई नहीं की जा सकती. ऐसा, BigQuery API की सुरक्षा करने वाली सेवा पेरीमीटर perimeter-1 की वजह से, VPC सर्विस कंट्रोल इग्रेस डेटा ट्रैफ़िक के उल्लंघन की वजह से नहीं हो सका. पेरीमीटर के सही होने पर, project-1 से परिधि के बाहर की ओर या सुरक्षित प्रोजेक्ट की ओर उसके बाहर कोई BigQuery API अनुरोध नहीं किया जा सकता; जब तक सर्विस पेरीमीटर कॉन्फ़िगरेशन की अनुमति न हो.

इग्रेस डेटा ट्रैफ़िक के उल्लंघन की समस्या को ठीक करने के लिए, इन चीज़ों पर आधारित इग्रेस डेटा ट्रैफ़िक का नियम बनाएं:

  • स्रोत (FROM): उपयोगकर्ता का ईमेल पता और संदर्भ (उदाहरण: कॉलर आईपी पता, डिवाइस स्थिति, स्थान वगैरह)
  • डेस्टिनेशन (TO): टारगेट संसाधन, सेवा, और तरीका या अनुमति.

देखे गए इग्रेस डेटा नीति के उल्लंघन को ठीक करने के लिए, इग्रेस डेटा ट्रैफ़िक का ऐसा नियम बनाएं जो BigQuery सेवा और bigquery.jobs.create तरीके/ अनुमति पर क्वेरी (user@example.com) चलाने वाले उपयोगकर्ता खाते से, targetResource (project-2) पर ट्रैफ़िक की अनुमति देता हो.

इग्रेस डेटा ट्रैफ़िक का उल्लंघन ठीक करने के लिए कॉन्फ़िगरेशन.

कॉन्फ़िगर किए गए इग्रेस डेटा ट्रैफ़िक के नियम का अनुमानित व्यवहार:

  • इन्होंने भेजा | पहचान: परिधि की सीमा पार करने के लिए, सिर्फ़ बताए गए आइडेंटिटी user@example.com को अनुमति होनी चाहिए.
  • प्रति | प्रोजेक्ट: खास पहचान, पेरीमीटर की सीमाओं को तभी पार कर सकती है, जब डेस्टिनेशन पर प्रोजेक्ट project-2 हो.
  • प्रति | सेवाएं: बताई गई पहचान, बताए गए प्रोजेक्ट की ओर ट्रैफ़िक को पेरीमीटर के बाहर सिर्फ़ तब भेज सकती है, जब एपीआई कॉल तय सेवा और तरीके के लिए हो. ऐसा नहीं होने पर, उदाहरण के लिए, अगर वह सेवा पेरीमीटर से सुरक्षित की गई किसी दूसरी सेवा को आज़माता है, तो कार्रवाई ब्लॉक हो जाएगी, क्योंकि अन्य सेवाओं को अनुमति नहीं है.

गड़बड़ी की जांच करें: इग्रेस डेटा ट्रैफ़िक का नियम

इग्रेस डेटा ट्रैफ़िक का नियम लागू होने के बाद, वही क्वेरी चलाएं.

SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;

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

इन्ग्रेसिव VPC सर्विस कंट्रोल से जुड़ी नीति का उल्लंघन

नई उल्लंघन, इन्ग्रेस डेटा ट्रैफ़िक को रोकने के लिए बनी है. इसके तहत,

  • principalEmail: [क्वेरी करने वाला उपयोगकर्ता खाता]
  • callerIp: [क्वेरी करने वाले उपयोगकर्ता एजेंट का आईपी पता]
ingressViolations: [
0: {
 servicePerimeter: "accessPolicies/REDACTED/servicePerimeters/perimeter-1"
 targetResource: "projects/project-1"
 targetResourcePermissions: [0: "bigquery.tables.getData"]}
 ]

bigquery.tables.getData तरीके का उल्लंघन, BigQuery टेबल से डेटा पाने की कोशिश करने वाले BigQuery जॉब की ओर से शुरू किए गए एपीआई कॉल की वजह से है.

6. BigQuery टेबल डेटा पाने के लिए, उल्लंघन को ठीक करना

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

इन्ग्रेस डेटा ट्रैफ़िक के उल्लंघन की समस्या को इन्ग्रेस डेटा ट्रैफ़िक के नियम से ठीक किया जाता है. इस नियम को इनके साथ कॉन्फ़िगर किया जाता है:

  • स्रोत (FROM): उपयोगकर्ता का ईमेल पता और संदर्भ (उदाहरण: कॉलर आईपी पता, डिवाइस स्थिति, स्थान वगैरह)
  • डेस्टिनेशन (TO): टारगेट संसाधन, सेवा, और तरीका या अनुमति.

इन्ग्रेस डेटा ट्रैफ़िक का नियम, project-1 के लिए तय की गई सेवा और तरीके के हिसाब से उपयोगकर्ता को ट्रैफ़िक की अनुमति देगा.

इन्ग्रेस डेटा ट्रैफ़िक के उल्लंघन की समस्या ठीक करना

कॉन्फ़िगर किए गए इन्ग्रेस डेटा ट्रैफ़िक के नियम से अनुमानित व्यवहार:

  • इन्होंने भेजा | पहचान: परिधि की सीमा पार करने के लिए, सिर्फ़ बताए गए आइडेंटिटी user@example.com को अनुमति होनी चाहिए.
  • प्रति | प्रोजेक्ट: खास पहचान, पेरीमीटर की सीमाओं को तभी पार कर सकती है, जब डेस्टिनेशन पर प्रोजेक्ट project-1 हो.
  • प्रति | सेवाएं: खास पहचान, पेरीमीटर के अंदर ट्रैफ़िक तभी शुरू कर सकती है, जब BigQuery API और बताए गए तरीके bigquery.tables.getData के लिए एपीआई कॉल किया गया हो.

VPC सर्विस कंट्रोल के उल्लंघनों के बिना, एक जैसी क्वेरी को सही तरीके से लागू किया जाना चाहिए.

हमने project-1 में BigQuery API पर पाबंदी लगा दी है, ताकि इसका इस्तेमाल सिर्फ़ user@example.com कर सके, user2@example.com नहीं.

BigQuery API की सुरक्षा करने वाला VPC सर्विस कंट्रोल पेरीमीटर यह डायग्राम दिखाता है कि दो अलग-अलग सिद्धांत, एक ही डेटासेट पर क्वेरी करने की कोशिश कैसे करते हैं. VPC सर्विस कंट्रोल, user2@example.com (बिंदुओं वाली नीली लाइन) को ऐक्सेस नहीं कर सकते. ऐसा इसलिए है, क्योंकि सेवा पेरीमीटर कॉन्फ़िगरेशन के मुताबिक, उनके पास project-1 से या उसकी ओर BigQuery कार्रवाइयां करने की अनुमति नहीं है. user@example.com (हरे रंग की सॉलिड लाइन) से ऐक्सेस मिल गया है. ऐसा इसलिए, क्योंकि इन्हें VPC सर्विस कंट्रोल कॉन्फ़िगरेशन के तहत अनुमति मिली है, ताकि ये project-1 से और उसकी ओर कार्रवाई कर सकें.

7. इंटरनल आईपी पते के आधार पर, सर्विस पेरीमीटर के ज़रिए अनुमति वाले ट्रैफ़िक पर पाबंदी लगाएं

मौजूदा कॉन्फ़िगरेशन, तय किए गए उपयोगकर्ता को किसी भी जगह से project-1 में BigQuery पर क्वेरी चलाने की सुविधा देता है; इंटरनेट पर कहीं भी, जब उन्हें डेटा से क्वेरी करने के लिए IAM अनुमति दी गई हो और जब तक कि वे अपने खाते का इस्तेमाल करते हों. सुरक्षा के लिहाज़ से, इसका मतलब है कि अगर खाते को हैक किया गया है, तो खाते का ऐक्सेस पाने वाला कोई भी व्यक्ति, बिना किसी अतिरिक्त पाबंदी के BigQuery डेटा को ऐक्सेस कर सकता है.

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

इंटरनल आईपी पते को ऐक्सेस करने की शर्त के साथ ऐक्सेस लेवल बनाएं

ऐक्सेस लेवल बनाने के लिए, एक ही स्कोप वाली ऐक्सेस नीति फ़ोल्डर के तहत ऐक्सेस कॉन्टेक्स्ट मैनेजर पेज खोलें.

  1. ऐक्सेस कॉन्टेक्स्ट मैनेजर पेज पर, ऐक्सेस लेवल बनाएं चुनें.
  2. नए ऐक्सेस लेवल पैनल में:
    1. कोई टाइटल दें: आपके पास codelab-al का इस्तेमाल करने का विकल्प है.
    2. 'शर्तें' सेक्शन में, आईपी सबनेटवर्क पर क्लिक करें.
    3. निजी आईपी टैब चुनें और VPC नेटवर्क चुनें पर क्लिक करें.
    4. VPC नेटवर्क जोड़ें पैनल में जाकर, default नेटवर्क को ब्राउज़ करके उसे ढूंढा जा सकता है. इसके अलावा, नेटवर्क का पूरा नाम मैन्युअल तरीके से //compute.googleapis.com/projects/project-2/global/networks/default फ़ॉर्मैट में डाला जा सकता है.
    5. VPC नेटवर्क जोड़ें पर क्लिक करें.
    6. आईपी सबनेट चुनें पर क्लिक करें.
    7. वह इलाका चुनें जहां वीएम इंस्टेंस मौजूद है. इस कोडलैब के लिए, यह us-central1 है.
    8. सेव करें पर क्लिक करें.

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

आईपी सबनेटवर्क के साथ कॉन्फ़िगर किया गया ऐक्सेस लेवल

इन्ग्रेस डेटा ट्रैफ़िक के नियम के लिए ऐक्सेस लेवल जोड़ें

यह पक्का करने के लिए कि इन्ग्रेस डेटा ट्रैफ़िक के नियम से मिली अनुमति वाले उपयोगकर्ता की पुष्टि भी ऐक्सेस लेवल के हिसाब से की गई है, इन्ग्रेस डेटा ट्रैफ़िक के नियम में ऐक्सेस लेवल को कॉन्फ़िगर करना ज़रूरी है. क्वेरी के डेटा को ऐक्सेस करने की अनुमति देने वाला इन्ग्रेस डेटा ट्रैफ़िक का नियम perimeter-1 में है. ऐक्सेस लेवल codelab-al के तौर पर सोर्स को तय करने के लिए, इन्ग्रेस डेटा ट्रैफ़िक के नियम में बदलाव करें.

VPC नेटवर्क की मदद से ऐक्सेस लेवल

नए कॉन्फ़िगरेशन की जांच करना

इन्ग्रेस डेटा ट्रैफ़िक के नियम में ऐक्सेस लेवल जोड़ने के बाद, BigQuery से जुड़ी वही क्वेरी काम नहीं करेगी जो project-2 प्रोजेक्ट के लिए VPC नेटवर्क default में क्लाइंट से इस्तेमाल की गई हो. इस व्यवहार की पुष्टि करने के लिए, Google Cloud Console से क्वेरी को तब एक्ज़ीक्यूट करें, जब एंडपॉइंट डिवाइस के इंटरनेट से कनेक्ट हो. इन्ग्रेस डेटा ट्रैफ़िक के उल्लंघन का संकेत मिलने पर, क्वेरी असफल तरीके से खत्म हो जाएगी.

यही क्वेरी, project-2 में मौजूद VPC नेटवर्क default से चलाई जा सकती है. इसी तरह, VPC नेटवर्क default का इस्तेमाल करके, project-2 में मौजूद Compute Engine इंस्टेंस से उसी BigQuery क्वेरी को एक्ज़ीक्यूट नहीं किया जा सकेगा. इसकी वजह यह है कि इन्ग्रेस डेटा ट्रैफ़िक का नियम अब भी सिर्फ़ मुख्य user@example.com को अनुमति देने के लिए कॉन्फ़िगर किया गया है. हालांकि, वीएम में Compute Engine के डिफ़ॉल्ट सेवा खाते का इस्तेमाल किया जा रहा है.

project-2 में Compute Engine इंस्टेंस से एक ही कमांड को चलाने के लिए,पक्का करें कि:

  • BigQuery API का इस्तेमाल करने के लिए, वीएम के पास ऐक्सेस का दायरा होता है. इसके लिए, वीएम ऐक्सेस के दायरे के तौर पर, सभी क्लाउड एपीआई का पूरा ऐक्सेस दें को चुनें.
  • वीएम से जुड़े सेवा खाते के लिए, IAM की अनुमतियों की ज़रूरत है:
    • project-2 में BigQuery जॉब बनाएं
    • project-1 में मौजूद BigQuery टेबल से BigQuery डेटा पाएं
  • डिफ़ॉल्ट Compute Engine सेवा खाते को, इन्ग्रेस डेटा ट्रैफ़िक और इग्रेस डेटा ट्रैफ़िक के नियम के मुताबिक अनुमति देनी चाहिए.

अब हमें Compute Engine के डिफ़ॉल्ट सेवा खाते को इन्ग्रेस डेटा ट्रैफ़िक के नियमों (BigQuery टेबल से डेटा पाने की अनुमति) और इग्रेस डेटा ट्रैफ़िक के नियम (BigQuery जॉब बनाने की अनुमति देने) में जोड़ना होगा.

ऐक्सेस लेवल के साथ, VPC सर्विस कंट्रोल सर्विस पेरीमीटर कॉन्फ़िगरेशन

default VPC नेटवर्क पर, project-2 में मौजूद Compute Engine इंस्टेंस से, यहां दिया गया bq क्वेरी निर्देश चलाएं:

bq query --nouse_legacy_sql \
'SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;'

मौजूदा कॉन्फ़िगरेशन के साथ, BigQuery कमांड सिर्फ़ तब काम करेगा, जब:

  • project-2 में डिफ़ॉल्ट VPC नेटवर्क का इस्तेमाल करके, वर्चुअल मशीन (वीएम) पर चलता हो और
  • बताए गए us-central1 क्षेत्र (Ip सबनेटवर्क) में मौजूद हो, और
  • को सर्विस पेरीमीटर में कॉन्फ़िगर किए गए डिफ़ॉल्ट Compute Engine सेवा खाते का इस्तेमाल करके चलाया जा सके.

BigQuery कमांड क्वेरी को किसी दूसरे प्लैटफ़ॉर्म से चलाने पर वह काम नहीं करेगा. इसमें ये शामिल हैं:

  • अगर project-2 में डिफ़ॉल्ट VPC नेटवर्क का इस्तेमाल करके, वीएम पर चलाया जाता है, लेकिन ऐक्सेस लेवल में जोड़े गए सबनेट के अलावा किसी दूसरे क्षेत्र में मौजूद है, या
  • अगर उपयोगकर्ता user@example.com को इंटरनेट पर किसी उपयोगकर्ता क्लाइंट के साथ चलाया जाता है.

सर्विस पेरीमीटर, GCE (जीसीई) डिफ़ॉल्ट सेवा खाते को ऐक्सेस करने की अनुमति देता है. इस डायग्राम में, एक ही प्रिंसिपल user@example.com ने दो अलग-अलग जगहों से ऐक्सेस किया है: इंटरनेट और Compute Engine इंस्टेंस. VPC सर्विस कंट्रोल, सीधे इंटरनेट से BigQuery को ऐक्सेस करने (नीली बिंदु वाली लाइन) को ब्लॉक कर देते हैं. हालांकि, Compute Engine डिफ़ॉल्ट सेवा खाते की पहचान इस्तेमाल करते हुए, वर्चुअल मशीन (हरी सॉलिड लाइन) से ऐक्सेस करने की अनुमति होती है. किसी इंटरनल आईपी पते से सुरक्षित संसाधनों को ऐक्सेस करने के लिए, सर्विस पेरीमीटर को कॉन्फ़िगर किए जाने की वजह से ऐक्सेस की अनुमति है.

8. साफ़-सफ़ाई सेवा

सेवा का इस्तेमाल न किए जाने पर, VPC सर्विस कंट्रोल का इस्तेमाल करने के लिए अलग से कोई शुल्क नहीं लिया जाता. हालांकि, इस लैब में इस्तेमाल किए गए सेटअप को हटाने का सबसे सही तरीका है. शुल्क से बचने के लिए, वीएम इंस्टेंस और BigQuery डेटासेट या Google Cloud प्रोजेक्ट भी मिटाए जा सकते हैं. Cloud प्रोजेक्ट को मिटाने पर, उसमें इस्तेमाल किए गए सभी संसाधनों की बिलिंग बंद हो जाएगी.

  • वीएम इंस्टेंस मिटाने के लिए, नीचे दिया गया तरीका अपनाएं:
    • Google Cloud Console में, वीएम इंस्टेंस पेज पर जाएं.
    • वीएम इंस्टेंस के नाम की बाईं ओर मौजूद चेकबॉक्स को चुनें. इसके बाद, मिटाएं चुनें. इसके बाद, पुष्टि करने के लिए, मिटाएं पर फिर से क्लिक करें. Compute Engine इंस्टेंस को मिटाना.
  • सेवा पेरीमीटर को मिटाने के लिए, नीचे दिया गया तरीका अपनाएं:
    • Google Cloud Console में, ऐक्सेस नीति के दायरे में आने वाले लेवल पर सुरक्षा और फिर VPC सर्विस कंट्रोल चुनें. इस मामले में, फ़ोल्डर के लेवल पर चुनें.
    • VPC सर्विस कंट्रोल पेज पर, जिस पेरीमीटर को मिटाना है उससे जुड़ी टेबल की लाइन में, मिटाएं पर क्लिक करें.
  • ऐक्सेस लेवल मिटाने के लिए, यह तरीका अपनाएं:
    • Google Cloud Console में, फ़ोल्डर के स्कोप में ऐक्सेस कॉन्टेक्स्ट मैनेजर पेज खोलें.
    • ग्रिड में, ऐक्सेस लेवल की उस लाइन की पहचान करें जिसे आपको मिटाना है. इसके बाद, तीन बिंदु वाला मेन्यू और फिर मिटाएं चुनें.
  • प्रोजेक्ट बंद करने के लिए, इन चरणों को पूरा करें:

9. बधाई हो!

इस कोडलैब में, आपने VPC सर्विस कंट्रोल पेरीमीटर बनाया है, उसे लागू किया है, और उससे जुड़ी समस्या हल की है.

ज़्यादा जानें

यहां दी गई स्थितियों के बारे में भी जाना जा सकता है:

  • प्रोजेक्ट को VPC सर्विस कंट्रोल से सुरक्षित करने के बाद, उसी क्वेरी को सार्वजनिक डेटासेट पर चलाएं.
  • project-1 के बराबर परिमाप में project-2 जोड़ें.
  • project-2 को उसकी अपने परिमाप में जोड़ें और project-1 को मौजूदा परिमाप में रखें.
  • सिर्फ़ डेटा वापस पाने के लिए ही नहीं, बल्कि टेबल में डेटा अपडेट करने के लिए क्वेरी चलाएं.

लाइसेंस

इस काम को क्रिएटिव कॉमंस एट्रिब्यूशन 2.0 जेनरिक लाइसेंस के तहत लाइसेंस मिला है.