1. परिचय
इस लैब में, हम Cloud Storage से BigQuery डेटासेट में डेटा ट्रांसफ़र करते समय, VPC सर्विस कंट्रोल का इस्तेमाल करके, BigQuery डेटा ट्रांसफ़र सेवा को सुरक्षित रखने का तरीका जानेंगे. इसके बाद, हम Cloud Storage को सुरक्षित करते हैं और Cloud Storage से BigQuery में डेटा ट्रांसफ़र करने के लिए, इस प्रोसेस को दोहराते हैं. Cloud Storage को सुरक्षित रखने की वजह से, VPC सेवा नियंत्रण की नीति का उल्लंघन हुआ है. डेटा ट्रांसफ़र पूरा करने के लिए, इस समस्या को ठीक करना ज़रूरी है. आखिर में, हम BigQuery की सुरक्षा करते हैं. इसके बाद, हम प्रोजेक्ट के बीच डेटासेट कॉपी करने की कोशिश करते हैं. इससे भी उल्लंघन होता है, जिसे ठीक करना ज़रूरी है.
इस लैब में, हम देखेंगे कि इनग्रेस और इग्रेस नियमों का इस्तेमाल करके, इनग्रेस और इग्रेस से जुड़े उल्लंघनों को कैसे ठीक किया जाता है. हम ऐक्सेस लेवल का इस्तेमाल करके, BigQuery डेटा ट्रांसफ़र के इनग्रेस से जुड़े उल्लंघन को भी ठीक करेंगे. इस कोडलैब के ये लक्ष्य हैं:
- अलग-अलग सेवाओं, जैसे कि Cloud Storage, BigQuery, और BigQuery डेटा ट्रांसफ़र सेवा पर, इनग्रेस और इग्रेस के नियमों का इस्तेमाल करके, इनग्रेस और इग्रेस से जुड़े उल्लंघनों को ठीक करने का तरीका जानें.
- जानें कि उल्लंघन क्यों हुआ.
2. संसाधन सेटअप करने से जुड़ी ज़रूरी शर्तें
शुरू करने से पहले
इस कोडलैब में, हम यह मानकर चल रहे हैं कि आपको इन चीज़ों के बारे में पहले से पता है:
- फ़ोल्डर बनाने का तरीका
- किसी फ़ोल्डर में प्रोजेक्ट बनाने या मौजूदा प्रोजेक्ट को किसी फ़ोल्डर में ले जाने का तरीका
- स्कोप किए गए ऐक्सेस की नीति बनाने का तरीका
- Google Cloud Console से सेवा पेरीमीटर बनाने और उसे कॉन्फ़िगर करने का तरीका
- ऑडिट लॉग से उल्लंघनों के लॉग कैसे ढूंढें
सेटअप
हमारा शुरुआती सेटअप इस तरह से डिज़ाइन किया गया है:
- Google Cloud संगठन.
- संगठन के तहत मौजूद फ़ोल्डर. इस कोडलैब के लिए, हम इसे
codelab-folderकहेंगे. - फ़ोल्डर
codelab-folderमें दो Google Cloud प्रोजेक्ट. इस कोडलैब के लिए, हम प्रोजेक्ट कोproject-1औरproject-2कहते हैं.- अगर आपने फ़ोल्डर और प्रोजेक्ट पहले से नहीं बनाए हैं, तो Google Cloud Console में जाकर, संगठन के तहत एक फ़ोल्डर बनाएं और दो नए प्रोजेक्ट बनाएं.
- ज़रूरी अनुमतियां: फ़ोल्डर मैनेज करने के लिए IAM की भूमिकाएं, प्रोजेक्ट मैनेज करने के लिए IAM की भूमिकाएं, VPC सर्विस कंट्रोल कॉन्फ़िगर करने के लिए ज़रूरी IAM की भूमिकाएं, BigQuery मैनेज करने के लिए IAM की भूमिकाएं, और Cloud Storage मैनेज करने के लिए IAM की भूमिकाएं.
- दोनों प्रोजेक्ट
project-1औरproject-2के लिए बिलिंग खाता.
स्कोप की गई नीति और सामान्य सेवा पैरामीटर बनाना
इस कोडलैब में, हम project-2 की सुरक्षा करने वाले सामान्य सर्विस पेरीमीटर का इस्तेमाल करेंगे.
- स्कोप किए गए ऐक्सेस की नीति बनाएं. इसका स्कोप, फ़ोल्डर
codelab-folderलेवल पर होता है. इस कोडलैब के लिए, हम मानते हैं कि बनाई गई ऐक्सेस नीति का आईडी987654321है. - नियमित पेरीमीटर बनाएं. इसे
perimeter-2कहा जाता है. इसके बाद, प्रोजेक्टproject-2जोड़ें.
पेरीमीटर perimeter-2 में, BigQuery Data Transfer API को सीमित करें.

