1. खास जानकारी
आज-कल के संगठन में, अलग-अलग सोर्स से लगातार डेटा मिलता है. रणनीति बनाकर डेटा को सुरक्षित रखने के लिए, अक्सर डेटा को क्वॉरंटीन करना होता है और उसे अलग-अलग कैटगरी में बांटना पड़ता है. ऐसा करना, मैन्युअल तौर पर किया जाने वाला डेटा काफ़ी महंगा और नामुमकिन हो जाता है.
इस कोडलैब में, हम आपको बताएंगे कि हम Cloud Storage में अपलोड किए गए डेटा को, अपने-आप अलग-अलग कैटगरी में बांटने और उसे स्टोरेज बकेट में कैसे ले जा सकते हैं. ऐसा करने के लिए, हम Cloud Pub/Sub, Cloud Functions, Cloud डेटा लीक होने की रोकथाम, और Cloud Storage का इस्तेमाल करेंगे.
आपको क्या करना होगा
- क्वॉरंटीन और क्लासिफ़िकेशन पाइपलाइन के हिस्से के तौर पर, Cloud Storage बकेट बनाएं.
- एक आसान Cloud फ़ंक्शन बनाएं, जो फ़ाइलों के अपलोड होने पर DLP API को शुरू करता है.
- फ़ाइल की प्रोसेसिंग पूरी हो जाने पर, आपको सूचना देने के लिए Pub/Sub विषय और सदस्यता बनाएं.
- Cloud फ़ंक्शन शुरू करने के लिए, क्वॉरंटीन बकेट में सैंपल फ़ाइलें अपलोड करें
- फ़ाइलों की जांच करने और उन्हें अलग-अलग कैटगरी में बांटने के लिए, DLP API का इस्तेमाल करें और उन्हें सही बकेट में ले जाएं.
आपको इन चीज़ों की ज़रूरत होगी
- ऐसा Google Cloud प्रोजेक्ट जिसमें बिलिंग सेट अप हो. अगर आपके पास Google खाता नहीं है, तो आपको खाता बनाना होगा.
2. सेट अप किया जा रहा है
इस पूरे कोडलैब के दौरान, हम Cloud Shell के ज़रिए कमांड लाइन का इस्तेमाल करके, क्लाउड के अलग-अलग संसाधनों और सेवाओं का प्रावधान और उन्हें मैनेज करेंगे. ये फ़ाइलें, Cloud Shell Editor के साथ-साथ Cloud Shell में खुलेंगी और साथी प्रोजेक्ट के रिपॉज़िटरी (डेटा स्टोर करने की जगह) का क्लोन बनाती हैं:
प्रोजेक्ट को gcloud config set project [PROJECT_ID]
पर सेट करके, पक्का करें कि सही प्रोजेक्ट का इस्तेमाल किया जा रहा हो
एपीआई को चालू करना
अपने Google Cloud प्रोजेक्ट के लिए ज़रूरी एपीआई चालू करें:
- Cloud Functions API - यह, उपयोगकर्ता से मिले लाइटवेट फ़ंक्शन को मैनेज करता है, जो इवेंट के जवाब में लागू किए जाते हैं.
- Cloud डेटा लॉस प्रिवेंशन (डीएलपी) एपीआई - इसकी मदद से टेक्स्ट, इमेज, और Google Cloud Platform के स्टोरेज स्टोर करने की जगहों में, निजता के हिसाब से संवेदनशील फ़्रैगमेंट का पता लगाने, उनसे जुड़े जोखिम का विश्लेषण करने, और पहचान से जुड़ी जानकारी हटाने के तरीके बताए गए हैं.
- Cloud Storage - Google Cloud Storage, Google के इन्फ़्रास्ट्रक्चर पर आपके डेटा को सेव और ऐक्सेस करने के लिए एक RESTful सेवा है.
सेवा खातों की अनुमतियां
सेवा खाता एक खास तरह का खाता होता है. इसका इस्तेमाल ऐप्लिकेशन और वर्चुअल मशीन, अनुमति वाले एपीआई कॉल करने के लिए करते हैं.
App Engine का डिफ़ॉल्ट सेवा खाता
App Engine के डिफ़ॉल्ट सेवा खाते का इस्तेमाल, आपके Cloud प्रोजेक्ट में टास्क पूरे करने के लिए किया जाता है. यह इस्तेमाल, App Engine में चल रहे आपके ऐप्लिकेशन की ओर से किया जाता है. यह सेवा खाता आपके प्रोजेक्ट में डिफ़ॉल्ट रूप से मौजूद होता है. इसके लिए एडिटर की भूमिका असाइन की जाती है.
सबसे पहले, हम अपने सेवा खाते को डीएलपी एडमिन की भूमिका देंगे, जो डेटा लीक होने की रोकथाम से जुड़ी जॉब को मैनेज करने के लिए ज़रूरी है:
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member serviceAccount:$GOOGLE_CLOUD_PROJECT@appspot.gserviceaccount.com \ --role roles/dlp.admin
आखिर में, डीएलपी एपीआई के सेवा एजेंट की भूमिका दें. इससे BigQuery, स्टोरेज, डेटास्टोर, pubsub, और मुख्य मैनेजमेंट सेवा के लिए सेवा खाते की अनुमतियां मिलेंगी:
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member serviceAccount:$GOOGLE_CLOUD_PROJECT@appspot.gserviceaccount.com \ --role roles/dlp.serviceAgent
डीएलपी सेवा खाता
App Engine सेवा खाते के अलावा, हम डीएलपी सेवा के खाते का भी इस्तेमाल करेंगे. डीएलपी एपीआई को चालू करने के बाद, यह सेवा खाता अपने-आप बन गया. हालांकि, शुरुआत में इसे किसी के लिए भूमिका नहीं दी गई थी. चलिए, इसे दर्शक की भूमिका देते हैं:
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member serviceAccount:service-`gcloud projects list --filter="PROJECT_ID:$GOOGLE_CLOUD_PROJECT" --format="value(PROJECT_NUMBER)"`@dlp-api.iam.gserviceaccount.com \ --role roles/viewer
3. Cloud Storage बकेट
अब हमें अपना डेटा सेव करने के लिए, तीन Cloud Storage बकेट बनानी होंगी:
- क्वॉरंटीन बकेट: हमारा डेटा आरंभ में यहां अपलोड किया जाएगा.
- संवेदनशील डेटा बकेट: डीएलपी API ने जिस डेटा को संवेदनशील माना है उसे यहां ट्रांसफ़र किया जाएगा.
- गैर-संवेदनशील डेटा बकेट: डीएलपी API ने जिस डेटा को संवेदनशील नहीं माना है उसे यहां ट्रांसफ़र किया जाएगा
हम अपनी तीनों बकेट को एक ही स्वूप में बनाने के लिए gsutil कमांड का इस्तेमाल कर सकते हैं:
gsutil mb gs://[YOUR_QUARANTINE_BUCKET] \ gs://[YOUR_SENSITIVE_DATA_BUCKET] \ gs://[YOUR_NON_SENSITIVE_DATA_BUCKET]
आपने अभी-अभी जो बकेट बनाई हैं उनके नामों पर ध्यान दें - हमें बाद में उनकी ज़रूरत पड़ेगी.
4. Pub/Sub के विषय और सदस्यता
Cloud Pub/Sub, ऐप्लिकेशन के बीच कई से लेकर कई एसिंक्रोनस मैसेज सेवा उपलब्ध कराता है. प्रकाशक एक मैसेज बनाएगा और उसे विषय नाम के मैसेज की फ़ीड में प्रकाशित करेगा. सदस्य को ये मैसेज, सदस्यता के तौर पर मिलेंगे. उस सदस्यता के आधार पर, हमारे मामले में, डीएलपी जॉब पूरा होने के बाद, हम Cloud फ़ंक्शन की मदद से फ़ाइलों को उनके संबंधित बकेट में ट्रांसफ़र करेंगे.
सबसे पहले, विषय बनाते हैं. जब भी हमारे क्वॉरंटीन स्टोरेज बकेट में कोई फ़ाइल जोड़ी जाएगी, तब यहां एक मैसेज पब्लिश किया जाएगा. हम इसे ‘classify-topic' नाम देंगे
gcloud pubsub topics create classify-topic
विषय से मैसेज पब्लिश होने पर, सदस्यता को सूचना दी जाएगी. चलिए, 'classify-sub' नाम की pubsub सदस्यता बनाएं:
gcloud pubsub subscriptions create classify-sub --topic classify-topic
उस सदस्यता से एक दूसरा Cloud Function ट्रिगर होगा जो एक डीएलपी जॉब शुरू करेगा. जो फ़ाइल की जांच करेगा और उसे सही जगह पर ले जाएगा.
5. Cloud Functions
Cloud Functions, हमें लाइटवेट, इवेंट-आधारित, एसिंक्रोनस सिंगल-पर्पज़ फ़ंक्शन डिप्लॉय करने देता है, इसके लिए सर्वर या रनटाइम एनवायरमेंट को मैनेज करने की ज़रूरत नहीं होती. हम दी गई main.py
फ़ाइल का इस्तेमाल करके, dlp-cloud-functions-tutorials/gcs-dlp-classification-python/
में मौजूद दो क्लाउड फ़ंक्शन डिप्लॉय करने जा रहे हैं
वैरिएबल बदलें
इससे पहले कि हम अपने फ़ंक्शन बना सकें, हमें अपनी main.py
फ़ाइल में कुछ वैरिएबल बदलने होंगे.
Cloud Shell Editor में, प्रोजेक्ट आईडी और बकेट वैरिएबल की वैल्यू बदलकर, 28 से 34 लाइनों के बीच वैल्यू को बदलें.इसके लिए, पहले बनाए गए बकेट का इस्तेमाल करें:
main.py
PROJECT_ID = '[PROJECT_ID_HOSTING_STAGING_BUCKET]'
"""The bucket the to-be-scanned files are uploaded to."""
STAGING_BUCKET = '[YOUR_QUARANTINE_BUCKET]'
"""The bucket to move "sensitive" files to."""
SENSITIVE_BUCKET = '[YOUR_SENSITIVE_DATA_BUCKET]'
"""The bucket to move "non sensitive" files to."""
NONSENSITIVE_BUCKET = '[YOUR_NON_SENSITIVE_DATA_BUCKET]'
इसके अलावा, pub/sub विषय वैरिएबल की वैल्यू को पिछले चरण में बनाए गए pub/sub विषय से बदलें:
""" Pub/Sub topic to notify once the DLP job completes."""
PUB_SUB_TOPIC = 'classify-topic'
फ़ंक्शन डिप्लॉय करें
अपने Cloud Shell में, डायरेक्ट्री को gcs-dlp-classification-python में बदलें, जहां main.py
फ़ाइल मौजूद है:
cd ~/cloudshell_open/dlp-cloud-functions-tutorials/gcs-dlp-classification-python
कुछ फ़ंक्शन को डिप्लॉय करने का समय आ गया है.
सबसे पहले, [YOUR_QUARANTINE_BUCKET] को सही बकेट नाम से बदलकर create_DLP_job
फ़ंक्शन डिप्लॉय करें. यह फ़ंक्शन तब ट्रिगर होता है, जब तय की गई Cloud Storage क्वॉरंटीन बकेट में नई फ़ाइलें अपलोड की जाती हैं. साथ ही, अपलोड की गई हर फ़ाइल के लिए एक डीएलपी जॉब बन जाता है:
gcloud functions deploy create_DLP_job --runtime python37 \ --trigger-event google.storage.object.finalize \ --trigger-resource [YOUR_QUARANTINE_BUCKET]
इसके बाद, हमारे विषय को इसके लिए ट्रिगर के तौर पर दिखाते हुए resolve_DLP
फ़ंक्शन को डिप्लॉय करें. यह फ़ंक्शन, ऊपर दिए गए फ़ंक्शन से बाद के डीएलपी जॉब से शुरू की गई pub/sub सूचना को सुनता है. pub/sub सूचना मिलते ही, यह डीएलपी जॉब से नतीजे चुन लेता है और फ़ाइल को उसके मुताबिक संवेदनशील बकेट या असंवेदनशील बकेट में ले जाता है:
gcloud functions deploy resolve_DLP --runtime python37 \ --trigger-topic classify-topic
पुष्टि करें
पुष्टि करें कि gcloud functions describe
कमांड से हमारे दोनों क्लाउड फ़ंक्शन डिप्लॉय किए गए हों:
gcloud functions describe create_DLP_job
gcloud functions describe resolve_DLP
लागू होने के बाद, आउटपुट में स्टेटस के बारे में ACTIVE
दिखेगा.
6. सैंपल डेटा की मदद से जांच करना
सभी हिस्से सही जगह पर मौजूद होने के बाद, अब हम कुछ सैंपल फ़ाइलों की मदद से चीज़ों की जांच कर सकते हैं. अपने Cloud Shell में, अपनी मौजूदा डायरेक्ट्री को sample_data
में बदलें:
cd ~/cloudshell_open/dlp-cloud-functions-tutorials/sample_data
हमारी नमूना फ़ाइलों में डेटा के विभिन्न भागों वाली txt और csv फ़ाइलें शामिल हैं. 'sample_s' से पहले लगी फ़ाइलें इसमें संवेदनशील डेटा होगा, जबकि उसकी शुरुआत 'sample_n' से होगी नहीं. उदाहरण के लिए, sample_s20.csv में वह शामिल है जिसे यूएस सोशल सिक्योरिटी नंबर जैसा दिखने के लिए फ़ॉर्मैट किया गया है:
sample_s20.csv
Name,SSN,metric 1,metric 2
Maria Johnson,284-73-5110,5,43
Tyler Parker,284-73-5110,8,17
Maria Johnson,284-73-5110,54,63
Maria Johnson,245-25-8698,53,19
Tyler Parker,475-15-8499,6,67
Maria Johnson,719-12-6560,75,83
Maria Johnson,616-69-3226,91,13
Tzvika Roberts,245-25-8698,94,61
वहीं दूसरी ओर, sample_n15.csv में मौजूद डेटा को संवेदनशील नहीं माना जाएगा:
sample_n15.csv
record id,metric 1,metric 2,metric 3
1,59,93,100
2,53,13,17
3,59,67,53
4,52,93,34
5,14,22,88
6,18,88,3
7,32,49,5
8,93,46,14
यह देखने के लिए कि हमारा सेट अप हमारी फ़ाइलों का इस्तेमाल कैसे करेगा, आइए हम अपनी सभी टेस्ट फ़ाइलों को अपने क्वॉरंटीन में अपलोड करें
बकेट:
gsutil -m cp * gs://[YOUR_QUARANTINE_BUCKET]
शुरुआत में, हमारी फ़ाइलें उस क्वॉरंटीन बकेट में रहेंगी जिसमें हमने उन्हें अपलोड किया था. इसकी पुष्टि करने के लिए, फ़ाइलें अपलोड करने के तुरंत बाद, क्वॉरंटीन बकेट का कॉन्टेंट डालें:
gsutil ls gs://[YOUR_QUARANTINE_BUCKET]
शुरू किए गए इवेंट की सीरीज़ देखने के लिए, Cloud Functions पेज पर जाएं:
create_DLP_job फ़ंक्शन के लिए कार्रवाई मेन्यू पर क्लिक करें और लॉग देखें चुनें:
इस फ़ंक्शन के लिए हमारे लॉग में, हमें हमारी हर फ़ाइल के लिए कम से कम चार एंट्री दिखती हैं. इनमें ये शामिल हैं:
- फ़ंक्शन लागू होने की प्रोसेस शुरू हुई
- किसी खास फ़ाइल के लिए फ़ंक्शन ट्रिगर किया गया था
- नौकरी का विकल्प बनाया गया
- फ़ंक्शन ने एक्ज़ीक्यूट किया
हर फ़ाइल के लिए create_DLP_job फ़ंक्शन को पूरा कर लेने पर, संबंधित DLP जॉब शुरू हो जाता है. सूची में मौजूद डीएलपी जॉब की सूची देखने के लिए, डीएलपी जॉब पेज पर जाएं:
आपको लंबित, चल रहे या हो गया कार्यों की सूची दिखाई देगी. इनमें से हर एक फ़ाइल, उन फ़ाइलों में से किसी एक से जुड़ी है जिन्हें हमने अपलोड किया है:
ज़्यादा जानकारी के लिए, इनमें से किसी भी नौकरी के आईडी पर क्लिक करें.
Cloud Functions पेज पर वापस जाने और फ़िल्टर करने की सुविधा के लिए लॉग आउट की जांच करने पर, आपको हर फ़ाइल के लिए कम से कम आठ एंट्री दिखेंगी. इनमें यह जानकारी शामिल है:
- फ़ंक्शन लागू होने की प्रोसेस शुरू हुई
- pub/sub सूचना मिली
- इससे जुड़े डीएलपी जॉब का नाम
- स्टेटस कोड
- संवेदनशील जानकारी के इंस्टेंस की संख्या (अगर कोई है)
- वह बकेट जिसमें फ़ाइल को ले जाया जाएगा
- डीएलपी जॉब ने फ़ाइल को पार्स कर दिया है
- फ़ंक्शन ने एक्ज़ीक्यूट किया
जैसे ही समाधान_DLP फ़ंक्शन के सभी कॉल का चलना पूर्ण हो, क्वॉरंटीन बकेट की सामग्री को एक बार फिर से देखें:
gsutil ls gs://[YOUR_QUARANTINE_BUCKET]
इस बार, यह पूरी तरह से खाली होना चाहिए. हालांकि, अगर ऊपर दूसरे बकेट के लिए भी यही निर्देश चलाया जाता है, तो आपको हमारी फ़ाइलें ठीक तरह से अलग-अलग बकेट में मिलेंगी!
7. साफ़-सफ़ाई सेवा
हमने यह देख लिया है कि डेटा की कैटगरी तय करने के लिए, Cloud Functions के साथ डीएलपी API का इस्तेमाल कैसे किया जाता है. इसलिए, अब हम अपने प्रोजेक्ट में सभी संसाधन उपलब्ध कराते हैं.
प्रोजेक्ट मिटाना
आपके पास पूरा प्रोजेक्ट मिटाने का विकल्प भी होता है. GCP कंसोल में, Cloud Resource Manager पेज पर जाएं:
प्रोजेक्ट की सूची में, वह प्रोजेक्ट चुनें जिस पर हम काम कर रहे हैं और मिटाएं पर क्लिक करें. आपको प्रोजेक्ट आईडी टाइप करने के लिए कहा जाएगा. इसे डालें और शट डाउन करें पर क्लिक करें.
इसके अलावा, gcloud की मदद से पूरे प्रोजेक्ट को सीधे Cloud Shell से मिटाया जा सकता है:
gcloud projects delete [PROJECT_ID]
अगर आपको अलग-अलग कॉम्पोनेंट को एक-एक करके मिटाना है, तो अगले सेक्शन पर जाएं.
Cloud के फ़ंक्शन
gcloud के साथ हमारे दोनों क्लाउड फ़ंक्शन मिटाएं:
gcloud functions delete -q create_DLP_job && gcloud functions delete -q resolve_DLP
स्टोरेज बकेट
अपलोड की गई सभी फ़ाइलें हटाएं और gsutil के साथ बकेट मिटाएं:
gsutil rm -r gs://[YOUR_QUARANTINE_BUCKET] \ gs://[YOUR_SENSITIVE_DATA_BUCKET] \ gs://[YOUR_NON_SENSITIVE_DATA_BUCKET]
Pub/Sub
सबसे पहले, gcloud की मदद से pub/sub की सदस्यता मिटाएं:
gcloud pubsub subscriptions delete classify-sub
आखिर में, gcloud की मदद से pub/sub विषय को मिटाएं:
gcloud pubsub topics delete classify-topic
8. बधाई हो!
वाह! आपने कर दिखाया. आपने फ़ाइलों की कैटगरी को ऑटोमेट करने के लिए, Cloud Functions के साथ-साथ डीएलपी एपीआई को इस्तेमाल करने का तरीका सीख लिया है!
हमने इन विषयों के बारे में बताया
- हमने अपने संवेदनशील और गैर-संवेदनशील डेटा को सेव करने के लिए Cloud Storage बकेट बनाई है
- हमने क्लाउड फ़ंक्शन को ट्रिगर करने के लिए, Pub/Sub विषय और सदस्यता बनाई है
- हमने Cloud Functions बनाया है. इसे डीएलपी के तहत काम करने की शुरुआत करने के लिए डिज़ाइन किया गया है. इसमें फ़ाइलों को उनके संवेदनशील डेटा के आधार पर कैटगरी में बांटा जाता है
- हमने टेस्ट डेटा अपलोड किया और अपने Cloud Functions की जांच की प्रोसेस को देखने के लिए, Stackdriver लॉग