1. סקירה כללית
בארגון המודרני, כמות הנתונים שמגיעה ממגוון מקורות הולכת וגדלה. לרוב, כדי לאחסן את הנתונים האלה בצורה אסטרטגית ולהגן עליהם, צריך להכניס אותם להסגר ולסווג אותם. אם התהליך הזה יישאר ידני, הוא יהפוך במהירות ליקר ולבלתי אפשרי.
ב-codelab הזה נראה איך אפשר לסווג באופן אוטומטי נתונים שמועלים ל-Cloud Storage ולהעביר אותם לקטגוריית אחסון מתאימה. נשתמש ב-Cloud Pub/Sub, ב-Cloud Functions, במניעת אובדן נתונים בענן וב-Cloud Storage.
הפעולות שתבצעו:
- יוצרים קטגוריות של Cloud Storage לשימוש כחלק מצינור ההסגר והסיווג.
- יוצרים פונקציה פשוטה ב-Cloud Functions שמפעילה את DLP API כשמעלים קבצים.
- יוצרים נושא Pub/Sub ומינוי כדי לקבל התראה כשהעיבוד של הקובץ מסתיים.
- העלאת קבצים לדוגמה לקטגוריית ההסגר כדי להפעיל Cloud Function
- משתמשים ב-DLP API כדי לבדוק ולסווג את הקבצים ולהעביר אותם לקטגוריה המתאימה.
מה תצטרכו
- פרויקט ב-Google Cloud שהוגדר בו חיוב. אם אין לכם חשבון, תצטרכו ליצור חשבון.
2. תהליך ההגדרה
במהלך ה-codelab הזה, נספק ונגידר משאבים ושירותים שונים בענן באמצעות שורת הפקודה דרך Cloud Shell. הפעולה הבאה תפתח את Cloud Shell יחד עם Cloud Shell Editor ותשכפל את מאגר הפרויקט הנלווה:
כדי לוודא שמשתמשים בפרויקט הנכון, מגדירים אותו באמצעות gcloud config set project [PROJECT_ID]
הפעלת ממשקי API
מפעילים את ממשקי ה-API הנדרשים בפרויקט בענן ב-Google Cloud:
- Cloud Functions API – מנהל פונקציות פשוטות שסופקו על ידי המשתמשים ומופעלות בתגובה לאירועים.
- מניעת אובדן נתונים בענן (DLP) API – מספק שיטות לזיהוי, לניתוח סיכונים ולהסרת פרטי הזיהוי של קטעי מידע רגישים לפרטיות בטקסט, בתמונות ובמאגרי אחסון של Google Cloud Platform.
- Cloud Storage – Google Cloud Storage הוא שירות RESTful לאחסון נתונים בתשתית של Google ולגישה אליהם.
הרשאות של חשבונות שירות
חשבון שירות הוא סוג מיוחד של חשבון שאפליקציות ומכונות וירטואליות משתמשות בו כדי לבצע קריאות מורשות ל-API.
חשבון השירות של App Engine שמוגדר כברירת מחדל
חשבון השירות שמוגדר כברירת מחדל ב-App Engine משמש להפעלת משימות בפרויקט בענן בשם האפליקציות שפועלות ב-App Engine. חשבון השירות הזה קיים בפרויקט שלכם כברירת מחדל עם תפקיד העריכה שהוקצה לו.
קודם כול, נקצה לחשבון השירות שלנו את התפקיד 'אדמין DLP' שנדרש לניהול משימות של מניעת אובדן נתונים:
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, ל-Pub/Sub ולשירות ניהול מפתחות (KMS):
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member serviceAccount:$GOOGLE_CLOUD_PROJECT@appspot.gserviceaccount.com \ --role roles/dlp.serviceAgent
חשבון שירות DLP
בנוסף לחשבון השירות של App Engine, נשתמש גם בחשבון שירות של DLP. חשבון השירות הזה נוצר אוטומטית כשהפעלתם את 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
עכשיו צריך ליצור 3 קטגוריות של Cloud Storage כדי לאחסן את הנתונים:
- מאגר ההסגר: הנתונים שלנו יועלו לכאן בהתחלה.
- מאגר מידע אישי רגיש: הנתונים ש-DLP API קבע שהם רגישים יועברו לכאן.
- מאגר נתונים שלא מכיל מידע אישי רגיש: הנתונים שנקבע על ידי DLP 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 Functions תעביר קבצים למאגרי המידע המתאימים שלהם אחרי הפעלת עבודת DLP.
קודם ניצור נושא. הודעה תפורסם כאן בכל פעם שקובץ יתווסף לדלי האחסון של ההסגר שלנו. נקרא לו classify-topic
gcloud pubsub topics create classify-topic
מינוי יקבל הודעה כשהנושא יפרסם הודעה. ניצור מינוי ל-Pub/Sub בשם classify-sub:
gcloud pubsub subscriptions create classify-sub --topic classify-topic
המינוי הזה יפעיל פונקציית Cloud Functions שנייה שתתחיל עבודת DLP שתבדוק את הקובץ ותעביר אותו למקום הנכון.
5. Cloud Functions
בעזרת Cloud Functions אנחנו יכולים לפרוס פונקציות קלות משקל, מבוססות-אירועים, אסינכרוניות וחד-מטרה, בלי צורך לנהל שרת או סביבת זמן ריצה. נפרוס 2 פונקציות של Cloud באמצעות הקובץ 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, והיא יוצרת עבודת DLP לכל קובץ שהועלה:
gcloud functions deploy create_DLP_job --runtime python37 \ --trigger-event google.storage.object.finalize \ --trigger-resource [YOUR_QUARANTINE_BUCKET]
בשלב הבא, פורסים את הפונקציה resolve_DLP ומציינים את הנושא שלנו כטריגר שלה. הפונקציה הזו מאזינה להתראה של pub/sub שהופעלה מעבודת ה-DLP הבאה מהפונקציה שלמעלה. ברגע שהיא מקבלת התראה מ-Pub/Sub, היא אוספת את התוצאות ממשימת ה-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
כדי לראות איך ההגדרה שלנו תתייחס לקבצים, נעלה את כל קובצי הבדיקה שלנו להסגר
bucket:
gsutil -m cp * gs://[YOUR_QUARANTINE_BUCKET]
בתחילה, הקבצים שלנו יישמרו בקטגוריית ההסגר שאליה העלינו אותם. כדי לוודא זאת, מיד אחרי העלאת הקבצים, מציגים את התוכן של דלי ההסגר:
gsutil ls gs://[YOUR_QUARANTINE_BUCKET]
כדי לבדוק את סדר האירועים שהתחלנו, עוברים לדף Cloud Functions:
לוחצים על תפריט הפעולות של הפונקציה create_DLP_job ובוחרים באפשרות View Logs (הצגת היומנים):