Cloud Storage बकेट और BigQuery डेटासेट बनाना
इस कोडलैब के लिए, कोई भी CSV फ़ाइल काफ़ी है. इससे कोई फ़र्क़ नहीं पड़ता कि उसमें क्या कॉन्टेंट है. मुख्य सीमा कोलोकेशन की ज़रूरी शर्त से जुड़ी है. इसके मुताबिक:
- अगर आपका BigQuery डेटासेट एक से ज़्यादा क्षेत्रों में है, तो जिस Cloud Storage बकेट से डेटा ट्रांसफ़र किया जा रहा है वह भी उसी क्षेत्र में या उस क्षेत्र में मौजूद किसी जगह पर होना चाहिए
- अगर आपका डेटासेट किसी क्षेत्र में है, तो आपका Cloud Storage बकेट भी उसी क्षेत्र में होना चाहिए.
इसलिए, इस कोडलैब के लिए हम यह पक्का करेंगे कि Cloud Storage बकेट और BigQuery डेटासेट, दोनों एक ही क्षेत्र या एक से ज़्यादा क्षेत्रों में हों.
प्रोजेक्ट project-1 में नया Cloud Storage बकेट बनाएं
नया Cloud Storage बकेट बनाने के लिए, नया बकेट बनाने के लिए दिए गए निर्देशों का पालन करें.
- बकेट के नाम के लिए, ऐसा नाम डालें जो बकेट के नाम से जुड़ी ज़रूरी शर्तों को पूरा करता हो. इस कोडलैब के लिए, हम बकेट को
codelab-bqtransfer-bucketकहेंगे. - डेटा को कहां सेव करना है और बकेट की जगह के लिए, जगह का टाइप और जगह चुनें. बकेट का डेटा यहां हमेशा के लिए सेव किया जाएगा. इस कोडलैब के लिए, हम us (अमेरिका के कई इलाके) का इस्तेमाल करेंगे.

CSV फ़ाइल बनाना
अपनी लोकल मशीन से या Cloud Shell का इस्तेमाल करके, हम echo कमांड का इस्तेमाल करके, सैंपल csv फ़ाइल codelab-test-file.csv बना सकते हैं. इसके लिए, इन कमांड का इस्तेमाल करें:
echo "name,age" > codelab-test-file.csv; \
echo "Alice,10" >> codelab-test-file.csv; \
echo "Bob,20" >> codelab-test-file.csv; \
echo "Carol,30" >> codelab-test-file.csv; \
echo "Dan,40" >> codelab-test-file.csv; \
echo "Eve,50" >> codelab-test-file.csv; \
echo "Frank,60" >> codelab-test-file.csv; \
echo "Grace,70" >> codelab-test-file.csv; \
echo "Heidi,80" >> codelab-test-file.csv;
Cloud Storage बकेट में CSV फ़ाइल अपलोड करना
csv फ़ाइल बन जाने के बाद, बनाए गए बकेट में फ़ाइल ऑब्जेक्ट अपलोड करने के लिए, यह कमांड चलाएं:
gcloud storage cp codelab-test-file.csv gs://codelab-bqtransfer-bucket

यह पुष्टि की जा सकती है कि फ़ाइल को बनाए गए बकेट में अपलोड किया गया है. इसके लिए, बकेट में मौजूद ऑब्जेक्ट की सूची बनाएं या यह कमांड चलाएं:
gcloud storage ls --recursive gs://codelab-bqtransfer-bucket/**
project-2 में BigQuery डेटासेट और टेबल बनाना
- यह तरीका अपनाकर, प्रोजेक्ट
project-2में BigQuery डेटासेट बनाएं.- डेटासेट आईडी के लिए, डेटासेट का यूनीक नाम डालें. इस कोडलैब के लिए, हम इनका इस्तेमाल करते हैं:
codelab_bqtransfer_dataset. - जगह का टाइप के लिए, डेटासेट के लिए भौगोलिक जगह चुनें. इस कोडलैब के लिए, हम Cloud Storage बकेट की तरह ही लोकेशन का इस्तेमाल करते हैं: अमेरिका (अमेरिका के कई इलाके).

