डीएलपी एपीआई और Cloud फ़ंक्शन की मदद से, Cloud Storage में अपलोड किए गए डेटा को अपने-आप कैटगरी में बांटने की सुविधा

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

आजकल के संगठनों में, अलग-अलग सोर्स से लगातार डेटा आता रहता है. इसके लिए, अक्सर डेटा को क्वारंटीन करने और उसे कैटगरी में बांटने की ज़रूरत होती है, ताकि उसे रणनीतिक तरीके से सेव किया जा सके और सुरक्षित रखा जा सके. अगर यह काम मैन्युअल तरीके से किया जाता है, तो यह महंगा और मुश्किल हो जाएगा.

इस कोडलैब में, हम देखेंगे कि Cloud Storage में अपलोड किए गए डेटा को अपने-आप कैसे कैटगरी में बांटा जा सकता है. साथ ही, उसे उससे जुड़ी स्टोरेज बकेट में कैसे ले जाया जा सकता है. हम Cloud Pub/Sub, Cloud Functions, Cloud Data Loss Prevention, और Cloud Storage का इस्तेमाल करके ऐसा करेंगे.

आपको क्या करना होगा

  • क्वारंटीन और क्लासिफ़िकेशन पाइपलाइन के हिस्से के तौर पर इस्तेमाल किए जाने वाले Cloud Storage बकेट बनाएं.
  • एक सामान्य Cloud फ़ंक्शन बनाएं, जो फ़ाइलें अपलोड होने पर DLP API को चालू करे.
  • फ़ाइल प्रोसेस होने के बाद सूचना पाने के लिए, Pub/Sub विषय और सदस्यता बनाएं.
  • Cloud फ़ंक्शन को चालू करने के लिए, क्वारंटीन बकेट में सैंपल फ़ाइलें अपलोड करना
  • डीएलपी एपीआई का इस्तेमाल करके, फ़ाइलों की जांच करें और उन्हें कैटगरी में बांटें. इसके बाद, उन्हें सही बकेट में ले जाएं.

आपको इन चीज़ों की ज़रूरत होगी

  • बिलिंग की सुविधा वाला Google Cloud प्रोजेक्ट. अगर आपके पास Google खाता नहीं है, तो आपको एक खाता बनाना होगा.

2. सेट अप करना

इस कोडलैब में, हम Cloud Shell के ज़रिए कमांड लाइन का इस्तेमाल करके, अलग-अलग क्लाउड संसाधनों और सेवाओं को प्रोविज़न और मैनेज करेंगे. नीचे दिए गए कोड से, Cloud Shell और Cloud Shell Editor खुल जाएगा. साथ ही, कंपैनियन प्रोजेक्ट की रिपॉज़िटरी क्लोन हो जाएगी:

पक्का करें कि आपने सही प्रोजेक्ट का इस्तेमाल किया हो. इसके लिए, gcloud config set project [PROJECT_ID] का इस्तेमाल करके प्रोजेक्ट सेट करें

एपीआई चालू करना

अपने Google Cloud प्रोजेक्ट पर ज़रूरी एपीआई चालू करें:

  • Cloud Functions API - यह उपयोगकर्ता के दिए गए ऐसे फ़ंक्शन को मैनेज करता है जो इवेंट के जवाब में काम करते हैं.
  • Cloud Data Loss Prevention (DLP) API - यह टेक्स्ट, इमेज, और Google Cloud Platform स्टोरेज रिपॉज़िटरी में मौजूद निजता से जुड़े संवेदनशील फ़्रैगमेंट का पता लगाने, जोखिम का विश्लेषण करने, और उनकी पहचान छिपाने के तरीके उपलब्ध कराता है.
  • Cloud Storage - Google Cloud Storage, RESTful सेवा है. इसकी मदद से, Google के प्लैटफ़ॉर्म पर अपना डेटा सेव और ऐक्सेस किया जा सकता है.

सेवा खातों की अनुमतियां

सेवा खाता एक खास तरह का खाता होता है. इसका इस्तेमाल ऐप्लिकेशन और वर्चुअल मशीनें, एपीआई कॉल करने के लिए करती हैं.

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

आखिर में, DLP API सेवा एजेंट की भूमिका असाइन करें. इससे सेवा खाते को bigquery, storage, datastore, pubsub, और key management service के लिए अनुमतियां मिलेंगी:

gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \
--member serviceAccount:$GOOGLE_CLOUD_PROJECT@appspot.gserviceaccount.com \
--role roles/dlp.serviceAgent

डीएलपी सेवा खाता

App Engine सेवा खाते के अलावा, हम डीएलपी सेवा खाते का भी इस्तेमाल करेंगे. DLP API चालू होने पर, यह सेवा खाता अपने-आप बन गया था. शुरू में इसे कोई भूमिका नहीं दी गई थी. आइए, इसे दर्शक की भूमिका असाइन करें:

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 बकेट बनाने होंगे:

  • क्वारंटीन बकेट: हमारा डेटा शुरू में यहां अपलोड किया जाएगा.
  • संवेदनशील डेटा बकेट: डीएलपी एपीआई के हिसाब से संवेदनशील डेटा को यहां ट्रांसफ़र किया जाएगा.
  • ऐसा डेटा बकेट जिसमें संवेदनशील डेटा शामिल न हो: डीएलपी एपीआई के हिसाब से, जो डेटा संवेदनशील नहीं है उसे यहां ट्रांसफ़र किया जाएगा

हम 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' नाम की एक Pub/Sub सदस्यता बनाते हैं:

gcloud pubsub subscriptions create classify-sub --topic classify-topic

इस सदस्यता से दूसरा Cloud फ़ंक्शन ट्रिगर होगा. यह फ़ंक्शन, डीएलपी जॉब शुरू करेगा. यह जॉब, फ़ाइल की जांच करेगा और उसे सही जगह पर ले जाएगा.

5. Cloud Functions

Cloud Functions की मदद से, हम इवेंट पर आधारित, एसिंक्रोनस, और एक ही मकसद के लिए बनाए गए फ़ंक्शन को आसानी से डिप्लॉय कर सकते हैं. इसके लिए, हमें सर्वर या रनटाइम एनवायरमेंट को मैनेज करने की ज़रूरत नहीं होती. हम दी गई main.py फ़ाइल का इस्तेमाल करके, दो Cloud फ़ंक्शन डिप्लॉय करेंगे. यह फ़ाइल dlp-cloud-functions-tutorials/gcs-dlp-classification-python/ में मौजूद है

वैरिएबल बदलें

फ़ंक्शन बनाने से पहले, हमें अपनी main.py फ़ाइल में कुछ वैरिएबल बदलने होंगे.

Cloud Shell Editor में, main.py में बदलाव करें. इसके लिए, लाइन 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

अब कुछ फ़ंक्शन डिप्लॉय करने का समय आ गया है.

सबसे पहले, create_DLP_job फ़ंक्शन को डिप्लॉय करें. इसके लिए, [YOUR_QUARANTINE_BUCKET] को बकेट के सही नाम से बदलें. यह फ़ंक्शन तब ट्रिगर होता है, जब Cloud Storage के तय किए गए क्वारंटीन बकेट में नई फ़ाइलें अपलोड की जाती हैं. यह अपलोड की गई हर फ़ाइल के लिए, एक DLP जॉब बनाएगा:

gcloud functions deploy create_DLP_job --runtime python37 \
--trigger-event google.storage.object.finalize \
--trigger-resource [YOUR_QUARANTINE_BUCKET]

इसके बाद, resolve_DLP फ़ंक्शन को डिप्लॉय करें. इसमें हमारे विषय को ट्रिगर के तौर पर दिखाया गया है. यह फ़ंक्शन, ऊपर दिए गए फ़ंक्शन से शुरू की गई 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 फ़ंक्शन के लिए, कार्रवाइयां मेन्यू पर क्लिक करें. इसके बाद, लॉग देखें चुनें:

89211a959bf30392.png

इस फ़ंक्शन के लॉग में, हमें अपनी हर फ़ाइल के लिए कम से कम चार एंट्री दिखती हैं. इनसे यह पता चलता है:

  • फ़ंक्शन को चलाने की प्रोसेस शुरू हुई
  • फ़ंक्शन को किसी फ़ाइल के लिए ट्रिगर किया गया था
  • कोई जॉब बनाई गई थी
  • फ़ंक्शन का काम पूरा हो गया है

c864dff5a03c75a9.png

