1. סקירה כללית
בארגון המודרני כיום יש כמות הולכת וגדלה של נתונים שמגיעים ממגוון מקורות. לרוב, לשם כך צריך להכניס את הנתונים להסגר ולסווג אותם כדי לאחסן אותם באופן אסטרטגי ולהגן עליהם. משימה שעלות העבודה שלה תהיה יקרה במהירות ויישארו בלתי אפשרית.
ב-Codelab הזה נראה איך אנחנו יכולים לסווג באופן אוטומטי נתונים שהועלו ל-Cloud Storage ולהעביר אותם לקטגוריית אחסון תואמת. ניתן להשיג זאת באמצעות Cloud Pub/Sub, Cloud Functions, מניעת אובדן נתונים בענן ו-Cloud Storage.
הפעולות שתבצעו:
- יצירת קטגוריות של Cloud Storage לשימוש כחלק מצינור עיבוד הנתונים להסגר ולסיווג.
- יוצרים פונקציה פשוטה של Cloud Functions שמפעילה את DLP API כשמעלים קבצים.
- יצירת נושא Pub/Sub ומינוי לקבלת התראה כשעיבוד הקובץ מסתיים.
- העלאת קבצים לדוגמה לקטגוריית ההסגר כדי להפעיל פונקציה של Cloud Functions
- אתם יכולים להשתמש ב-DLP API כדי לבדוק ולסווג את הקבצים ולהעביר אותם לקטגוריה המתאימה.
מה צריך להכין
- יצירת פרויקט ב-Google Cloud שמוגדר בו חיוב. אם אין לכם חשבון, תצטרכו ליצור חשבון.
2. בתהליך ההגדרה
במסגרת ה-Codelab הזה, נקצה וננהל משאבים ושירותים שונים של ענן באמצעות שורת הפקודה (CLI) של Cloud Shell. הפקודה הבאה תפתח את Cloud Shell יחד עם Cloud Shell Editor ותשכפל את מאגר הפרויקט הנלווה:
כדי לוודא שנעשה שימוש בפרויקט הנכון, צריך להגדיר אותו באמצעות הפקודה gcloud config set project [PROJECT_ID]
הפעלת ממשקי API
מפעילים את ממשקי ה-API הנדרשים בפרויקט שלכם ב-Google Cloud:
- Cloud Functions API – ניהול פונקציות פשוטות שהמשתמשים סיפקו, ומופעלות בתגובה לאירועים.
- Cloud Data Loss Prevention (DLP) API – מספק שיטות לזיהוי, לניתוח סיכונים ולהסרת פרטי הזיהוי של מקטעים שרגישים לפרטיות בטקסט, בתמונות ובמאגרי אחסון של Google Cloud Platform.
- Cloud Storage – Google Cloud Storage הוא שירות RESTful לאחסון נתונים ולגישה אליהם בתשתית של Google.
הרשאות לחשבונות שירות
חשבון שירות הוא סוג מיוחד של חשבון שמשמש אפליקציות ומכונות וירטואליות לביצוע קריאות מורשות ל-API.
חשבון שירות המוגדר כברירת מחדל ב-App Engine
חשבון השירות שמשמש כברירת המחדל של App Engine משמש לביצוע משימות בפרויקט Cloud בשם האפליקציות שפועלות ב-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, מאגר נתונים, pubsub ושירות ניהול מפתחות:
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
המינוי יקבל התראה כשיתפרסם הודעה בנושא. בואו ניצור מינוי pubsub בשם '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 Editor, משנים את הערך הראשי.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
אימות
מוודאים ששתי הפונקציות של Cloud Functions פרוסות בהצלחה באמצעות הפקודה 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 ובוחרים באפשרות 'הצגת יומנים':
ביומן שלנו עבור הפונקציה הזו רואים לפחות 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 שמסווגת קבצים לפי מידע אישי רגיש
- העלנו נתוני בדיקה ובדקנו את הפונקציות ב-Cloud Functions יומני Stackdriver כדי לראות את התהליך בפעולה