- डेटासेट आईडी के लिए, डेटासेट का यूनीक नाम डालें. इस कोडलैब के लिए, हम इनका इस्तेमाल करते हैं:
- बनाए गए डेटासेट
codelab_bqtransfer_datasetमें जाकर, यह तरीका अपनाकर BigQuery टेबल बनाएं.- सोर्स सेक्शन में, डेटा सोर्स से टेबल बनाएं सूची में जाकर खाली टेबल चुनें.
- टेबल फ़ील्ड में, उस टेबल का नाम डालें जिसे आपको बनाना है. इस कोडलैब के लिए, हम इस नाम का इस्तेमाल करते हैं:
codelab-bqtransfer-table. - पुष्टि करें कि टेबल टाइप फ़ील्ड, नेटिव टेबल पर सेट हो
- स्कीमा सेक्शन में, स्कीमा की परिभाषा डालें. स्कीमा की जानकारी डालने के लिए, टेक्स्ट के तौर पर बदलाव करें पर क्लिक करें. इसके बाद, यहां दिया गया स्कीमा डालें. यह स्कीमा, बनाई गई CSV फ़ाइल के फ़ॉर्मैट के मुताबिक है.
[{ "name": "name", "type": "STRING", "mode": "NULLABLE", "description": "The name" }, { "name": "age", "type": "INTEGER", "mode": "NULLABLE", "description": "The age" }]
लागत
Cloud के संसाधनों/एपीआई का इस्तेमाल करने के लिए, आपको प्रोजेक्ट project-2 और project-1 में बिलिंग की सुविधा चालू करनी होगी. हमारा सुझाव है कि इस्तेमाल किए गए संसाधनों को बंद कर दें, ताकि इस कोडलैब के बाद बिलिंग न हो.
BigQuery और Cloud Storage का इस्तेमाल करने पर शुल्क लगता है. अनुमानित लागत की जानकारी, BigQuery के प्राइसिंग कैलकुलेटर और Cloud Storage के कैलकुलेटर में देखी जा सकती है.
3. Cloud Storage ऑब्जेक्ट से BigQuery टेबल में डेटा ट्रांसफ़र करने की सुविधा कॉन्फ़िगर करना
अब हम Cloud Storage (project-1 में मौजूद) से BigQuery (project-2 में मौजूद) में डेटा ट्रांसफ़र करने के लिए, डेटा ट्रांसफ़र सेवा (project-2 में) बनाएंगे. इस दौरान, VPC सर्विस कंट्रोल project-2 में BigQuery डेटा ट्रांसफ़र सेवा की सुरक्षा करेगा. सिर्फ़ BigQuery डेटा ट्रांसफ़र सेवा को सुरक्षित करने से (BigQuery और Cloud Storage को सुरक्षित किए बिना), प्रिंसिपल सिर्फ़ डेटा ट्रांसफ़र बना और मैनेज कर सकते हैं. जैसे, डेटा ट्रांसफ़र को मैन्युअल तरीके से शुरू करना.
Cloud Storage से डेटा ट्रांसफ़र करने की सुविधा सेट अप करना
डेटा ट्रांसफ़र बनाने के लिए, यह तरीका अपनाएं:
project-2के Google Cloud Console में BigQuery पेज पर जाएं.- डेटा ट्रांसफ़र पर क्लिक करें.

डेटा ट्रांसफ़र पेज को ऐक्सेस करते समय उल्लंघन की जांच करना
Google Cloud Console में, हमें वीपीसी सर्विस कंट्रोल का यूनीक आइडेंटिफ़ायर दिखता है. लॉग फ़िल्टर करने और उल्लंघन की जानकारी का पता लगाने के लिए, एक ही आइडेंटिफ़ायर का इस्तेमाल करें (OBSERVED_VPCSC_DENIAL_UNIQUE_ID को अस्वीकार किए गए आईडी से बदलें):
protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.metadata.vpcServiceControlsUniqueId="OBSERVED_VPCSC_DENIAL_UNIQUE_ID"
उल्लंघन, NO_MATCHING_ACCESS_LEVEL है. यह इनग्रेस का उल्लंघन है. इसकी जानकारी यहां दी गई है:
ingressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
targetResource: "projects/[PROJECT2_NUMBER]"
}]
violationReason: "NO_MATCHING_ACCESS_LEVEL"
callerIp: "USER_PUBLIC_IP_ADDRESS"
resource: {
labels: {
method: "google.cloud.bigquery.datatransfer.v1.DataTransferService.ListTransferConfigs"
project_id: "project-2"
service: "bigquerydatatransfer.googleapis.com"
}
type: "audited_resource"
}
डेटा ट्रांसफ़र पेज को ऐक्सेस करने से, कॉन्फ़िगर किए गए सभी डेटा ट्रांसफ़र की सूची दिखती है. इसलिए, यह ListTransferConfigs तरीके का उल्लंघन है.
bigquerydatatransfer.googleapis.com सेवा के लिए, उल्लंघन ठीक करना
इनग्रेस के उल्लंघन को ठीक करने के लिए, ऐक्सेस लेवल या इनग्रेस के नियम का इस्तेमाल किया जा सकता है. इस कोडलैब में, हम उपयोगकर्ता की पहचान को अस्वीकार करने के लिए कॉन्फ़िगर किए गए इनग्रेस नियम का इस्तेमाल करेंगे. इससे bigquerydatatransfer.googleapis.com सेवा और सभी तरीकों को ऐक्सेस करने की अनुमति मिलती है.

