1. نظرة عامة
في التنظيم الحديث، هناك كمية يتزايد باستمرار من البيانات الواردة من مجموعة متنوعة من المصادر. يتطلب هذا غالبًا عزل وتصنيف تلك البيانات من أجل تخزينها وحمايتها بشكل استراتيجي - وهي مهمة ستصبح مكلفة ومستحيلة بسرعة إذا بقيت يدوية.
في هذا الدرس التطبيقي حول الترميز، سنرى كيف يمكننا تلقائيًا تصنيف البيانات التي يتم تحميلها إلى Cloud Storage ونقلها إلى حزمة تخزين مناسبة. وسيتم تحقيق ذلك باستخدام Cloud Pub/Sub، ووظائف Cloud، ومنع فقدان البيانات من Cloud، وCloud Storage.
الإجراءات التي ستنفذّها
- يمكنك إنشاء حِزم Cloud Storage لاستخدامها كجزء من وحدة العزل ومسار التصنيف.
- إنشاء دالة سحابية بسيطة تستدعي واجهة برمجة تطبيقات منع فقدان البيانات عند تحميل الملفات
- يمكنك إنشاء موضوع النشر/الاشتراك وإرسال إشعار إليك عند اكتمال معالجة الملف.
- تحميل نماذج الملفات إلى حزمة وحدة العزل لاستدعاء دالة Cloud
- استخدِم واجهة برمجة التطبيقات DLP API لفحص الملفات وتصنيفها ونقلها إلى الحزمة المناسبة.
المتطلبات
- مشروع على Google Cloud تم إعداد الفوترة فيه وإذا لم يكن لديك حساب، عليك إنشاء حساب.
2. بدء الإعداد
خلال هذا الدرس التطبيقي، سنعمل على توفير الخدمات والموارد المختلفة للسحابة الإلكترونية وإدارتها باستخدام سطر الأوامر عبر Cloud Shell. سيؤدي ما يلي إلى فتح Cloud Shell إلى جانب "محرِّر Cloud Shell" ونسخ مستودع المشروع المصاحب:
تأكَّد من استخدام المشروع الصحيح من خلال ضبطه باستخدام gcloud config set project [PROJECT_ID]
.
تفعيل واجهات برمجة التطبيقات
فعِّل واجهات برمجة التطبيقات المطلوبة في مشروعك على Google Cloud:
- Cloud Functions API: تدير الوظائف البسيطة التي يوفّرها المستخدمون ويتم تنفيذها استجابةً للأحداث.
- واجهة برمجة تطبيقات منع فقدان البيانات (DLP) في السحابة الإلكترونية: توفّر طرقًا لرصد الأجزاء الحسّاسة للخصوصية في النصوص والصور ومستودعات تخزين Google Cloud Platform وتحليلها، وحذف معلومات تحديد الهوية فيها.
- التخزين في السحابة الإلكترونية: خدمة Google Cloud Storage هي خدمة مريحة لتخزين بياناتك والوصول إليها على بنية Google الأساسية.
أذونات حسابات الخدمة
حساب الخدمة هو نوع خاص من الحسابات تستخدمه التطبيقات والأجهزة الافتراضية لإجراء طلبات بيانات معتمَدة من واجهة برمجة التطبيقات.
حساب الخدمة التلقائي لـ App Engine
يتم استخدام حساب خدمة App Engine التلقائي لتنفيذ المهام في مشروعك على Google 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- حِزم التخزين في السحابة الإلكترونية
سنحتاج الآن إلى إنشاء 3 حِزم Cloud Storage لتخزين بياناتنا:
- حزمة العزل: سيتم في البداية تحميل بياناتنا هنا.
- حزمة البيانات الحسّاسة: سيتم نقل البيانات التي تحدِّدها واجهة برمجة التطبيقات لمنع فقدان البيانات إلى هنا.
- حزمة بيانات غير حساسة: سيتم نقل البيانات التي تحددها واجهة برمجة تطبيقات منع فقدان البيانات إلى هنا
يمكننا استخدام الأمر gsutil لإنشاء جميع المجموعات الثلاث الخاصة بنا في دفعة واحدة:
gsutil mb gs://[YOUR_QUARANTINE_BUCKET] \ gs://[YOUR_SENSITIVE_DATA_BUCKET] \ gs://[YOUR_NON_SENSITIVE_DATA_BUCKET]
قم بتدوين أسماء الحزم التي أنشأتها للتو، سنحتاج إليها لاحقًا.
4. الاشتراك وموضوع النشر/الاشتراك
توفّر خدمة Cloud Pub/Sub رسائل غير متزامنة متعددة بين التطبيقات. سيُنشئ الناشر رسالة وينشرها في خلاصة رسائل تسمى موضوع. سيتلقّى المشترك هذه الرسائل عبر اشتراك. وبناءً على هذا الاشتراك، في حالتنا، سيكون لدينا ميزة Cloud Function لنقل الملفات إلى الحِزم الخاصة بها بعد تنفيذ مهمة "منع فقدان البيانات".
أولاً، لننشئ موضوعًا. سيتم نشر رسالة هنا في كل مرة تتم فيها إضافة ملف إلى حزمة التخزين في وحدة العزل. سنسميه "تصنيف الموضوع"
gcloud pubsub topics create classify-topic
سيتم إرسال إشعار إلى اشتراك عندما يتم نشر رسالة في الموضوع. لننشئ اشتراك pubsub باسم "classify-sub":
gcloud pubsub subscriptions create classify-sub --topic classify-topic
سيؤدي هذا الاشتراك إلى تشغيل وظيفة السحابة الإلكترونية الثانية التي ستبدأ مهمة "منع فقدان البيانات" التي ستفحص الملف وتنقله إلى مكانه الصحيح.
5- وظائف السحابة الإلكترونية
تتيح لنا وظائف السحابة الإلكترونية نشر وظائف بسيطة غير متزامنة لغرض واحد ومستندة إلى الأحداث وبدون الحاجة إلى إدارة خادم أو بيئة تشغيل. سننشر دالتَين في السحابة الإلكترونية باستخدام ملف 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 بالموضوع 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، وستنشئ مهمة "منع فقدان البيانات" لكل ملف يتم تحميله:
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]
للاطّلاع على سلسلة الأحداث التي بدأناها، ابدأ بالانتقال إلى صفحة "وظائف السحابة الإلكترونية":
انقر على قائمة "الإجراءات" للدالة create_DLP_job، واختَر "عرض السجلات":
في سجلنا لهذه الدالة، نرى 4 إدخالات على الأقل لكل ملف من ملفاتنا تشير إلى:
- بدأ تنفيذ الدالة.
- تم تشغيل الدالة لملف معيّن
- تم إنشاء وظيفة.
- اكتمل تنفيذ الدالة
بعد اكتمال الدالة create_DLP_job لكل ملف، يتم بدء مهمة منع فقدان بيانات مقابلة. انتقِل إلى صفحة مهام "منع فقدان البيانات" للاطّلاع على قائمة بمهام "منع فقدان البيانات" في قائمة الانتظار:
ستظهر لك قائمة بالمهام "في انتظار المراجعة" أو "قيد التشغيل" أو "منجزة". يتوافق كل ملف منها مع أحد الملفات التي حمّلناها:
يمكنك النقر على رقم تعريف أي من هذه المهام للاطّلاع على مزيد من التفاصيل.
في حال الرجوع إلى صفحة "وظائف السحابة الإلكترونية" والاطّلاع على سجلات الخروج لوظيفة انتهاء_منع فقدان البيانات، سيظهر لك 8 إدخالات على الأقل لكل ملف، والتي تشير إلى ما يلي:
- بدأ تنفيذ الدالة.
- تم تلقّي إشعار ناشر/مشترك
- اسم مهمة منع فقدان البيانات المقابلة
- رمز الحالة
- عدد نُسخ البيانات الحسّاسة (إن وُجدت)
- الحزمة التي سيتم نقل الملف إليها
- انتهت مهمة "منع فقدان البيانات" من تحليل الملف
- اكتمل تنفيذ الدالة
بعد الانتهاء من تنفيذ جميع الطلبات إلى دالة Spam_DLP، يمكنك مراجعة محتوى حزمة وحدة العزل مرة أخرى:
gsutil ls gs://[YOUR_QUARANTINE_BUCKET]
هذه المرة، من المفترض أن يكون فارغًا تمامًا. إذا شغّلت نفس الأمر أعلاه للمجموعات الأخرى، فستجد ملفاتنا منفصلة بشكل مثالي في الحزم الخاصة بها!
7. تنظيف
والآن بعد أن تعرفنا على كيفية استخدام واجهة برمجة تطبيقات منع فقدان البيانات مع دوال Cloud لتصنيف البيانات، لنبدأ تنظيم المشروع من جميع الموارد التي أنشأناها.
حذف المشروع
يمكنك حذف المشروع بأكمله، إذا كنت تفضّل ذلك. في وحدة تحكّم Google Cloud Platform، انتقِل إلى صفحة Cloud Resource Manager:
في قائمة المشاريع، اختَر المشروع الذي بدأنا العمل فيه وانقر على حذف. سيُطلب منك كتابة رقم تعريف المشروع. أدخِله وانقر على إيقاف التشغيل.
بدلاً من ذلك، يمكنك حذف المشروع بأكمله مباشرةً من Cloud Shell باستخدام 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]
نشر/اشتراك
أولاً، احذف اشتراك pub/sub باستخدام gcloud:
gcloud pubsub subscriptions delete classify-sub
وأخيرًا، احذف موضوع pub/sub باستخدام gcloud:
gcloud pubsub topics delete classify-topic
8. تهانينا!
رائع! لقد فعلتها. لقد تعرفت على كيفية استخدام واجهة برمجة تطبيقات منع فقدان البيانات إلى جانب دوال Cloud لتصنيف الملفات بشكل آلي.
المواضيع التي تناولناها
- لقد أنشأنا حِزم Cloud Storage لتخزين البيانات الحسّاسة وغير الحسّاسة.
- أنشأنا موضوع النشر/الاشتراك والاشتراك لتشغيل دالة سحابية
- لقد أنشأنا وظائف Cloud المصمّمة لبدء مهمة منع فقدان البيانات التي تصنِّف الملفات بناءً على البيانات الحسّاسة المضمَّنة فيها.
- حمّلنا بيانات الاختبار واطّلعنا على Cloud Functions. سجلّات Stackdriver للاطّلاع على العملية أثناء تنفيذها