ביומן של הפונקציה הזו אנחנו רואים לפחות 4 רשומות לכל אחד מהקבצים שלנו, שמציינות:
- הפעלת הפונקציה התחילה
- הפונקציה הופעלה עבור קובץ מסוים
- נוצרה משימה
- הפונקציה סיימה את ההרצה

אחרי שהפונקציה create_DLP_job מסתיימת עבור כל קובץ, מתחיל תהליך DLP תואם. עוברים לדף 'עבודות DLP' כדי לראות רשימה של עבודות DLP בתור:
תוצג רשימה של משימות בהמתנה, משימות שפועלות או משימות שהסתיימו. כל אחד מהם מתאים לאחד מהקבצים שהעלינו:

כדי לראות פרטים נוספים, אפשר ללחוץ על המזהה של כל אחת מהמשימות האלה.
אם תחזרו לדף Cloud Functions ותבדקו את היומנים של הפונקציה resolve_DLP, תראו לפחות 8 רשומות לכל קובץ, שמציינות:
- הפעלת הפונקציה התחילה
- התקבלה התראת Pub/Sub
- השם של עבודת ה-DLP המתאימה
- קוד סטטוס
- מספר המקרים של מידע אישי רגיש (אם יש כאלה)
- הקטגוריה שאליה הקובץ יועבר
- הניתוח של הקובץ על ידי פעולת ה-DLP הסתיים
- הפונקציה סיימה את ההרצה

אחרי שכל הקריאות לפונקציה resolve_DLP מסתיימות, בודקים שוב את התוכן של מאגר ההסגר:
gsutil ls gs://[YOUR_QUARANTINE_BUCKET]
הפעם, הוא צריך להיות ריק לגמרי. אם תריצו את אותה הפקודה שלמעלה עבור שאר הדליים, תגלו שהקבצים שלנו מופרדים בצורה מושלמת לדליים המתאימים!
7. הסרת המשאבים
אחרי שראינו איך להשתמש ב-DLP API בשילוב עם Cloud Functions כדי לסווג נתונים, ננקה את הפרויקט מכל המשאבים שיצרנו.
מחיקת הפרויקט
אם תרצו, תוכלו למחוק את כל הפרויקט. במסוף GCP, נכנסים לדף Cloud Resource Manager:
ברשימת הפרויקטים, בוחרים את הפרויקט שעליו עבדנו ולוחצים על מחיקה. תתבקשו להקליד את מזהה הפרויקט. מזינים את הסיסמה ולוחצים על כיבוי.
אפשר גם למחוק את כל הפרויקט ישירות מ-Cloud Shell באמצעות gcloud:
gcloud projects delete [PROJECT_ID]
אם אתם מעדיפים למחוק את הרכיבים השונים אחד אחרי השני, אפשר לעבור לקטע הבא.
Cloud Functions
מוחקים את שתי הפונקציות של 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
לבסוף, מוחקים את נושא ה-Pub/Sub באמצעות gcloud:
gcloud pubsub topics delete classify-topic
8. מעולה!
יש! הצלחת. למדתם איך להשתמש ב-DLP API יחד עם Cloud Functions כדי לבצע אוטומציה של סיווג קבצים.
מה נכלל
- יצרנו קטגוריות של Cloud Storage כדי לאחסן את הנתונים הרגישים והלא רגישים שלנו
- יצרנו נושא ומינוי ב-Pub/Sub כדי להפעיל פונקציה ב-Cloud Functions
- יצרנו את Cloud Functions כדי להפעיל משימת DLP שמסווגת קבצים על סמך מידע אישי רגיש שכלול בהם
- העלינו נתוני בדיקה ובדקנו את היומנים של Stackdriver ב-Cloud Functions כדי לראות את התהליך בפעולה.