इनग्रेस नियम लागू होने के बाद, डेटा ट्रांसफ़र पेज को बिना किसी समस्या के ऐक्सेस किया जा सकेगा.
Cloud Storage से डेटा ट्रांसफ़र करने की सुविधा का सेटअप फिर से शुरू करना
पिछले चरणों में, डेटा ट्रांसफ़र पेज पर (डेटा ट्रांसफ़र पर क्लिक करने के बाद) जाकर, यह तरीका अपनाएं:
- + ट्रांसफ़र बनाएं पर क्लिक करें.
- सोर्स टाइप सेक्शन में, सोर्स के लिए Google Cloud Storage चुनें.
- ट्रांसफ़र कॉन्फ़िगरेशन का नाम सेक्शन में, डिसप्ले नेम के लिए, ट्रांसफ़र का नाम डालें. जैसे,
Codelab Transfer. - शेड्यूल करने के विकल्प सेक्शन में जाकर:
- दोहराने की फ़्रीक्वेंसी चुनें. जैसे, 15 मिनट.
- अभी शुरू करें को चुनना न भूलें. ऐसा न करने पर, डेटा ट्रांसफ़र सिर्फ़ कॉन्फ़िगर की गई दोहराने की फ़्रीक्वेंसी के बाद शुरू होगा
- डेस्टिनेशन की सेटिंग सेक्शन में, डेस्टिनेशन डेटासेट के लिए, वह डेटासेट चुनें जिसे आपने डेटा सेव करने के लिए बनाया है:
codelab_bqtransfer_dataset - डेटा सोर्स की जानकारी सेक्शन में
- डेस्टिनेशन टेबल के लिए, अपनी डेस्टिनेशन टेबल का नाम डालें. डेस्टिनेशन टेबल का नाम, टेबल के नाम से जुड़े नियमों के मुताबिक होना चाहिए. इस कोडलैब के लिए, हम उस टेबल का इस्तेमाल करेंगे जिसे हमने पहले बनाया था:
codelab-bqtransfer-table - Cloud Storage यूआरआई के लिए, Cloud Storage यूआरआई डालें. इस कोडलैब के लिए, हम बनाए गए बकेट और फ़ाइल का इस्तेमाल करते हैं:
codelab-bqtransfer-bucket/codelab-test-file.csv - लिखने की प्राथमिकता के लिए,
APPENDको चुने हुए रहने दें याMIRRORको चुनें. - ट्रांसफ़र के बाद फ़ाइलों को मिटाने का विकल्प न चुनें. ऐसा इसलिए, क्योंकि हम एक ही फ़ाइल का इस्तेमाल कई बार करेंगे. हालांकि, एक से ज़्यादा फ़ाइलों का इस्तेमाल किया जा सकता है. साथ ही, ट्रांसफ़र के बाद सोर्स फ़ाइलें मिटाई जा सकती हैं)
- फ़ाइल फ़ॉर्मैट के लिए, CSV चुनें
- ट्रांसफ़र के विकल्प में जाकर, CSV में, कॉमा(",") को फ़ील्ड डेलिमिटर के तौर पर डालें.
- डेस्टिनेशन टेबल के लिए, अपनी डेस्टिनेशन टेबल का नाम डालें. डेस्टिनेशन टेबल का नाम, टेबल के नाम से जुड़े नियमों के मुताबिक होना चाहिए. इस कोडलैब के लिए, हम उस टेबल का इस्तेमाल करेंगे जिसे हमने पहले बनाया था:
- सेवा खाता मेन्यू में जाकर, अपने Google Cloud प्रोजेक्ट से जुड़े सेवा खातों में से कोई सेवा खाता चुनें
- चुने गए सेवा खाते के पास, ज़रूरी अनुमतियां होनी चाहिए. ये अनुमतियां, स्टोरेज बकेट को होस्ट करने वाले प्रोजेक्ट पर Cloud Storage के लिए और इस कोडलैब में
project-1के लिए होनी चाहिए. - इस कोडलैब के लिए, हम
project-2में बनाए गए सेवा खाते का इस्तेमालcodelab-sa@project-2.iam.gserviceaccount.comके तौर पर करेंगे.
- चुने गए सेवा खाते के पास, ज़रूरी अनुमतियां होनी चाहिए. ये अनुमतियां, स्टोरेज बकेट को होस्ट करने वाले प्रोजेक्ट पर Cloud Storage के लिए और इस कोडलैब में
- सेव करें पर क्लिक करें.
हमने शेड्यूल के विकल्प के तौर पर अभी शुरू करें को चुना है. इसलिए, सेव करें को चुनने के तुरंत बाद पहला ट्रांसफ़र शुरू हो जाएगा.
डेटा ट्रांसफ़र सेवा की स्थिति की पुष्टि करना
कॉन्फ़िगर किए गए डेटा ट्रांसफ़र की स्थिति की पुष्टि करने के लिए:
- Google Cloud Console में BigQuery पेज पर जाएं
- डेटा ट्रांसफ़र पर क्लिक करें.
- कॉन्फ़िगर किए गए ट्रांसफ़र की सूची दिखती है

Codelab Transfer (डिसप्ले नेम के नीचे) पर क्लिक करें. इससे अब तक किए गए सभी रन की सूची दिखेगी.

