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 टेबल में डेटा ट्रांसफ़र करने की सुविधा कॉन्फ़िगर करना
अब हम project-2
में डेटा ट्रांसफ़र सेवा बनाने की कोशिश करेंगे, ताकि project-1
में मौजूद Cloud Storage से project-2
में मौजूद BigQuery में डेटा ट्रांसफ़र किया जा सके. साथ ही, project-2
में BigQuery डेटा ट्रांसफ़र सेवा को सुरक्षित रखने के लिए, VPC सर्विस कंट्रोल का इस्तेमाल किया जा सके. सिर्फ़ BigQuery डेटा ट्रांसफ़र सेवा को सुरक्षित करने पर, प्रिंसिपल सिर्फ़ डेटा ट्रांसफ़र बना सकते हैं और उन्हें मैनेज कर सकते हैं. जैसे, डेटा ट्रांसफ़र को मैन्युअल तरीके से शुरू करना. हालांकि, BigQuery और Cloud Storage को सुरक्षित नहीं किया जा सकता.
Cloud Storage से डेटा ट्रांसफ़र करने की सुविधा सेट अप करना
डेटा ट्रांसफ़र बनाने के लिए, यह तरीका अपनाएं:
project-2
के Google Cloud कंसोल में BigQuery पेज पर जाएं.- डेटा ट्रांसफ़र पर क्लिक करें.
डेटा ट्रांसफ़र पेज को ऐक्सेस करते समय, उल्लंघन की जांच करना
Google Cloud Console में, हमें VPC Service Controls का यूनीक आइडेंटिफ़ायर दिखता है. लॉग को फ़िल्टर करने और उल्लंघन की जानकारी की पहचान करने के लिए, उसी आइडेंटिफ़ायर का इस्तेमाल करें (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 Service Controls, सोर्स (इनग्रेस ऐक्सेस लेवल) और आइडेंटिटी एट्रिब्यूट का आकलन, AND शर्त के तौर पर कैसे करता है. इसमें दोनों को मैच करना होता है.
- ऐक्सेस लेवल के हिसाब से अनुमति वाले आईपी पते से ऐक्सेस करने की कोशिश करने पर, user@example.com उपयोगकर्ता को ऐक्सेस करने की अनुमति है. ऐसा इसलिए है, क्योंकि उसका आईपी पता और उपयोगकर्ता खाता, इनग्रेस नियम में दिए गए कॉन्फ़िगरेशन से मेल खाता है.
- अगर उपयोगकर्ता user@example.com का आईपी पता, अनुमति वाले आईपी पते से मेल नहीं खाता है, तो उसे ऐक्सेस करने से ब्लॉक कर दिया जाता है. भले ही, उसका खाता, इनग्रेस नियम में कॉन्फ़िगर किया गया हो.
- उपयोगकर्ता user2@example.com को ऐक्सेस करने की कोशिश करने के बावजूद, ऐक्सेस ब्लॉक कर दिया गया है. इसकी वजह यह है कि इनग्रेस नियम के मुताबिक, उनके खाते को अनुमति नहीं है.
ऐक्सेस लेवल बनाना
आईपी पते के हिसाब से ऐक्सेस को सीमित करने वाला ऐक्सेस लेवल बनाने के लिए:
- Google Cloud Console में, ऐक्सेस कॉन्टेक्स्ट मैनेजर पेज खोलें.
- अगर कहा जाए, तो फ़ोल्डर
codelab-folder
चुनें.
- अगर कहा जाए, तो फ़ोल्डर
- ऐक्सेस कॉन्टेक्स्ट मैनेजर पेज पर सबसे ऊपर, ऐक्सेस लेवल बनाएं पर क्लिक करें.
- नया ऐक्सेस लेवल पैनल में, नए ऐक्सेस लेवल को टाइटल दें. इस कोडलैब के लिए, हम इसे
project_2_al
कहेंगे. - शर्तें सेक्शन में, आईपी सबनेटवर्क के सामने मौजूद + पर क्लिक करें.
- आईपी सबनेटवर्क बॉक्स में, सार्वजनिक आईपी चुनें
- इसके अलावा, ऐक्सेस लेवल में संगठन के आईपी पते का इस्तेमाल करने के लिए, निजी आईपी का इस्तेमाल किया जा सकता है. हालांकि, इस कोडलैब के लिए, हम सार्वजनिक आईपी का इस्तेमाल कर रहे हैं.
- सीआईडीआर ब्लॉक के तौर पर फ़ॉर्मैट की गई एक या उससे ज़्यादा आईपीवी4 या आईपीवी6 रेंज डालें.
इनग्रेस नियम में ऐक्सेस लेवल जोड़ना
इनग्रेस रूल में, ऐक्सेस लेवल का रेफ़रंस sources
फ़ील्ड में दिया जाता है. यह इनग्रेस रूल के रेफ़रंस में बताया गया ज़रूरी फ़ील्ड है. संसाधनों में इनग्रेस की अनुमति देने के लिए, VPC Service Controls, 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
निगरानी के दौरान मिले आउटपुट से पता चलता है कि आईपी पते की अनुमति न होने की वजह से, VPC सर्विस कंट्रोल का उल्लंघन हुआ है.
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 में डेटा ट्रांसफ़र कर रहे हैं. इसलिए, Cloud Storage को VPC सेवा नियंत्रण की मदद से सुरक्षित की गई सेवाओं में जोड़ें और देखें कि डेटा ट्रांसफ़र हो पा रहा है या नहीं.
perimeter-2
कॉन्फ़िगरेशन में, BigQuery डेटा ट्रांसफ़र एपीआई के साथ-साथ, पाबंदी वाली सेवाओं में से एक के तौर पर Cloud Storage API जोड़ें.
Cloud Storage API को सुरक्षित करने के बाद, शेड्यूल किए गए अगले डेटा ट्रांसफ़र का इंतज़ार करें या यहां दिया गया तरीका अपनाकर, मैन्युअल तरीके से ट्रांसफ़र ट्रिगर करें:
- Google Cloud Console में BigQuery पेज पर जाएं.
- डेटा ट्रांसफ़र पर क्लिक करें.
- सूची से अपना ट्रांसफ़र चुनें: इस कोडलैब के लिए, हम Codelab Transfer ट्रांसफ़र का इस्तेमाल कर रहे हैं
- अभी ट्रांसफ़र करें पर क्लिक करें
- ठीक है पर क्लिक करें.
इसके बाद, एक और ट्रांसफ़र शुरू हो जाएगा. इसे देखने के लिए, आपको पेज को रीफ़्रेश करना पड़ सकता है. इस बार, ट्रांसफ़र VPC सर्विस कंट्रोल के उल्लंघन की वजह से पूरा नहीं हो पाएगा.
Cloud Storage के VPC सर्विस कंट्रोल के उल्लंघन की जांच करना
ट्रांसफ़र की खास जानकारी में दिए गए vpcServiceControlsUniqueIdentifier
का इस्तेमाल करके, ऑडिट लॉग फ़िल्टर करें.
RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER
के लिए, डेटा भेजने से जुड़ा उल्लंघन हुआ है. इसकी जानकारी यहां दी गई है:
- प्रिंसिपल, डेटा ट्रांसफ़र सेवा में कॉन्फ़िगर किया गया सेवा खाता होता है. चाहे डेटा ट्रांसफ़र को मैन्युअल तरीके से ट्रिगर किया गया हो या शेड्यूल किया गया डेटा ट्रांसफ़र चल रहा हो, अस्वीकार किया गया प्रिंसिपल एक ही होगा.
- जिस सेवा पर असर पड़ा है वह Cloud Storage है
- अनुरोध का सोर्स वह प्रोजेक्ट है जहां डेटा ट्रांसफ़र सेवा कॉन्फ़िगर की गई है:
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 को VPC सेवा नियंत्रणों से सुरक्षित रखें.
डेटासेट बनाने और कॉपी करने के लिए, हम bq mk
कमांड का इस्तेमाल करेंगे. यह कमांड, bq टूल का इस्तेमाल करता है.
project-1
में डेस्टिनेशन डेटासेट बनाना
डेटासेट को कॉपी करने से पहले, डेस्टिनेशन डेटासेट बनाना होगा. डेस्टिनेशन डेटासेट बनाने के लिए, यह कमांड चलाया जा सकता है. इससे प्रोजेक्ट project-1
में copied_dataset
नाम का डेटासेट बनता है और उसकी जगह us
होती है.
bq mk \
--dataset \
--location=us \
project-1:copied_dataset
VPC सर्विस कंट्रोल की मदद से, project-2
में BigQuery सेवा को सुरक्षित करना
परिधि perimeter-2
के कॉन्फ़िगरेशन में बदलाव करें और BigQuery डेटा ट्रांसफ़र और Cloud Storage सेवाओं के साथ-साथ, सुरक्षित सेवा के तौर पर BigQuery API जोड़ें.
डेटासेट की कॉपी बनाने की प्रोसेस शुरू करना
डेटासेट कॉपी करने के लिए, यह 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 सर्विस कंट्रोल की नीति का उल्लंघन होने की वजह से, कॉपी नहीं हो पाएगा.
VPC Service Controls के उल्लंघन से जुड़ी जानकारी देखने के लिए, project-2
(सोर्स डेटासेट प्रोजेक्ट) में लॉग देखें. इसके लिए, नीचे दी गई लॉग क्वेरी का इस्तेमाल करें. लॉग क्वेरी, BigQuery सेवा और कॉपी किए जा रहे डेटासेट (codelab_bqtransfer_dataset
) के संसाधन के नाम पर लॉग फ़िल्टर करती है.
resource.labels.service="bigquery.googleapis.com"
protoPayload.metadata.resourceNames:"datasets/codelab_bqtransfer_dataset"
VPC सेवा नियंत्रण की नीति का उल्लंघन, 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
पर वही कमांड चलाएं. इस बार, डेटासेट को बिना किसी VPC सेवा नियंत्रण के उल्लंघन के कॉपी किया जाना चाहिए.
7. साफ़-सफ़ाई सेवा
सेवा के इस्तेमाल में न होने पर, VPC सर्विस कंट्रोल का इस्तेमाल करने के लिए कोई अलग शुल्क नहीं लिया जाता. हालांकि, इस लैबोरेटरी में इस्तेमाल किए गए सेटअप को हटाना सबसे सही तरीका है. शुल्क से बचने के लिए, VM इंस्टेंस और/या Cloud प्रोजेक्ट भी मिटाए जा सकते हैं. Cloud प्रोजेक्ट मिटाने पर, उस प्रोजेक्ट में इस्तेमाल किए गए सभी संसाधनों के लिए बिलिंग बंद हो जाती है.
- Cloud Storage की बकेट मिटाने के लिए, यह तरीका अपनाएं:
- Google Cloud Console में, Cloud Storage बकेट पेज पर जाएं.
- मिटाने के लिए, बकेट का चेकबॉक्स चुनें. इसके बाद, मिटाएं पर क्लिक करें.
- इसके बाद, ओवरले विंडो में जाकर, पुष्टि करें कि आपको बकेट और उसका कॉन्टेंट मिटाना है.
- BigQuery डेटासेट मिटाने के लिए, यह तरीका अपनाएं:
- Google Cloud Console में, BigQuery पेज पर जाएं.
- एक्सप्लोरर पैनल में, अपने प्रोजेक्ट को बड़ा करें और कोई डेटासेट चुनें.
- तीन बिंदु वाले मेन्यू को बड़ा करें और मिटाएं पर क्लिक करें.
- डेटासेट मिटाएं डायलॉग में, फ़ील्ड में
delete
टाइप करें. इसके बाद, मिटाएं पर क्लिक करें.
- सर्विस पेरीमीटर मिटाने के लिए, यह तरीका अपनाएं:
- Google Cloud Console में, सुरक्षा चुनें. इसके बाद, उस लेवल पर VPC सर्विस कंट्रोल चुनें जहां ऐक्सेस नीति का दायरा तय किया गया है. इस मामले में, फ़ोल्डर लेवल पर.
- VPC सेवा नियंत्रण पेज पर, उस पेरिमीटर की टेबल लाइन में
Delete Icon
चुनें जिसे आपको मिटाना है.
- ऐक्सेस लेवल मिटाने के लिए, यह तरीका अपनाएं:
- Google Cloud Console में, फ़ोल्डर के दायरे में ऐक्सेस कॉन्टेक्स्ट मैनेजर पेज खोलें.
- ग्रिड में, उस ऐक्सेस लेवल की लाइन की पहचान करें जिसे आपको मिटाना है. इसके बाद, तीन बिंदु वाला मेन्यू चुनें और फिर मिटाएं को चुनें.
- प्रोजेक्ट बंद करने के लिए, यह तरीका अपनाएं:
- Google Cloud Console में, उस प्रोजेक्ट के IAM और एडमिन सेटिंग पेज पर जाएं जिसे मिटाना है.
- आईएएम और एडमिन सेटिंग पेज पर, बंद करें चुनें.
- प्रोजेक्ट आईडी डालें और वैसे भी बंद करें चुनें.
8. बधाई हो!
इस कोडलैब में, आपने VPC सर्विस कंट्रोल पेरीमीटर बनाया, उसे लागू किया, और उससे जुड़ी समस्या हल की.
ज़्यादा जानें
इन स्थितियों को भी एक्सप्लोर किया जा सकता है:
project-1
को किसी दूसरे पेरिमीटर में जोड़ें, जो BigQuery, BigQuery डेटा ट्रांसफ़र सेवा, और Cloud Storage को भी सुरक्षित रखता है.- काम करने वाले अन्य सोर्स से BigQuery में डेटा ट्रांसफ़र करें.
- जगह या डिवाइस की नीति जैसे अन्य एट्रिब्यूट के हिसाब से, उपयोगकर्ता के ऐक्सेस पर पाबंदी लगाएं.
लाइसेंस
इस काम के लिए, Creative Commons Attribution 2.0 जनरल लाइसेंस के तहत लाइसेंस मिला है.