التصنيف المبرمَج للبيانات التي يتم تحميلها إلى Cloud Storage باستخدام واجهة برمجة التطبيقات DLP ووظائف السحابة الإلكترونية

1. نظرة عامة

في المؤسسة الحديثة، هناك كمية متزايدة باستمرار من البيانات الواردة من مجموعة متنوعة من المصادر. وغالبًا ما يتطلّب ذلك عزل هذه البيانات وتصنيفها من أجل تخزينها وحمايتها بشكل استراتيجي، وهي مهمة ستصبح مكلفة ومستحيلة بسرعة إذا بقيت يدوية.

في هذا الدرس التطبيقي حول الترميز، سنتعرّف على كيفية تصنيف البيانات التي يتم تحميلها إلى Cloud Storage تلقائيًا ونقلها إلى حزمة تخزين مناسبة. سنحقّق ذلك باستخدام Cloud Pub/Sub وCloud Functions وCloud Data Loss Prevention وCloud Storage.

الإجراءات التي ستنفذّها

  • أنشئ حِزم Cloud Storage لاستخدامها كجزء من مسار الحجر الصحي والتصنيف.
  • أنشئ دالة بسيطة في Cloud Functions تستدعي واجهة برمجة التطبيقات DLP API عند تحميل الملفات.
  • أنشئ موضوعًا واشتراكًا في Pub/Sub لإعلامك عند اكتمال معالجة الملف.
  • تحميل ملفات نموذجية إلى حزمة العزل لتفعيل Cloud Function
  • استخدِم واجهة برمجة التطبيقات لمنع فقدان البيانات لفحص الملفات وتصنيفها ونقلها إلى الحزمة المناسبة.

المتطلبات

  • مشروع على Google Cloud تم إعداد الفوترة له إذا لم يكن لديك حساب، عليك إنشاء حساب.

2. الإعداد

خلال هذا الدرس التطبيقي حول الترميز، سنوفّر خدمات وموارد سحابية مختلفة ونديرها باستخدام سطر الأوامر من خلال Cloud Shell. سيؤدي ذلك إلى فتح Cloud Shell مع "محرِّر Cloud Shell" واستنساخ مستودع مشروع التطبيق المصاحب:

تأكَّد من أنّك تستخدم المشروع الصحيح من خلال ضبطه باستخدام gcloud config set project [PROJECT_ID]

تفعيل واجهات برمجة التطبيقات

فعِّل واجهات برمجة التطبيقات المطلوبة في مشروعك على السحابة الإلكترونية على Google Cloud:

  • واجهة برمجة التطبيقات Cloud Functions: تدير الدوال الخفيفة التي يوفّرها المستخدمون ويتم تنفيذها استجابةً للأحداث.
  • واجهة برمجة تطبيقات منع فقدان البيانات (DLP) في Cloud: توفّر طرقًا لاكتشاف الأجزاء الحساسة المتعلقة بالخصوصية في النصوص والصور ومستودعات التخزين في Google Cloud Platform وتحليل المخاطر وإخفاء معلومات تحديد الهوية.
  • Cloud Storage - Google Cloud Storage هي خدمة مستنِدة إلى REST لتخزين بياناتك والوصول إليها على بنية Google الأساسية.

أذونات حسابات الخدمة

حساب الخدمة هو نوع خاص من الحسابات تستخدمه التطبيقات والأجهزة الافتراضية لإجراء طلبات بيانات معتمَدة من واجهة برمجة التطبيقات.

حساب الخدمة التلقائي في App Engine

يتم استخدام حساب الخدمة التلقائي في App Engine لتنفيذ المهام في مشروعك على السحابة الإلكترونية نيابةً عن تطبيقاتك التي تعمل في App Engine. يتوفّر حساب الخدمة هذا في مشروعك تلقائيًا مع تعيين دور "المحرِّر".

أولاً، سنمنح حساب الخدمة دور "مشرف منع فقدان البيانات" المطلوب لإدارة مهام منع فقدان البيانات:

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

وأخيرًا، امنح دور "وكيل خدمة واجهة برمجة التطبيقات لمنع فقدان البيانات" الذي سيسمح لحساب الخدمة بالحصول على أذونات BigQuery وCloud Storage وDatastore وPub/Sub وخدمة إدارة المفاتيح:

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

حساب خدمة "منع فقدان البيانات"

بالإضافة إلى حساب خدمة App Engine، سنستخدم أيضًا حساب خدمة "منع فقدان البيانات". تم إنشاء حساب الخدمة هذا تلقائيًا عند تفعيل واجهة برمجة التطبيقات DLP، ولم يتم منحه أي أدوار في البداية. لنمنحه دور المُشاهد:

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