डेटा ट्रांसफ़र पूरा होना चाहिए. साथ ही, मैन्युअल तरीके से ट्रिगर किए गए और शेड्यूल किए गए डेटा ट्रांसफ़र, दोनों के लिए वीपीसी सर्विस कंट्रोल के नियमों का उल्लंघन नहीं होना चाहिए. ध्यान दें कि सिर्फ़ मैन्युअल तरीके से ट्रिगर किए गए ट्रांसफ़र के लिए, इनग्रेस नियम की ज़रूरत होती है. इससे प्रिंसिपल को ऐक्सेस दिया जा सकता है. प्रिंसिपल, मैन्युअल तरीके से ट्रांसफ़र शुरू करता है.
4. मैन्युअल तरीके से ट्रिगर किए गए डेटा ट्रांसफ़र के लिए, आईपी पते से जुड़ी पाबंदियां
कॉन्फ़िगर किए गए मौजूदा इनग्रेस नियमों के मुताबिक, कॉन्फ़िगर की गई आइडेंटिटी, किसी भी आईपी पते से डेटा ट्रांसफ़र को मैन्युअल तरीके से ट्रिगर कर सकती है.
ऐक्सेस लेवल का इस्तेमाल करके, VPC सर्विस कंट्रोल की मदद से, किसी खास एपीआई अनुरोध के एट्रिब्यूट के आधार पर, ऐक्सेस को सीमित किया जा सकता है. जैसे:
- आईपी सबनेटवर्क: यह जांच करता है कि अनुरोध किसी खास आईपी पते से आ रहा है या नहीं.
- क्षेत्र: यह कुकी यह जांच करती है कि अनुरोध किसी खास क्षेत्र से आ रहा है या नहीं. यह आईपी पते की जियोलोकेशन से तय होता है.
- प्रिंसिपल: यह जांच करता है कि अनुरोध किसी खास खाते से किया गया है या नहीं.
- डिवाइस की नीति: इससे यह पता चलता है कि अनुरोध किसी ऐसे डिवाइस से आ रहा है जो कुछ खास शर्तों को पूरा करता है.
इन एट्रिब्यूट की पुष्टि करने के लिए, हमें ऐक्सेस लेवल बनाना होगा. इससे, चुने गए एट्रिब्यूट की पुष्टि की जा सकेगी. इसके बाद, बनाए गए ऐक्सेस लेवल को इनग्रेस नियम में सोर्स के तौर पर जोड़ना होगा.
इस डायग्राम में, तीन स्थितियों में दो मुख्य इकाइयों (
user@example.com और user2@example.com) की ओर से शुरू किए गए ऐक्सेस को दिखाया गया है. इसमें यह दिखाया गया है कि VPC सर्विस कंट्रोल, सोर्स (इनग्रेस ऐक्सेस लेवल) और पहचान से जुड़े एट्रिब्यूट का आकलन कैसे करता है. यह आकलन, AND शर्त के तौर पर किया जाता है, जहां दोनों का मेल खाना ज़रूरी होता है.
- उपयोगकर्ता user@example.com को उस आईपी पते से ऐक्सेस करने की अनुमति है जिसे ऐक्सेस लेवल के हिसाब से अनुमति मिली है. ऐसा इसलिए, क्योंकि उसका आईपी पता और उपयोगकर्ता खाता, इनग्रेस नियम में दिए गए कॉन्फ़िगरेशन से मेल खाता है.
- उपयोगकर्ता user@example.com को ब्लॉक कर दिया जाता है, क्योंकि उसका आईपी पता, अनुमति वाले आईपी पते से मेल नहीं खाता. भले ही, उसका खाता इनग्रेस नियम में कॉन्फ़िगर किया गया हो.
- उपयोगकर्ता user2@example.com को ब्लॉक कर दिया गया है. ऐसा तब हुआ, जब उसने मंज़ूरी वाले आईपी पते से ऐक्सेस करने की कोशिश की. इसकी वजह यह है कि उसके खाते को इनग्रेस नियम के तहत अनुमति नहीं मिली है.
ऐक्सेस लेवल बनाना
अगर आपको ऐसा ऐक्सेस लेवल बनाना है जो आईपी पते के हिसाब से ऐक्सेस को सीमित करता है, तो यह तरीका अपनाएं:
- Google Cloud Console में Access Context Manager पेज खोलें.
- अगर कहा जाए, तो
codelab-folderफ़ोल्डर चुनें.
- अगर कहा जाए, तो
- Access Context Manager पेज पर सबसे ऊपर, ऐक्सेस लेवल बनाएं पर क्लिक करें.
- नया ऐक्सेस लेवल पैनल में, नए ऐक्सेस लेवल को टाइटल दें. इस कोडलैब के लिए, हम इसे
project_2_alकहेंगे. - शर्तें सेक्शन में जाकर, आईपी सबनेटवर्क के बगल में मौजूद + पर क्लिक करें.
- आईपी सबनेटवर्क बॉक्स में, सार्वजनिक आईपी चुनें
- इसके अलावा, ऐक्सेस लेवल में संगठन के आईपी पते का इस्तेमाल करने के लिए, प्राइवेट आईपी का इस्तेमाल किया जा सकता है. हालांकि, इस कोडलैब के लिए हम सार्वजनिक आईपी का इस्तेमाल कर रहे हैं.
- सीआईडीआर ब्लॉक के तौर पर फ़ॉर्मैट की गई एक या उससे ज़्यादा IPv4 या IPv6 रेंज डालें.
इनग्रेस नियम में ऐक्सेस लेवल जोड़ना
इनग्रेस नियम में, ऐक्सेस लेवल को sources फ़ील्ड के तहत रेफ़र किया जाता है. यह एक ज़रूरी फ़ील्ड है, जैसा कि इनग्रेस नियम के रेफ़रंस में बताया गया है. संसाधनों को ऐक्सेस करने की अनुमति देने के लिए, VPC सर्विस कंट्रोल, sources और identityType एट्रिब्यूट को AND शर्त के तौर पर देखता है. इनग्रेस नियम, डेटा ट्रांसफ़र को मैन्युअल तरीके से ट्रिगर करने वाले प्रिंसिपल की पहचान का इस्तेमाल करता है. यह डेटा ट्रांसफ़र कॉन्फ़िगरेशन में बताए गए सेवा खाते की पहचान का इस्तेमाल नहीं करता.