हर फ़ाइल के लिए create_DLP_job फ़ंक्शन पूरा होने के बाद, उससे जुड़ा डीएलपी जॉब शुरू हो जाता है. कतार में मौजूद डीएलपी जॉब की सूची देखने के लिए, डीएलपी जॉब पेज पर जाएं:

आपको 'लंबित', 'चल रही हैं' या 'हो गई हैं' के तौर पर मार्क की गई नौकरियों की सूची दिखेगी. इनमें से हर एक, हमारी अपलोड की गई किसी एक फ़ाइल से मेल खाता है:

6af34e72ecb83faf.png

ज़्यादा जानकारी देखने के लिए, इनमें से किसी भी नौकरी के आईडी पर क्लिक करें.

Cloud Functions पेज पर वापस जाकर, resolve_DLP फ़ंक्शन के लॉग देखने पर, आपको हर फ़ाइल के लिए कम से कम आठ एंट्री दिखेंगी. इससे पता चलता है कि:

  • फ़ंक्शन को चलाने की प्रोसेस शुरू हुई
  • Pub/Sub सूचना मिली
  • मिलते-जुलते डीएलपी जॉब का नाम
  • स्टेटस कोड
  • संवेदनशील जानकारी के इंस्टेंस की संख्या (अगर कोई है)
  • वह बकेट जिसमें फ़ाइल को ट्रांसफ़र किया जाएगा
  • DLP जॉब ने फ़ाइल को पार्स कर लिया है
  • फ़ंक्शन का काम पूरा हो गया है

5025bd672cba90a0.png

resolve_DLP फ़ंक्शन के सभी कॉल पूरे होने के बाद, क्वारंटीन बकेट के कॉन्टेंट को फिर से देखें:

gsutil ls gs://[YOUR_QUARANTINE_BUCKET]

इस बार, यह पूरी तरह से खाली होना चाहिए. हालांकि, अगर ऊपर दी गई कमांड को अन्य बकेट के लिए चलाया जाता है, तो आपको हमारी फ़ाइलें उनके संबंधित बकेट में अलग-अलग दिखेंगी!

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

अब हमने देख लिया है कि डेटा को कैटगरी में बांटने के लिए, Cloud Functions के साथ DLP API का इस्तेमाल कैसे किया जाता है. इसलिए, आइए अब अपने प्रोजेक्ट से उन सभी संसाधनों को हटा दें जिन्हें हमने बनाया है.

प्रोजेक्ट मिटाना

अगर आपको ठीक लगे, तो पूरा प्रोजेक्ट मिटाया जा सकता है. GCP Console में, Cloud Resource Manager पेज पर जाएं:

प्रोजेक्ट की सूची में, उस प्रोजेक्ट को चुनें जिस पर हम काम कर रहे थे. इसके बाद, मिटाएं पर क्लिक करें. आपको प्रोजेक्ट आईडी डालने के लिए कहा जाएगा. इसे डालें और बंद करें पर क्लिक करें.

इसके अलावा, gcloud का इस्तेमाल करके, पूरे प्रोजेक्ट को सीधे Cloud Shell से मिटाया जा सकता है:

gcloud projects delete [PROJECT_ID]

अगर आपको अलग-अलग कॉम्पोनेंट को एक-एक करके मिटाना है, तो अगले सेक्शन पर जाएं.

Cloud Functions

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 के साथ-साथ DLP API का इस्तेमाल करने का तरीका जान लिया है!

हमने क्या-क्या कवर किया है

  • हमने अपने संवेदनशील और गैर-संवेदनशील डेटा को सेव करने के लिए, Cloud Storage बकेट बनाए हैं
  • हमने क्लाउड फ़ंक्शन को ट्रिगर करने के लिए, Pub/Sub विषय और सदस्यता बनाई है
  • हमने Cloud Functions बनाया है. इसे डीएलपी से जुड़े ऐसे काम शुरू करने के लिए डिज़ाइन किया गया है जो फ़ाइलों में मौजूद संवेदनशील डेटा के आधार पर उन्हें कैटगरी में बांटता है
  • हमने टेस्ट डेटा अपलोड किया और Cloud Functions के Stackdriver लॉग देखे, ताकि प्रोसेस को काम करते हुए देखा जा सके