سنحتاج الآن إلى إنشاء 3 حِزم على 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 Function الملفات إلى حِزمها المعنية بعد تنفيذ مهمة "منع فقدان البيانات".

لنبدأ أولاً بإنشاء موضوع. سيتم نشر رسالة هنا في كل مرة تتم فيها إضافة ملف إلى حزمة تخزين العزل. سنسمّيها classify-topic

gcloud pubsub topics create classify-topic

سيتم إشعار الاشتراك عند نشر موضوع لرسالة. لننشئ اشتراكًا في Pub/Sub باسم classify-sub:

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"، عدِّل ملف 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 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، وستنشئ مهمة "منع فقدان البيانات" لكل ملف تم تحميله:

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

بعد ذلك، ننشر الدالة resolve_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 للحالة عند نشرها بنجاح.

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

في سجلّ هذه الدالة، نرى 4 إدخالات على الأقل لكل ملف من ملفاتنا تشير إلى ما يلي:

  • بدأ تنفيذ الدالة
  • تم تشغيل الدالة لملف معيّن
  • تم إنشاء مهمة
  • انتهى تنفيذ الدالة

c864dff5a03c75a9.png

بعد اكتمال الدالة create_DLP_job لكل ملف، يتم بدء مهمة "منع فقدان البيانات" مقابلة. انتقِل إلى صفحة "مهام منع فقدان البيانات" للاطّلاع على قائمة بمهام منع فقدان البيانات في قائمة الانتظار:

ستظهر لك قائمة بالمهام في انتظار المراجعة أو قيد التنفيذ أو المكتملة. يتطابق كل منها مع أحد الملفات التي حمّلناها:

6af34e72ecb83faf.png

يمكنك النقر على رقم تعريف أي من هذه المهام للاطّلاع على مزيد من التفاصيل.

إذا رجعت إلى صفحة Cloud Functions واطّلعت على سجلّات الدالة resolve_DLP، سيظهر لك 8 إدخالات على الأقل لكل ملف، ما يشير إلى ما يلي:

  • بدأ تنفيذ الدالة
  • تم تلقّي إشعار بشأن النشر والاشتراك
  • اسم مهمة "منع فقدان البيانات" المقابلة
  • رمز الحالة
  • عدد مثيلات البيانات الحسّاسة (إن وُجدت)
  • الحزمة التي سيتم نقل الملف إليها
  • انتهت مهمة "منع فقدان البيانات" من تحليل الملف
  • انتهى تنفيذ الدالة

5025bd672cba90a0.png

بعد انتهاء جميع طلبات الدالة resolve_DLP، اطّلِع على محتوى حزمة العزل مرة أخرى:

gsutil ls gs://[YOUR_QUARANTINE_BUCKET]

في هذه المرة، يجب أن يكون فارغًا تمامًا. إذا نفّذت الأمر نفسه أعلاه للحِزم الأخرى، ستجد ملفاتنا مفصولة تمامًا في الحِزم المناسبة لها.

7. تنظيف

بعد أن تعرّفنا على كيفية استخدام DLP API مع Cloud Functions لتصنيف البيانات، لننظّف مشروعنا من جميع الموارد التي أنشأناها.

حذف المشروع

يمكنك حذف المشروع بأكمله إذا كنت تفضّل ذلك. في "وحدة تحكّم Google Cloud Platform"، انتقِل إلى صفحة Cloud Resource Manager:

في قائمة المشاريع، اختَر المشروع الذي كنا نعمل عليه وانقر على حذف. سيُطلب منك كتابة رقم تعريف المشروع. أدخِلها وانقر على إيقاف.

بدلاً من ذلك، يمكنك حذف المشروع بأكمله مباشرةً من Cloud Shell باستخدام gcloud:

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

احذف أولاً اشتراك pub/sub باستخدام gcloud:

gcloud pubsub subscriptions delete classify-sub

وأخيرًا، احذف موضوع النشر/الاشتراك باستخدام gcloud:

gcloud pubsub topics delete classify-topic

8. تهانينا!

رائع! أحسنت. لقد تعلّمت كيفية استخدام DLP API مع Cloud Functions لأتمتة عملية تصنيف الملفات.

المواضيع التي تناولناها

  • أنشأنا حِزم Cloud Storage لتخزين بياناتنا الحسّاسة وغير الحسّاسة.
  • أنشأنا موضوعًا واشتراكًا في Pub/Sub لتفعيل إحدى الدوال السحابية
  • أنشأنا Cloud Functions المصمَّمة لبدء مهمة منع فقدان البيانات التي تصنّف الملفات استنادًا إلى البيانات الحسّاسة الواردة فيها.
  • حمّلنا بيانات اختبار واطّلعنا على سجلات Stackdriver في Cloud Functions لمعرفة العملية أثناء تنفيذها.