आईपी पते के हिसाब से ऐक्सेस को सीमित करने वाले कॉन्फ़िगरेशन के साथ, ट्रांसफ़र की प्रोसेस को फिर से चलाएं
लागू किए गए कॉन्फ़िगरेशन कितने असरदार हैं, यह जानने के लिए इन स्थितियों में फिर से ट्रांसफ़र ट्रिगर करें:
- आईपी पते का इस्तेमाल करके, जो ऐक्सेस लेवल में शामिल है. इस ऐक्सेस लेवल का रेफ़रंस, इनग्रेस नियम में दिया गया है.
- कॉन्फ़िगरेशन के हिसाब से, अनुमति न होने वाले आईपी पते का इस्तेमाल करना
अनुमति वाले आईपी पते से ऐक्सेस करने पर, ऐक्सेस हो जाना चाहिए. वहीं, अनुमति नहीं वाले आईपी पतों से ऐक्सेस करने पर, ऐक्सेस नहीं होना चाहिए. साथ ही, इससे वीपीसी सेवा नियंत्रण का उल्लंघन होना चाहिए.
किसी दूसरे आईपी पते का इस्तेमाल करके जांच करने का एक आसान तरीका यह है कि Google Cloud Console का इस्तेमाल करते समय असाइन किए गए आईपी पते को अनुमति दें. इसके बाद, Cloud Shell का इस्तेमाल करते समय जांच करें.
Cloud Shell में, मैन्युअल तरीके से ट्रांसफ़र शुरू करने के लिए, यहां दिया गया निर्देश चलाएं. इसके लिए, RUN_TIME और RESOURCE_NAME, दोनों को बदलें:
bq mk \
--transfer_run \
--run_time='RUN_TIME' \
RESOURCE_NAME
उदाहरण के लिए, यहां दी गई सैंपल कमांड, प्रोजेक्ट 1234567890 में ट्रांसफ़र 12345678-90ab-cdef-ghij-klmnopqrstuv कॉन्फ़िगरेशन के लिए तुरंत काम करती है.
NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ");
bq mk \
--transfer_run \
--run_time=$NOW \
projects/1234567890/locations/us/transferConfigs/12345678-90ab-cdef-ghij-klmnopqrstuv
देखे गए आउटपुट में, वीपीसी सर्विस कंट्रोल के उल्लंघन का पता चलता है. ऐसा इसलिए है, क्योंकि आईपी पते को अनुमति नहीं है.

उल्लंघन, DataTransferService.StartManualTransferRuns तरीके पर हुआ है.
ingressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
targetResource: "projects/[PROJECT2_NUMBER]"
targetResourcePermissions: [0: "vpcsc.permissions.unavailable"]
}]
violationReason: "RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER"
resource: {
labels: {
method: "google.cloud.bigquery.datatransfer.v1.DataTransferService.StartManualTransferRuns"
project_id: "project-2"
service: "bigquerydatatransfer.googleapis.com"
}
type: "audited_resource"
}
severity: "ERROR"
5. Cloud Storage सेवा को सुरक्षित रखते हुए डेटा ट्रांसफ़र शुरू करना
हम Cloud Storage से BigQuery में डेटा ट्रांसफ़र कर रहे हैं. इसलिए, आइए VPC सर्विस कंट्रोल की मदद से सुरक्षित की गई सेवाओं में Cloud Storage को जोड़ें और देखें कि ट्रांसफ़र पूरा होता है या नहीं.
perimeter-2 कॉन्फ़िगरेशन में, Cloud Storage API को प्रतिबंधित सेवाओं में से एक के तौर पर जोड़ें. साथ ही, BigQuery Data Transfer API को भी जोड़ें.

Cloud Storage API को सुरक्षित करने के बाद, डेटा ट्रांसफ़र के अगले शेड्यूल का इंतज़ार करें या यहां दिया गया तरीका अपनाकर, डेटा ट्रांसफ़र को मैन्युअल तरीके से ट्रिगर करें:
- Google Cloud Console में BigQuery पेज पर जाएं.
- डेटा ट्रांसफ़र पर क्लिक करें.
- सूची से अपना ट्रांसफ़र चुनें: इस कोडलैब के लिए, हम कोडलैब ट्रांसफ़र ट्रांसफ़र का इस्तेमाल कर रहे हैं
- अभी ट्रांसफ़र करें पर क्लिक करें
- ठीक है पर क्लिक करें.
इसके बाद, एक और ट्रांसफ़र शुरू किया जाएगा. इसे देखने के लिए, आपको पेज रीफ़्रेश करना पड़ सकता है. इस बार, वीपीसी सर्विस कंट्रोल के उल्लंघन की वजह से ट्रांसफ़र नहीं हो पाएगा.

