১. সংক্ষিপ্ত বিবরণ
আধুনিক প্রতিষ্ঠানগুলোতে বিভিন্ন উৎস থেকে ক্রমাগত বিপুল পরিমাণ ডেটা আসছে। কৌশলগতভাবে সংরক্ষণ ও সুরক্ষার জন্য প্রায়শই সেই ডেটাকে আলাদা করা এবং শ্রেণিবদ্ধ করার প্রয়োজন হয় – এই কাজটি যদি হাতে করা হয়, তবে তা দ্রুত ব্যয়বহুল এবং অসম্ভব হয়ে উঠবে।
এই কোডল্যাবে আমরা দেখব, কীভাবে ক্লাউড স্টোরেজে আপলোড করা ডেটাকে স্বয়ংক্রিয়ভাবে শ্রেণীবদ্ধ করে সংশ্লিষ্ট স্টোরেজ বাকেটে স্থানান্তর করা যায়। আমরা ক্লাউড পাব/সাব, ক্লাউড ফাংশন, ক্লাউড ডেটা লস প্রিভেনশন এবং ক্লাউড স্টোরেজ ব্যবহার করে এই কাজটি সম্পন্ন করব।
আপনি যা করবেন
- কোয়ারেন্টাইন এবং ক্লাসিফিকেশন পাইপলাইনের অংশ হিসেবে ব্যবহারের জন্য ক্লাউড স্টোরেজ বাকেট তৈরি করুন।
- একটি সহজ ক্লাউড ফাংশন তৈরি করুন যা ফাইল আপলোড হলে ডিএলপি এপিআই (DLP API) চালু করবে।
- ফাইল প্রসেসিং সম্পন্ন হলে আপনাকে জানানোর জন্য একটি পাব/সাব টপিক এবং সাবস্ক্রিপশন তৈরি করুন।
- ক্লাউড ফাংশন চালু করতে কোয়ারেন্টাইন বাকেটে নমুনা ফাইলগুলো আপলোড করুন।
- DLP API ব্যবহার করে ফাইলগুলো পরিদর্শন ও শ্রেণীবদ্ধ করুন এবং সেগুলোকে উপযুক্ত বাকেটে স্থানান্তর করুন।
আপনার যা যা লাগবে
- বিলিং সেটআপ করা একটি গুগল ক্লাউড প্রজেক্ট। যদি আপনার এমন কোনো প্রজেক্ট না থাকে, তবে আপনাকে একটি তৈরি করে নিতে হবে।
২. প্রস্তুতি গ্রহণ
এই কোডল্যাব জুড়ে, আমরা ক্লাউড শেল-এর মাধ্যমে কমান্ড লাইন ব্যবহার করে বিভিন্ন ক্লাউড রিসোর্স এবং সার্ভিস প্রোভিশন ও ম্যানেজ করব। নিম্নলিখিত কমান্ডটি ক্লাউড শেল ও ক্লাউড শেল এডিটর খুলবে এবং সহযোগী প্রজেক্ট রিপোজিটরিটি ক্লোন করবে:
gcloud config set project [PROJECT_ID] কমান্ড ব্যবহার করে সঠিক প্রজেক্টটি সেট করে নিশ্চিত করুন যে আপনি এটি ব্যবহার করছেন।
এপিআই সক্রিয় করুন
আপনার গুগল ক্লাউড প্রোজেক্টে প্রয়োজনীয় এপিআইগুলো সক্রিয় করুন:
- ক্লাউড ফাংশনস এপিআই - ইভেন্টের প্রতিক্রিয়ায় সম্পাদিত ব্যবহারকারী-প্রদত্ত লাইটওয়েট ফাংশনগুলো পরিচালনা করে।
- ক্লাউড ডেটা লস প্রিভেনশন (ডিএলপি) এপিআই - টেক্সট, ছবি এবং গুগল ক্লাউড প্ল্যাটফর্ম স্টোরেজ রিপোজিটরিতে থাকা গোপনীয়তা-সংবেদনশীল অংশের সনাক্তকরণ, ঝুঁকি বিশ্লেষণ এবং পরিচয় গোপন করার পদ্ধতি প্রদান করে।
- ক্লাউড স্টোরেজ - গুগল ক্লাউড স্টোরেজ হলো গুগলের পরিকাঠামোতে আপনার ডেটা সংরক্ষণ এবং অ্যাক্সেস করার জন্য একটি RESTful পরিষেবা।
পরিষেবা অ্যাকাউন্ট অনুমতি
সার্ভিস অ্যাকাউন্ট হলো এক বিশেষ ধরনের অ্যাকাউন্ট যা অ্যাপ্লিকেশন এবং ভার্চুয়াল মেশিনগুলো অনুমোদিত এপিআই কল করার জন্য ব্যবহার করে।
অ্যাপ ইঞ্জিন ডিফল্ট পরিষেবা অ্যাকাউন্ট
অ্যাপ ইঞ্জিনে চলমান আপনার অ্যাপগুলোর পক্ষ থেকে আপনার ক্লাউড প্রোজেক্টের কাজগুলো সম্পাদন করার জন্য অ্যাপ ইঞ্জিনের ডিফল্ট সার্ভিস অ্যাকাউন্টটি ব্যবহৃত হয়। এই সার্ভিস অ্যাকাউন্টটি আপনার প্রোজেক্টে ডিফল্টভাবে এডিটর রোল অ্যাসাইন করা অবস্থায় থাকে।
প্রথমে, আমরা আমাদের সার্ভিস অ্যাকাউন্টকে ডিএলপি অ্যাডমিনিস্ট্রেটর রোলটি প্রদান করব, যা ডেটা লস প্রিভেনশন জবগুলো পরিচালনা করার জন্য প্রয়োজন:
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 সার্ভিসের জন্য অনুমতি দেবে:
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member serviceAccount:$GOOGLE_CLOUD_PROJECT@appspot.gserviceaccount.com \ --role roles/dlp.serviceAgent
ডিএলপি পরিষেবা অ্যাকাউন্ট
অ্যাপ ইঞ্জিন সার্ভিস অ্যাকাউন্টের পাশাপাশি, আমরা একটি ডিএলপি সার্ভিস অ্যাকাউন্টও ব্যবহার করব। ডিএলপি এপিআই চালু করার সময় এই সার্ভিস অ্যাকাউন্টটি স্বয়ংক্রিয়ভাবে তৈরি হয়েছিল এবং প্রাথমিকভাবে এটিকে কোনো রোল দেওয়া হয়নি। চলুন এটিকে ভিউয়ার রোলটি প্রদান করি:
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
৩. ক্লাউড স্টোরেজ বাকেট
এখন আমাদের ডেটা সংরক্ষণের জন্য ৩টি ক্লাউড স্টোরেজ বাকেট তৈরি করতে হবে:
- কোয়ারেন্টাইন বাকেট: আমাদের ডেটা প্রাথমিকভাবে এখানে আপলোড করা হবে।
- সংবেদনশীল ডেটা বাকেট: DLP API দ্বারা সংবেদনশীল হিসেবে নির্ধারিত ডেটা এখানে স্থানান্তরিত করা হবে।
- অসংবেদনশীল ডেটা বাকেট: DLP API দ্বারা অসংবেদনশীল হিসেবে নির্ধারিত ডেটা এখানে স্থানান্তরিত করা হবে।
আমরা gsutil কমান্ড ব্যবহার করে একবারে আমাদের তিনটি বাকেটই তৈরি করতে পারি:
gsutil mb gs://[YOUR_QUARANTINE_BUCKET] \ gs://[YOUR_SENSITIVE_DATA_BUCKET] \ gs://[YOUR_NON_SENSITIVE_DATA_BUCKET]
আপনি এইমাত্র যে বাকেটগুলো তৈরি করেছেন সেগুলোর নাম লিখে রাখুন — পরে আমাদের এগুলো লাগবে।
৪. পাব/সাব টপিক এবং সাবস্ক্রিপশন
ক্লাউড পাব/সাব অ্যাপ্লিকেশনগুলোর মধ্যে মেনি-টু-মেনি অ্যাসিঙ্ক্রোনাস মেসেজিং সুবিধা প্রদান করে। একজন পাবলিশার একটি মেসেজ তৈরি করে এবং সেটিকে টপিক নামক একটি মেসেজ ফিডে প্রকাশ করে। একজন সাবস্ক্রাইবার একটি সাবস্ক্রিপশনের মাধ্যমে এই মেসেজগুলো গ্রহণ করে। আমাদের ক্ষেত্রে, সেই সাবস্ক্রিপশনের উপর ভিত্তি করে, একটি ডিএলপি জব চলার পর একটি ক্লাউড ফাংশন ফাইলগুলোকে তাদের নিজ নিজ বাকেটে স্থানান্তর করবে।
প্রথমে, চলুন একটি টপিক তৈরি করি। আমাদের কোয়ারেন্টাইন স্টোরেজ বাকেটে যখনই কোনো ফাইল যুক্ত হবে, এখানে একটি মেসেজ প্রকাশিত হবে। আমরা এর নাম দেব 'classify-topic'।
gcloud pubsub topics create classify-topic
টপিকটি কোনো মেসেজ প্রকাশ করলে সাবস্ক্রিপশনকে জানানো হবে। চলুন 'classify-sub' নামে একটি পাবসাব সাবস্ক্রিপশন তৈরি করি:
gcloud pubsub subscriptions create classify-sub --topic classify-topic
সেই সাবস্ক্রিপশনটি একটি দ্বিতীয় ক্লাউড ফাংশন চালু করবে, যা একটি ডিএলপি জব শুরু করবে এবং ফাইলটি পরীক্ষা করে সেটিকে তার সঠিক স্থানে সরিয়ে দেবে।
৫. ক্লাউড ফাংশন
ক্লাউড ফাংশন আমাদেরকে কোনো সার্ভার বা রানটাইম এনভায়রনমেন্ট পরিচালনার প্রয়োজন ছাড়াই হালকা, ইভেন্ট-ভিত্তিক, অ্যাসিঙ্ক্রোনাস এবং একক-উদ্দেশ্যমূলক ফাংশন স্থাপন করার সুযোগ দেয়। আমরা dlp-cloud-functions-tutorials/gcs-dlp-classification-python/ ফোল্ডারে অবস্থিত প্রদত্ত main.py ফাইলটি ব্যবহার করে ২টি ক্লাউড ফাংশন স্থাপন করব।
ভেরিয়েবল প্রতিস্থাপন করুন
আমাদের ফাংশনগুলো তৈরি করার আগে, main.py ফাইলে কিছু ভেরিয়েবল প্রতিস্থাপন করতে হবে।
ক্লাউড শেল এডিটরে, পূর্বে তৈরি করা সংশ্লিষ্ট বাকেটগুলো ব্যবহার করে main.py ফাইলের ২৮ থেকে ৩৪ নম্বর লাইনে থাকা প্রজেক্ট আইডি এবং বাকেট ভেরিয়েবলের মানগুলো পরিবর্তন করুন:
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 topic to notify once the DLP job completes."""
PUB_SUB_TOPIC = 'classify-topic'
ফাংশন স্থাপন করুন
আপনার ক্লাউড শেলে, gcs-dlp-classification-python ডিরেক্টরিতে যান যেখানে main.py ফাইলটি রয়েছে:
cd ~/cloudshell_open/dlp-cloud-functions-tutorials/gcs-dlp-classification-python
এখন কিছু ফাংশন ডেপ্লয় করার সময় হয়েছে।
প্রথমে, `[YOUR_QUARANTINE_BUCKET]`-এর জায়গায় সঠিক বাকেটের নাম বসিয়ে ` create_DLP_job ফাংশনটি ডিপ্লয় করুন। নির্ধারিত ক্লাউড স্টোরেজ কোয়ারেন্টাইন বাকেটে নতুন ফাইল আপলোড করা হলে এই ফাংশনটি ট্রিগার হয় এবং এটি আপলোড করা প্রতিটি ফাইলের জন্য একটি করে DLP জব তৈরি করবে।
gcloud functions deploy create_DLP_job --runtime python37 \ --trigger-event google.storage.object.finalize \ --trigger-resource [YOUR_QUARANTINE_BUCKET]
এরপরে, resolve_DLP ফাংশনটি ডিপ্লয় করুন এবং এর ট্রিগার হিসেবে আমাদের টপিকটি উল্লেখ করুন। এই ফাংশনটি উপরের ফাংশন থেকে আসা পরবর্তী DLP জবের পাব/সাব নোটিফিকেশন শোনে। পাব/সাব নোটিফিকেশন পাওয়া মাত্রই, এটি DLP জব থেকে ফলাফল সংগ্রহ করে এবং সেই অনুযায়ী ফাইলটিকে সেনসিটিভ বা নন-সেনসিটিভ বাকেটে সরিয়ে দেয়।
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 লেখা থাকবে।
৬. নমুনা ডেটা দিয়ে পরীক্ষা করুন
সবকিছু প্রস্তুত হয়ে গেলে, আমরা এখন কিছু নমুনা ফাইল দিয়ে পরীক্ষা করে দেখতে পারি। আপনার ক্লাউড শেলে বর্তমান ওয়ার্কিং ডিরেক্টরি পরিবর্তন করে sample_data তে যান:
cd ~/cloudshell_open/dlp-cloud-functions-tutorials/sample_data
আমাদের নমুনা ফাইলগুলোতে বিভিন্ন ডেটা সম্বলিত txt এবং csv ফাইল রয়েছে। যে ফাইলগুলোর শুরুতে 'sample_s' আছে, সেগুলোতে সংবেদনশীল ডেটা থাকবে, আর যেগুলোর শুরুতে 'sample_n' আছে, সেগুলোতে থাকবে না। উদাহরণস্বরূপ, sample_s20.csv ফাইলটিতে মার্কিন সোশ্যাল সিকিউরিটি নম্বরের মতো করে ফরম্যাট করা ডেটা রয়েছে:
নমুনা_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-তে থাকা ডেটা সংবেদনশীল বলে বিবেচিত হবে না:
নমুনা_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]
আমরা যে ধারাবাহিক কার্যক্রম শুরু করেছি তা দেখতে, প্রথমে ক্লাউড ফাংশনস পৃষ্ঠায় যান:
`create_DLP_job` ফাংশনের জন্য `Actions` মেনুতে ক্লিক করুন এবং `View Logs` নির্বাচন করুন:

এই ফাংশনের লগে আমরা আমাদের প্রতিটি ফাইলের জন্য অন্তত ৪টি এন্ট্রি দেখতে পাই, যা নির্দেশ করে:
- ফাংশন নির্বাহ শুরু হয়েছে
- একটি নির্দিষ্ট ফাইলের জন্য ফাংশনটি সক্রিয় করা হয়েছিল।
- একটি চাকরি তৈরি করা হয়েছিল
- ফাংশনটির সম্পাদন শেষ হয়ে গিয়েছিল।

প্রতিটি ফাইলের জন্য `create_DLP_job` ফাংশনটি সম্পন্ন হলে, একটি সংশ্লিষ্ট ডিএলপি জব শুরু হয়। কিউতে থাকা ডিএলপি জবগুলির তালিকা দেখতে ডিএলপি জবস পেজে যান:
আপনি পেন্ডিং, রানিং বা ডান—এই তিন ধরনের কাজের একটি তালিকা দেখতে পাবেন। এগুলোর প্রত্যেকটি আমাদের আপলোড করা ফাইলগুলোর কোনো একটির সাথে সম্পর্কিত:

আরও বিস্তারিত দেখতে আপনি এই চাকরিগুলোর যেকোনোটির আইডিতে ক্লিক করতে পারেন।
আপনি যদি ক্লাউড ফাংশন পৃষ্ঠায় ফিরে গিয়ে resolve_DLP ফাংশনের লগগুলো দেখেন, তাহলে প্রতিটি ফাইলের জন্য অন্তত ৮টি এন্ট্রি দেখতে পাবেন, যা নির্দেশ করে:
- ফাংশন নির্বাহ শুরু হয়েছে
- একটি পাব/সাব বিজ্ঞপ্তি পাওয়া গেছে
- সংশ্লিষ্ট ডিএলপি কাজের নাম
- একটি স্ট্যাটাস কোড
- সংবেদনশীল তথ্যের দৃষ্টান্তের সংখ্যা (যদি থাকে)
- যে বাকেটে ফাইলটি সরানো হবে
- ডিএলপি জবটি ফাইলটি পার্স করা শেষ করেছে।
- ফাংশনটির সম্পাদন শেষ হয়ে গিয়েছিল।

resolve_DLP ফাংশনের সমস্ত কল চালানো শেষ হওয়ার সাথে সাথেই, কোয়ারেন্টাইন বাকেটের বিষয়বস্তুগুলো আরেকবার চেক আউট করুন:
gsutil ls gs://[YOUR_QUARANTINE_BUCKET]
এবার এটি সম্পূর্ণ খালি থাকা উচিত। তবে, আপনি যদি অন্য বাকেটগুলোর জন্য উপরের একই কমান্ডটি চালান, তাহলে দেখবেন আমাদের ফাইলগুলো তাদের নিজ নিজ বাকেটে নিখুঁতভাবে আলাদা হয়ে আছে!
৭. পরিচ্ছন্নতা
এখন যেহেতু আমরা দেখেছি কিভাবে ক্লাউড ফাংশনের সাথে ডিএলপি এপিআই ব্যবহার করে ডেটা শ্রেণীবদ্ধ করতে হয়, চলুন আমাদের প্রজেক্ট থেকে তৈরি করা সমস্ত রিসোর্স পরিষ্কার করে ফেলি।
প্রকল্পটি মুছে ফেলুন
আপনি চাইলে পুরো প্রজেক্টটি মুছে ফেলতে পারেন। GCP কনসোলে, ক্লাউড রিসোর্স ম্যানেজার পেজে যান:
প্রজেক্ট তালিকা থেকে, যে প্রজেক্টটিতে আমরা কাজ করছিলাম সেটি নির্বাচন করুন এবং ডিলিট-এ ক্লিক করুন। আপনাকে প্রজেক্ট আইডি টাইপ করতে বলা হবে। সেটি প্রবেশ করান এবং শাট ডাউন-এ ক্লিক করুন।
বিকল্পভাবে, আপনি gcloud ব্যবহার করে সরাসরি ক্লাউড শেল থেকে সম্পূর্ণ প্রজেক্টটি মুছে ফেলতে পারেন:
gcloud projects delete [PROJECT_ID]
আপনি যদি বিভিন্ন উপাদানগুলো এক এক করে মুছে ফেলতে চান, তাহলে পরবর্তী বিভাগে যান।
ক্লাউড ফাংশন
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]
পাব/সাব
প্রথমে gcloud ব্যবহার করে পাব/সাব সাবস্ক্রিপশনটি ডিলিট করুন:
gcloud pubsub subscriptions delete classify-sub
এবং সবশেষে, gcloud ব্যবহার করে পাব/সাব টপিকটি ডিলিট করুন:
gcloud pubsub topics delete classify-topic
৮. অভিনন্দন!
বাহ! আপনি পেরেছেন। আপনি ক্লাউড ফাংশনের সাথে ডিএলপি এপিআই ব্যবহার করে ফাইল শ্রেণিবিন্যাস স্বয়ংক্রিয় করার পদ্ধতি শিখে গেছেন!
আমরা যা আলোচনা করেছি
- আমরা আমাদের সংবেদনশীল এবং অসংবেদনশীল ডেটা সংরক্ষণের জন্য ক্লাউড স্টোরেজ বাকেট তৈরি করেছি।
- আমরা একটি ক্লাউড ফাংশন চালু করার জন্য একটি পাব/সাব টপিক এবং সাবস্ক্রিপশন তৈরি করেছি।
- আমরা এমন ক্লাউড ফাংশন তৈরি করেছি যা একটি ডিএলপি জব শুরু করার জন্য ডিজাইন করা হয়েছে, যা ফাইলগুলিতে থাকা সংবেদনশীল ডেটার উপর ভিত্তি করে সেগুলিকে শ্রেণীবদ্ধ করে।
- প্রক্রিয়াটি বাস্তবে দেখতে আমরা পরীক্ষার ডেটা আপলোড করেছি এবং আমাদের ক্লাউড ফাংশনগুলোর স্ট্যাকড্রাইভার লগগুলো পরীক্ষা করে দেখেছি।