Cloud Storage में वीपीसी सर्विस कंट्रोल के उल्लंघन की जांच करना
ट्रांसफ़र की खास जानकारी में दिए गए vpcServiceControlsUniqueIdentifier का इस्तेमाल करके, ऑडिट लॉग फ़िल्टर करें.
RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER के ईग्रेस से जुड़े उल्लंघन का पता चला है. इसकी जानकारी यहां दी गई है:
- प्रिंसिपल, डेटा ट्रांसफ़र सेवा में कॉन्फ़िगर किया गया सेवा खाता होता है. भले ही, डेटा ट्रांसफ़र को मैन्युअल तरीके से ट्रिगर किया गया हो या शेड्यूल किए गए डेटा ट्रांसफ़र को चलाया जा रहा हो, अस्वीकार किया गया प्रिंसिपल एक ही होगा.
- Cloud Storage पर असर पड़ा है
- अनुरोध का सोर्स वह प्रोजेक्ट है जिसमें Data Transfer Service कॉन्फ़िगर की गई है:
project-2 - टारगेट प्रोजेक्ट वह प्रोजेक्ट होता है जिसमें Cloud Storage ऑब्जेक्ट मौजूद होता है:
project-1
principalEmail: "codelab-sa@project-2.iam.gserviceaccount.com"
egressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
source: "projects/[PROJECT2_NUMBER]"
sourceType: "Resource"
targetResource: "projects/[PROJECT1_NUMBER]"
targetResourcePermissions: [0: "storage.objects.get"]
}]
labels: {
method: "google.storage.objects.get"
project_id: "project-2"
service: "storage.googleapis.com"
}
Cloud Storage से डेटा बाहर भेजने से जुड़ी नीति के उल्लंघन को ठीक करना
डेटा बाहर भेजने से जुड़े उल्लंघन को ठीक करने के लिए, हमें डेटा बाहर भेजने से जुड़े ऐसे नियम का इस्तेमाल करना होगा जो अस्वीकार किए गए सेवा खाते से, Cloud Storage ऑब्जेक्ट वाले प्रोजेक्ट तक ट्रैफ़िक को पहुंचने की अनुमति देता हो.

सेवा के दायरे perimeter-2 में बदलाव करने के बाद, ट्रांसफ़र को फिर से ट्रिगर करने के लिए, इस प्रोसेस को दोहराएं. ट्रांसफ़र में कोई गड़बड़ी नहीं दिखेगी.

6. BigQuery डेटासेट को project-2 से project-1 में कॉपी करें
इस बात की पुष्टि करने के बाद कि हम project-1 में मौजूद Cloud Storage बकेट से project-2 में मौजूद BigQuery डेटासेट में डेटा ट्रांसफ़र कर सकते हैं, आइए project-2 से project-1 में BigQuery डेटासेट कॉपी करें. इस दौरान, BigQuery API को वीपीसी सेवा नियंत्रणों से सुरक्षित किया जाता है.
डेटासेट बनाने और कॉपी करने के लिए, हम bq mk कमांड का इस्तेमाल करेंगे. यह bq टूल का इस्तेमाल करता है.
project-1 में डेस्टिनेशन डेटासेट बनाएं
डेटासेट कॉपी करने से पहले, डेस्टिनेशन डेटासेट बनाना ज़रूरी है. डेस्टिनेशन डेटासेट बनाने के लिए, हम यहां दिया गया निर्देश चला सकते हैं. इससे us लोकेशन के साथ, project-1 प्रोजेक्ट में copied_dataset नाम का डेटासेट बन जाता है.
bq mk \
--dataset \
--location=us \
project-1:copied_dataset
project-2 में BigQuery सेवा को VPC सर्विस कंट्रोल की मदद से सुरक्षित करना
पेरीमीटर perimeter-2 के कॉन्फ़िगरेशन में बदलाव करें. साथ ही, BigQuery API को सुरक्षित सेवा के तौर पर जोड़ें. इसके अलावा, BigQuery डेटा ट्रांसफ़र और Cloud Storage सेवाओं को भी जोड़ें.

डेटासेट कॉपी करने की प्रोसेस शुरू करना
डेटासेट कॉपी करने के लिए, यहां दिया गया bq mk निर्देश चलाएं. इससे प्रोजेक्ट project-2 में मौजूद डेटासेट codelab_bqtransfer_dataset को project-1 में मौजूद डेटासेट copied_dataset में कॉपी किया जाता है. साथ ही, डेटासेट के कॉन्टेंट को भी बदल दिया जाता है.
bq mk \
--transfer_config \
--project_id=project-1 \
--target_dataset=copied_dataset \
--data_source=cross_region_copy \
--display_name='Dataset from project-2 to project-1' \
--params='{
"source_dataset_id":"codelab_bqtransfer_dataset",
"source_project_id":"project-2",
"overwrite_destination_table":"true"
}'
यह कमांड सही तरीके से काम करेगी. इस दौरान, डेटासेट कॉपी करने की प्रोसेस शुरू करने के लिए, ट्रांसफ़र कॉन्फ़िगरेशन बनाया जाएगा. डेटासेट को कॉपी नहीं किया जा सकेगा. ऐसा VPC सर्विस कंट्रोल के उल्लंघन की वजह से होगा.
वीपीसी सर्विस कंट्रोल के उल्लंघन से जुड़ी जानकारी पाने के लिए, project-2 (सोर्स डेटासेट प्रोजेक्ट) में मौजूद लॉग देखें. इसके लिए, नीचे दी गई लॉग क्वेरी का इस्तेमाल करें. लॉग क्वेरी, BigQuery सेवा और कॉपी किए जा रहे डेटासेट के संसाधन के नाम (codelab_bqtransfer_dataset) के आधार पर लॉग फ़िल्टर करती है.
resource.labels.service="bigquery.googleapis.com"
protoPayload.metadata.resourceNames:"datasets/codelab_bqtransfer_dataset"
वीपीसी सर्विस कंट्रोल के उल्लंघन के तौर पर, project-2 से project-1 तक के इग्रेस का उल्लंघन देखा गया है.
egressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
source: "projects/[PROJECT-2-NUMBER]"
sourceType: "Resource"
targetResource: "projects/[PROJECT-1-NUMBER]"
targetResourcePermissions: [
0: "bigquery.transfers.update"
1: "bigquery.transfers.get"
2: "bigquery.jobs.create"
]
}
]
method: "bigquery.tables.getData"
service: "bigquery.googleapis.com"
BigQuery से जुड़ी सभी नीतियों के उल्लंघन ठीक करें और डेटासेट को फिर से कॉपी करना शुरू करें
डेटा बाहर भेजने से जुड़े उल्लंघन को ठीक करने के लिए, हमें एक ऐसा नियम बनाना होगा जो अस्वीकार किए गए प्रिंसिपल को अनुमति दे. mk कमांड को चलाने वाला मुख्य खाता, वह खाता है जिसे अनुमति नहीं दी गई है.

डेटा बाहर भेजने से जुड़ा नियम लागू होने के बाद, पेरीमीटर perimeter-2 पर, डेटासेट कॉपी करने के लिए वही कमांड चलाएं. इस बार, इसे बिना किसी वीपीसी सर्विस कंट्रोल के उल्लंघन के, डेटासेट को कॉपी करना चाहिए.
7. साफ़-सफ़ाई सेवा
जब सेवा का इस्तेमाल नहीं किया जा रहा होता है, तब वीपीसी सर्विस कंट्रोल का इस्तेमाल करने के लिए कोई शुल्क नहीं लिया जाता. हालांकि, इस लैब में इस्तेमाल किए गए सेटअप को हटाना सबसे सही तरीका है. शुल्क से बचने के लिए, वीएम इंस्टेंस और/या Cloud प्रोजेक्ट भी मिटाए जा सकते हैं. Cloud प्रोजेक्ट को मिटाने से, उस प्रोजेक्ट में इस्तेमाल किए गए सभी संसाधनों के लिए बिलिंग बंद हो जाती है.
- Cloud Storage बकेट मिटाने के लिए, यह तरीका अपनाएं:
- Google Cloud Console में, Cloud Storage बकेट पेज पर जाएं.
- मिटाने के लिए बकेट का चेकबॉक्स चुनें. इसके बाद, मिटाएं पर क्लिक करें.
- स्क्रीन पर दिखने वाली ओवरले विंडो में, पुष्टि करें कि आपको बकेट और उसका कॉन्टेंट मिटाना है.

- BigQuery डेटासेट मिटाने के लिए, यह तरीका अपनाएं:
- Google Cloud Console में, BigQuery पेज पर जाएं.
- एक्सप्लोरर पैनल में, अपने प्रोजेक्ट को बड़ा करें और कोई डेटासेट चुनें.
- तीन बिंदु वाले मेन्यू को बड़ा करें और मिटाएं पर क्लिक करें.
- डेटासेट मिटाएं डायलॉग में, फ़ील्ड में
deleteटाइप करें. इसके बाद, मिटाएं पर क्लिक करें.
- सर्विस पेरीमीटर मिटाने के लिए, यह तरीका अपनाएं:
- Google Cloud Console में, सुरक्षा को चुनें. इसके बाद, उस लेवल पर VPC सर्विस कंट्रोल को चुनें जहां ऐक्सेस पॉलिसी का दायरा तय किया गया है. इस मामले में, फ़ोल्डर लेवल पर.
- वीपीसी सेवा कंट्रोल पेज पर, उस पेरीमीटर से जुड़ी टेबल की लाइन में
Delete Iconको चुनें जिसे आपको मिटाना है.
- ऐक्सेस लेवल मिटाने के लिए, यह तरीका अपनाएं:
- Google Cloud Console में, फ़ोल्डर के स्कोप पर Access Context Manager पेज खोलें.
- ग्रिड में, ऐक्सेस लेवल की उस लाइन को ढूंढें जिसे आपको मिटाना है. इसके बाद, तीन बिंदु वाला मेन्यू चुनें. इसके बाद, मिटाएं चुनें.
- प्रोजेक्ट बंद करने के लिए, यह तरीका अपनाएं:
- Google Cloud Console में, उस प्रोजेक्ट के IAM और एडमिन सेटिंग पेज पर जाएं जिसे आपको मिटाना है.
- आईएएम और एडमिन सेटिंग पेज पर, बंद करें को चुनें.
- प्रोजेक्ट आईडी डालें और शटडाउन करें को चुनें.
8. बधाई हो!
इस कोडलैब में, आपने VPC सर्विस कंट्रोल पेरीमीटर बनाया, उसे लागू किया, और उससे जुड़ी समस्याओं को हल किया.
ज़्यादा जानें
इन स्थितियों के बारे में भी जानें:
project-1को किसी दूसरे पेरीमीटर में जोड़ें. यह पेरीमीटर, BigQuery, BigQuery डेटा ट्रांसफ़र सेवा, और Cloud Storage को भी सुरक्षित रखता हो.- साथ काम करने वाले अन्य सोर्स से BigQuery में डेटा ट्रांसफ़र करें.
- जगह की जानकारी या डिवाइस की नीति जैसे अन्य एट्रिब्यूट के हिसाब से, उपयोगकर्ता के ऐक्सेस पर पाबंदी लगाएं.
लाइसेंस
इस काम के लिए, Creative Commons एट्रिब्यूशन 2.0 जेनेरिक लाइसेंस के तहत लाइसेंस मिला है.