בדיקת נתונים ממקורות חיצוניים באמצעות משימות היברידיות

בנושא הזה מוסבר איך להשתמש במשימות היברידיות ובטריגרים של משימות היברידיות כדי לבדוק נתונים חיצוניים ולחפש בהם מידע רגיש. מידע נוסף על משרות היברידיות וטריגרים למשרות היברידיות, כולל דוגמאות לסביבות היברידיות, זמין במאמר משרות היברידיות וטריגרים למשרות היברידיות.

מבוא למשרות היברידיות ולטריגרים של משרות היברידיות

משימות היברידיות וטריגרים של משימות היברידיות מאפשרים להרחיב את היקף ההגנה שמוצעת על ידי 'הגנה על נתונים רגישים' מעבר לבקשות פשוטות לבדיקת תוכן וGoogle Cloud לסריקת מאגרי אחסון. באמצעות משימות היברידיות וטריגרים של משימות היברידיות, אפשר להזרים נתונים כמעט מכל מקור – כולל מחוץ ל- Google Cloud– ישירות אל Sensitive Data Protection, ולאפשר ל-Sensitive Data Protection לבדוק את הנתונים כדי למצוא מידע אישי רגיש. הכלי Sensitive Data Protection שומר ומצטבר באופן אוטומטי את תוצאות הסריקה לצורך ניתוח נוסף.

השוואה בין משימות היברידיות לבין טריגרים של משימות היברידיות

כשיוצרים משרות היברידיות, הן פועלות עד שמפסיקים אותן. הם מקבלים את כל הנתונים הנכנסים כל עוד הנתונים מועברים ומעוצבים בצורה נכונה.

טריגרים של משרות היברידיות פועלים באופן דומה למשרות היברידיות, אבל לא צריך להפסיק משרה באופן מפורש בטריגר של משרה היברידית. ההגנה על מידע אישי רגיש מפסיקה באופן אוטומטי את המשימות בטריגרים של משימות היברידיות בסוף כל יום.

בנוסף, באמצעות טריגר היברידי של משימות, אפשר להפסיק ולהתחיל משימות חדשות בתוך הטריגר בלי שתצטרכו להגדיר מחדש את בקשות hybridInspect. לדוגמה, אפשר לשלוח נתונים לטריגר של משימה היברידית, ואז להפסיק את המשימה הפעילה, לשנות את ההגדרה שלה, להפעיל משימה חדשה בטריגר הזה ולהמשיך לשלוח נתונים לאותו טריגר.

בקטע תרחישים אופייניים לבדיקה היברידית בדף הזה מפורטות הנחיות נוספות לגבי האפשרות המתאימה לתרחיש השימוש שלכם.

הגדרות של מונחים

בנושא הזה נעשה שימוש במונחים הבאים:

  • נתונים חיצוניים: נתונים שמאוחסנים מחוץ ל- Google Cloud או נתונים ש-Sensitive Data Protection לא תומך בהם באופן מובנה.

  • משימת היברידית: משימת בדיקה שמוגדרת לסריקת נתונים כמעט מכל מקור.

  • הפעלת משימה היברידית: הפעלת משימה שמוגדרת לסריקת נתונים כמעט מכל מקור.

  • hybridInspect request: בקשה שמכילה את הנתונים החיצוניים שרוצים לבדוק. כששולחים את הבקשה הזו, מציינים את העבודה ההיברידית או את הטריגר של העבודה ההיברידית שאליהם רוצים לשלוח את הבקשה.

מידע כללי על משימות וטריגרים של משימות זמין במאמר משימות וטריגרים של משימות.

תהליך בדיקה היברידי

תהליך הבדיקה ההיברידי כולל שלושה שלבים.

  1. בוחרים את הנתונים שרוצים לשלוח אל Sensitive Data Protection.

    הנתונים יכולים להגיע מתוך Google Cloud או מחוץ למערכת. לדוגמה, אתם יכולים להגדיר סקריפט או אפליקציה בהתאמה אישית כדי לשלוח נתונים ל-Sensitive Data Protection, וכך לבדוק נתונים בזמן ההעברה משירות ענן אחר, ממאגר נתונים מקומי או כמעט מכל מקור נתונים אחר.

  2. להגדיר משימה היברידית או טריגר למשימה היברידית ב-Sensitive Data Protection מאפס או באמצעות תבנית בדיקה.

    אחרי שמגדירים עבודה היברידית או טריגר לעבודה היברידית, Sensitive Data Protection מאזין באופן פעיל לנתונים שנשלחים אליו. כשסקריפט או אפליקציה בהתאמה אישית שולחים נתונים למשימה היברידית או להפעלת משימה היברידית, הנתונים נבדקים והתוצאות נשמרות בהתאם להגדרה.

    כשמגדירים את המשרה ההיברידית או את הטריגר למשרה היברידית, אפשר לציין איפה רוצים לשמור או לפרסם את הממצאים. האפשרויות כוללות שמירה ב-BigQuery ופרסום התראות ב-Pub/Sub, ב-Cloud Monitoring או באימייל.

  3. שולחים hybridInspectבקשה למשרה היברידית או לטריגר של משרה היברידית.

    בקשת hybridInspect מכילה את הנתונים שצריך לסרוק. בבקשה, צריך לכלול מטא-נתונים (שנקראים גם תוויות ומזהי טבלה) שמתארים את התוכן ומאפשרים לשירות Sensitive Data Protection לזהות את המידע שרוצים לעקוב אחריו. לדוגמה, אם סורקים נתונים קשורים בכמה בקשות (כמו שורות באותה טבלה במסד נתונים), אפשר להשתמש באותם מטא-נתונים בבקשות הקשורות האלה. לאחר מכן תוכלו לאסוף, לסכם ולנתח את הממצאים של טבלת מסד הנתונים הזו.

במהלך ההרצה של העבודה ההיברידית ובדיקת הבקשות, תוצאות הבדיקה זמינות כש-Sensitive Data Protection יוצר אותן. לעומת זאת, פעולות כמו התראות Pub/Sub מתרחשות רק אחרי שהאפליקציה מסיימת את העבודה ההיברידית.

תרשים שמתאר את תהליך הבדיקה של משרות היברידיות

לתשומת ליבכם

כשעובדים עם משרות היברידיות וטריגרים של משרות, כדאי להתחשב בנקודות הבאות:

  • אי אפשר לסנן ולדגום משרות היברידיות וטריגרים של משרות היברידיות.
  • משימות וטריגרים של משימות לא כפופים ליעדים למדידת רמת השירות (SLO), אבל יש צעדים שאפשר לנקוט כדי לצמצם את זמן האחזור. מידע נוסף זמין במאמר בנושא זמן האחזור של עבודות.

לפני שמתחילים

לפני שמגדירים ומשתמשים במשרות היברידיות או בטריגרים של משרות היברידיות, חשוב לוודא שביצעתם את הפעולות הבאות:

יצירת פרויקט חדש, הפעלת החיוב והפעלת Sensitive Data Protection

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. מפעילים את Sensitive Data Protection API.

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    להפעלת ה-API

הגדרת מקור הנתונים

כדי ש-Sensitive Data Protection יוכל לבדוק את הנתונים, צריך לשלוח אותם ל-Sensitive Data Protection. לא משנה באיזו שיטה תשתמשו כדי להגדיר את העבודה ההיברידית או את הטריגר של העבודה ההיברידית, אתם צריכים להגדיר את המקור החיצוני כך שישלח נתונים ל-DLP API.

מידע על הפורמט הנדרש לבקשות בדיקה היברידיות מופיע במאמר בנושא פורמט של פריטי תוכן היברידיים. במאמר סוגי המטא-נתונים שאפשר לספק מוסבר אילו סוגי מטא-נתונים אפשר לכלול בבקשה.

יצירת משימה היברידית או טריגר למשימה היברידית

כדי שהכלי להגנה על מידע רגיש יוכל לבדוק את הנתונים שאתם שולחים אליו, אתם צריכים קודם להגדיר משימה היברידית או טריגר למשימה היברידית. בקטע תרחישים אופייניים של בדיקה היברידית בדף הזה מוסבר איזה סוג של בדיקה כדאי ליצור.

המסוף

נכנסים לדף Create job or job trigger במסוף Google Cloud :

מעבר אל יצירת משימה או טריגר למשימה

בקטעים הבאים מוסבר איך למלא את החלקים בדף יצירת משימה או הפעלת משימה שרלוונטיים לפעולות בדיקה היברידיות.

בחירת נתוני קלט

בקטע הזה מציינים את נתוני הקלט ש-Sensitive Data Protection יבדוק.

  1. אופציונלי: בשדה שם, מזינים ערך בשדה מזהה המשימה כדי לתת שם למשימה. אם משאירים את השדה הזה ריק, Sensitive Data Protection יוצר מזהה באופן אוטומטי.
  2. אופציונלי: בתפריט Resource location (מיקום המשאב), בוחרים את האזור שבו רוצים לאחסן את המשרה ההיברידית או את הטריגר של המשרה ההיברידית. מידע נוסף זמין במאמר בנושא ציון מיקומי עיבוד.
  3. בקטע Storage type, בוחרים באפשרות Hybrid.

  4. אופציונלי: בשדה תיאור, מתארים את המשרה ההיברידית או את הטריגר למשרה היברידית שיוצרים. לדוגמה, אפשר לכלול מידע על המקור של הנתונים שרוצים לבדוק.

  5. אופציונלי: בקטע תוויות חובה, לוחצים על הוספת תווית ומזינים תווית שרוצים לדרוש מבקשות hybridInspect. בקשה של hybridInspect שלא מצוין בה התווית הזו לא תעובד על ידי העבודה ההיברידית הזו או הטריגר של העבודה ההיברידית. אפשר להוסיף עד 10 תוויות חובה. מידע נוסף זמין בקטע דרישת תוויות מבקשות של hybridInspect שבדף הזה.

  6. אופציונלי: בתוויות אופציונליות, מזינים צמדי מפתח/ערך שרוצים לצרף לתוצאות של כל בקשות hybridInspect שנשלחות לעיבוד המשימה או להפעלת המשימה. אפשר להוסיף עד 10 תוויות אופציונליות. מידע נוסף זמין במאמר בנושא תוויות אופציונליות.

  7. אופציונלי: באפשרויות של נתונים טבלאיים, מזינים את שם השדה של עמודת המפתח הראשי אם מתכננים לשלוח נתונים טבלאיים בבקשות hybridInspect. מידע נוסף מופיע במאמר בנושא אפשרויות לנתונים טבלאיים.

  8. לוחצים על Continue.

הגדרת זיהוי

בקטע הזה מציינים את סוגי המידע האישי הרגיש ש-Sensitive Data Protection יבדוק בנתוני הקלט. אלה האפשרויות:

  • תבנית: אם כבר יצרתם תבנית בפרויקט הנוכחי שבה אתם רוצים להשתמש כדי להגדיר את הפרמטרים של זיהוי Sensitive Data Protection, לוחצים על השדה שם התבנית ואז בוחרים את התבנית מהרשימה שמופיעה.
  • InfoTypes: מערכת Sensitive Data Protection בוחרת את ה-InfoTypes המובנים הנפוצים ביותר לגילוי. כדי לשנות את סוגי המידע או לבחור סוג מידע מותאם אישית לשימוש, לוחצים על ניהול סוגי מידע. אפשר גם לשנות את הקריטריונים לזיהוי בקטעים Inspection rulesets (ערכות כללים לבדיקה) ו-Confidence threshold (סף מהימנות). פרטים נוספים מופיעים במאמר הגדרת זיהוי.

אחרי שמגדירים את פרמטרים הזיהוי, לוחצים על המשך.

הוספת פעולות

בקטע Add actions (הוספת פעולות), בוחרים פעולה אחת או יותר שרוצים שמערכת Sensitive Data Protection תבצע אחרי שהעבודה תסתיים. מידע נוסף זמין במאמר בנושא הפעלת פעולות של בדיקה או ניתוח סיכונים.

אחרי שבוחרים פעולות, לוחצים על המשך.

לוח זמנים

בקטע הזה מציינים אם ליצור משימה יחידה שתופעל באופן מיידי או טריגר למשימה שתופעל בכל פעם שמתקבלים נתונים שמועברים ומעוצבים בצורה נכונה על ידי Sensitive Data Protection.

מבצעים אחת מהפעולות הבאות:

  • כדי להריץ את העבודה ההיברידית באופן מיידי, בוחרים באפשרות ללא (הפעלת העבודה החד-פעמית באופן מיידי לאחר היצירה).

  • כדי להגדיר את העבודה כך שהנתונים שמתקבלים מהמקור יפעילו את העבודה, בוחרים באפשרות יצירת טריגר להפעלת העבודה לפי לוח זמנים מחזורי.

    טריגרים של משרות היברידיות צוברים קריאות ל-API, וכך מאפשרים לכם לראות את תוצאות החיפוש ואת המגמות לאורך זמן.

מידע נוסף זמין במאמר בנושא השוואה בין משימות היברידיות לבין טריגרים של משימות היברידיות.

בדיקה

כאן אפשר לעיין בסיכום של הסריקה בפורמט JSON. חשוב לשים לב לשם של ה-OB ההיברידי או הטריגר ההיברידי של המשרה, כי תצטרכו את המידע הזה כששולחים נתונים לבדיקה ב-Sensitive Data Protection.

אחרי שבודקים את סיכום ה-JSON, לוחצים על יצירה.

השירות Sensitive Data Protection מתחיל את העבודה ההיברידית או את ההפעלה של העבודה ההיברידית באופן מיידי. סריקת בדיקה מתחילה כששולחים בקשה hybridInspect למשימה היברידית או לטריגר של משימה היברידית.

API

משימה מיוצגת ב-DLP API על ידי מקור המידע DlpJobs. כדי ליצור משרה היברידית, צריך לבצע קריאה ל-method‏ projects.locations.dlpJobs.create.

טריגר של עבודת DLP מיוצג ב-DLP API על ידי המשאב JobTrigger. כדי ליצור טריגר למשרה היברידית, מבצעים קריאה ל-method‏ projects.locations.jobTriggers.create.

לאובייקט DlpJobs או JobTrigger שיוצרים צריכות להיות ההגדרות הבאות:

  1. בשדה inspectJob, מגדירים אובייקט InspectJobConfig.
  2. באובייקט InspectJobConfig, בשדה storageConfig, מגדירים אובייקט StorageConfig.
  3. באובייקט StorageConfig, בשדה hybridOptions, מגדירים אובייקט HybridOptions. האובייקט הזה מכיל מטא-נתונים על הנתונים שרוצים לבדוק.
  4. באובייקט InspectJobConfig, בשדה actions, מוסיפים את הפעולות (Action) שרוצים ש-Sensitive Data Protection יבצע בסוף כל עבודה.

    הפעולות publishSummaryToCscc ו-publishFindingsToCloudDataCatalog לא נתמכות בפעולה הזו. מידע נוסף על פעולות זמין במאמר בנושא פעולות.

  5. מציינים מה לחפש ואיך לסרוק. לשם כך, מבצעים אחת מהפעולות הבאות או את שתיהן:

    • אם יש תבנית בדיקה שרוצים להשתמש בה, מגדירים את השדה inspectTemplateName לשם המלא של המשאב.

    • מגדירים את השדה inspectConfig.

    אם מגדירים את שני השדות inspectTemplateName ו-inspectConfig, ההגדרות שלהם משולבות.

מידע על דוגמאות ל-JSON

בכרטיסיות הבאות יש דוגמאות ל-JSON שאפשר לשלוח ל-Sensitive Data Protection כדי ליצור עבודת עיבוד היברידית או טריגר לעבודת עיבוד היברידית. הדוגמאות הבאות של משרות היברידיות וטריגרים למשרות היברידיות מוגדרות כך:

  • עיבוד כל בקשה של hybridInspect אם הבקשה כוללת את התווית appointment-bookings-comments.
  • סורקים את התוכן בבקשה hybridInspect לאיתור כתובות אימייל.
  • מצרפים את התווית "env": "prod" לממצאים.
  • לגבי נתונים בטבלה, מקבלים את הערך של התא בעמודה booking_id (המפתח הראשי) שנמצא באותה שורה כמו התא שבו נמצאו המידע האישי הרגיש. כדי שתוכלו לעקוב אחרי הממצא עד לשורה הספציפית שממנה הוא הגיע, Sensitive Data Protection מצרף את המזהה הזה לממצא.
  • שליחת אימייל כשהעבודה מסתיימת. האימייל נשלח לבעלי פרויקטים ב-IAM ולאנשי קשר חיוניים טכניים.
  • שליחת הממצאים אל Cloud Monitoring כשהמשימה מופסקת.

דוגמאות ל-JSON מופיעות בכרטיסיות הבאות.

משרה היברידית

בכרטיסייה הזו יש דוגמה ל-JSON שאפשר להשתמש בה כדי ליצור משרה היברידית.

כדי ליצור משרה היברידית, שולחים בקשת POST לנקודת הקצה הבאה.

ה-method של ה-HTTP וכתובת ה-URL

POST https://dlp.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/dlpJobs

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט שבו רוצים לאחסן את המשרה ההיברידית.
  • REGION: האזור הגיאוגרפי שבו רוצים לאחסן את המשרה ההיברידית.

קלט JSON

{
  "jobId": "postgresql-table-comments",
  "inspectJob": {
    "actions": [
      {
        "jobNotificationEmails": {}
      },
      {
        "publishToStackdriver": {}
      }
    ],
    "inspectConfig": {
      "infoTypes": [
        {
          "name": "EMAIL_ADDRESS"
        }
      ],
      "minLikelihood": "POSSIBLE",
      "includeQuote": true
    },
    "storageConfig": {
      "hybridOptions": {
        "description": "Hybrid job for data from the comments field of a table that contains customer appointment bookings",
        "requiredFindingLabelKeys": [
          "appointment-bookings-comments"
        ],
        "labels": {
          "env": "prod"
        },
        "tableOptions": {
          "identifyingFields": [
            {
              "name": "booking_id"
            }
          ]
        }
      }
    }
  }
}

פלט מסוג JSON

{
"name": "projects/PROJECT_ID/locations/REGION/dlpJobs/i-postgresql-table-comments",
"type": "INSPECT_JOB",
"state": "ACTIVE",
"inspectDetails": {
  "requestedOptions": {
    "snapshotInspectTemplate": {},
    "jobConfig": {
      "storageConfig": {
        "hybridOptions": {
          "description": "Hybrid job for data from the comments field of a table that contains customer appointment bookings",
          "requiredFindingLabelKeys": [
            "appointment-bookings-comments"
          ],
          "labels": {
            "env": "prod"
          },
          "tableOptions": {
            "identifyingFields": [
              {
                "name": "booking_id"
              }
            ]
          }
        }
      },
      "inspectConfig": {
        "infoTypes": [
          {
            "name": "EMAIL_ADDRESS"
          }
        ],
        "minLikelihood": "POSSIBLE",
        "limits": {},
        "includeQuote": true
      },
      "actions": [
        {
          "jobNotificationEmails": {}
        },
        {
          "publishToStackdriver": {}
        }
      ]
    }
  },
  "result": {
    "hybridStats": {}
  }
},
"createTime": "JOB_CREATION_DATETIME",
"startTime": "JOB_START_DATETIME"
}

‫Sensitive Data Protection יוצר את המשימה ההיברידית ומפיק מזהה משימה. בדוגמה הזו, מזהה המשרה הוא i-postgresql-table-comments. חשוב לשמור את מזהה המשרה. צריך לכלול אותו בבקשת hybridInspect.

כדי להפסיק עבודה היברידית, צריך לבצע קריאה ל-method‏ projects.locations.dlpJobs.finish באופן ידני. ה-DLP API לא מפסיק באופן אוטומטי עבודות היברידיות. לעומת זאת, ה-DLP API מפסיק באופן אוטומטי את המשימות בטריגרים של משימות היברידיות בסוף כל יום.

טריגר למשרה היברידית

בכרטיסייה הזו מופיעה דוגמה ל-JSON שאפשר להשתמש בה כדי ליצור טריגר של עבודה היברידית.

כדי ליצור טריגר היברידי למשרה, שולחים בקשת POST לנקודת הקצה הבאה.

ה-method של ה-HTTP וכתובת ה-URL

POST https://dlp.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/jobTriggers

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט שבו רוצים לאחסן את טריגר העבודה ההיברידית.
  • REGION: האזור הגיאוגרפי שבו רוצים לאחסן את הטריגר של המשרה ההיברידית.

קלט JSON

{
    "triggerId": "postgresql-table-comments",
    "jobTrigger": {
      "triggers": [
        {
          "manual": {}
        }
      ],
      "inspectJob": {
        "actions": [
          {
            "jobNotificationEmails": {}
          },
          {
            "publishToStackdriver": {}
          }
        ],
        "inspectConfig": {
          "infoTypes": [
              {
                "name": "EMAIL_ADDRESS"
              }
          ],
          "minLikelihood": "POSSIBLE",
          "limits": {},
          "includeQuote": true
        },
        "storageConfig": {
          "hybridOptions": {
            "description": "Hybrid job trigger for data from the comments field of a table that contains customer appointment bookings",
            "requiredFindingLabelKeys": [
                "appointment-bookings-comments"
              ],
            "labels": {
              "env": "prod"
            },
            "tableOptions": {
              "identifyingFields": [
                {
                  "name": "booking_id"
                }
              ]
            }
          }
        }
      }
    }
  }

פלט מסוג JSON

{
"name": "projects/PROJECT_ID/locations/REGION/jobTriggers/postgresql-table-comments",
"inspectJob": {
  "storageConfig": {
    "hybridOptions": {
      "description": "Hybrid job trigger for data from the comments field of a table that contains customer appointment bookings",
      "requiredFindingLabelKeys": [
        "appointment-bookings-comments"
      ],
      "labels": {
        "env": "prod"
      },
      "tableOptions": {
        "identifyingFields": [
          {
            "name": "booking_id"
          }
        ]
      }
    }
  },
  "inspectConfig": {
    "infoTypes": [
      {
        "name": "EMAIL_ADDRESS"
      }
    ],
    "minLikelihood": "POSSIBLE",
    "limits": {},
    "includeQuote": true
  },
  "actions": [
    {
      "jobNotificationEmails": {}
    },
    {
      "publishToStackdriver": {}
    }
  ]
},
"triggers": [
  {
    "manual": {}
  }
],
"createTime": ""JOB_CREATION_DATETIME",
"updateTime": "TRIGGER_UPDATE_DATETIME",
"status": "HEALTHY"
}

הכלי Sensitive Data Protection יוצר את טריגר העבודה ההיברידי. הפלט מכיל את השם של טריגר העבודה ההיברידית. בדוגמה הזו, זה postgresql-table-comments. רושמים את השם. הוא נדרש בבקשה שלך ל-hybridInspect.

בניגוד למשימות היברידיות, DLP API מפסיק באופן אוטומטי משימות בטריגרים של משימות היברידיות בסוף כל יום. לכן, אין צורך לקרוא באופן מפורש לשיטה projects.locations.dlpJobs.finish.

כשיוצרים משימה היברידית או טריגר למשימה היברידית, אפשר להשתמש ב-APIs Explorer בדפי ההפניה הבאים של ה-API, בהתאמה:

בשדה Request parameters, מזינים projects/PROJECT_ID/locations/REGION. אחר כך, בשדה Request body (גוף הבקשה), מדביקים את קובץ ה-JSON לדוגמה של האובייקט שמנסים ליצור.

בקשה שאושרה, גם אם היא נוצרה ב-APIs Explorer, יוצרת משימה היברידית או טריגר למשימה היברידית.

למידע כללי על שימוש ב-JSON לשליחת בקשות ל-DLP API, אפשר לעיין במדריך לתחילת העבודה עם JSON.

שליחת נתונים למשרה היברידית או לטריגר של משרה היברידית

כדי לבדוק את הנתונים, צריך לשלוח hybridInspectבקשה בפורמט הנכון לפעולה היברידית או לטריגר של פעולה היברידית.

עיצוב פריטי תוכן היברידיים

הדוגמה הבאה היא של בקשת hybridInspect פשוטה שנשלחת להגנה על נתונים רגישים לעיבוד על ידי משימה היברידית או טריגר של משימה היברידית. שימו לב למבנה של אובייקט ה-JSON, כולל השדה hybridItem שמכיל את השדות הבאים:

  • item: מכיל את התוכן בפועל שצריך לבדוק.
  • findingDetails: מכיל מטא-נתונים לשיוך לתוכן.
{
  "hybridItem": {
    "item": {
      "value": "My email is test@example.org"
    },
    "findingDetails": {
      "containerDetails": {
        "fullPath": "10.0.0.2:logs1:app1",
        "relativePath": "app1",
        "rootPath": "10.0.0.2:logs1",
        "type": "logging_sys",
        "version": "1.2"
      },
      "labels": {
        "env": "prod",
        "appointment-bookings-comments": ""
      }
    }
  }
}

מידע מקיף על התוכן של פריטים היברידיים לבדיקה זמין במאמר בנושא HybridContentItem אובייקט ב-API.

נקודות קצה לבדיקה היברידית

כדי לבדוק נתונים באמצעות משימה היברידית או טריגר של משימה היברידית, צריך לשלוח hybridInspect בקשה לנקודת הקצה הנכונה.

שיטת HTTP וכתובת URL למשרות היברידיות

POST https://dlp.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/dlpJobs/JOB_ID:hybridInspect

מידע נוסף על נקודת הקצה הזו זמין בדף ההפניה ל-API של השיטה projects.locations.dlpJobs.hybridInspect.

ה-method של ה-HTTP וכתובת ה-URL להפעלת משימות היברידיות

https://dlp.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/jobTriggers/TRIGGER_NAME:hybridInspect

מידע נוסף על נקודת הקצה הזו זמין בדף ההפניה ל-API של השיטה projects.locations.jobTriggers.hybridInspect.

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט.
  • REGION: האזור הגיאוגרפי שבו רוצים לאחסן את בקשת hybridInspect. האזור הזה צריך להיות זהה לאזור של המשרה ההיברידית.
  • JOB_ID: המזהה שנתתם למשרה ההיברידית, עם התחילית i-.

    כדי לחפש את מזהה המשימה, בSensitive Data Protection, לוחצים על בדיקה > עבודות בדיקה.

  • TRIGGER_NAME: השם שנתתם לטריגר של המשימה ההיברידית.

    כדי לחפש את השם של טריגר ההפעלה של העבודה, בSensitive Data Protection, לוחצים על בדיקה > טריגרים להפעלת עבודות.

חובה להוסיף תוויות לבקשות מhybridInspect

אם רוצים לקבוע אילו בקשות יוכלו לעבור עיבוד על ידי משימה היברידית או טריגר של משימה היברידית, אפשר להגדיר תוויות נדרשות.hybridInspect כל בקשה לפרסום משרה היברידית או להפעלת טריגר של משרה היברידית שלא כוללת את התוויות הנדרשות האלה תידחה.hybridInspect

כדי להגדיר תווית חובה:

  1. כשיוצרים את משימת ההיבריד או את הטריגר של משימת ההיבריד, מגדירים את השדה requiredFindingLabelKeys לרשימה של תוויות נדרשות.

    בדוגמה הבאה, התווית appointment-bookings-comments מוגדרת כתווית חובה במשרה היברידית או בטריגר למשרה היברידית.

    "hybridOptions": {
      ...
      "requiredFindingLabelKeys": [
        "appointment-bookings-comments"
      ],
      "labels": {
        "env": "prod"
      },
      ...
    }
    
  2. בבקשה hybridInspect, בשדה labels, מוסיפים כל תווית נדרשת כמפתח בצמד של מפתח/ערך. הערך המתאים יכול להיות מחרוזת ריקה.

    בדוגמה הבאה מוגדרת התווית הנדרשת, appointment-bookings-comments, בבקשת hybridInspect.

    {
      "hybridItem": {
        "item": {
          "value": "My email is test@example.org"
        },
        "findingDetails": {
          "containerDetails": {...},
          "labels": {
            "appointment-bookings-comments": ""
          }
        }
      }
    }
    

אם לא תכללו את התווית הנדרשת בבקשת hybridInspect, תקבלו שגיאה כמו זו שמופיעה בהמשך:

{
  "error": {
    "code": 400,
    "message": "Trigger required labels that were not included: [appointment-bookings-comments]",
    "status": "INVALID_ARGUMENT"
  }
}

דוגמת קוד: יצירת טריגר של משימה היברידית ושליחת נתונים אליו

C#

מידע על התקנת ספריית הלקוח של Sensitive Data Protection והשימוש בה מופיע במאמר ספריות הלקוח של Sensitive Data Protection.

כדי לבצע אימות ב-Sensitive Data Protection, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.


using System;
using Google.Api.Gax.ResourceNames;
using Google.Api.Gax;
using Google.Cloud.Dlp.V2;
using Grpc.Core;

public class SendDataToTheHybridJobTrigger
{
    public static DlpJob SendToHybridJobTrigger(
       string projectId,
       string jobTriggerId,
       string text = null)
    {
        // Instantiate the dlp client.
        var dlp = DlpServiceClient.Create();

        // Construct the hybrid finding details which will be used as metadata with the content.
        // Refer to this for more information: https://cloud.google.com/dlp/docs/reference/rpc/google.privacy.dlp.v2#google.privacy.dlp.v2.Container
        var findingDetails = new HybridFindingDetails
        {
            ContainerDetails = new Container
            {
                FullPath = "10.0.0.2:logs1:aap1",
                RelativePath = "app1",
                RootPath = "10.0.0.2:logs1",
                Type = "System Logs"
            }
        };

        // Construct the hybrid content item using the finding details and text to be inspected.
        var hybridContentItem = new HybridContentItem
        {
            Item = new ContentItem { Value = text ?? "My email is ariel@example.org and name is Ariel." },
            FindingDetails = findingDetails
        };

        var jobTriggerName = new JobTriggerName(projectId, jobTriggerId);

        // Construct the request to activate the Job Trigger.
        var activate = new ActivateJobTriggerRequest
        {
            JobTriggerName = jobTriggerName
        };

        DlpJob triggerJob = null;

        try
        {
            // Call the API to activate the trigger.
            triggerJob = dlp.ActivateJobTrigger(activate);
        }
        catch (RpcException)
        {
            ListDlpJobsRequest listJobsRequest = new ListDlpJobsRequest
            {
                ParentAsLocationName = new LocationName(projectId, "global"),
                Filter = $"trigger_name={jobTriggerName}"
            };

            PagedEnumerable<ListDlpJobsResponse, DlpJob> res = dlp.ListDlpJobs(listJobsRequest);
            foreach (DlpJob j in res)
            {
                triggerJob = j;
            }
        }

        // Construct the request using hybrid content item.
        var request = new HybridInspectJobTriggerRequest
        {
            HybridItem = hybridContentItem,
            JobTriggerName = jobTriggerName
        };

        // Call the API.
        HybridInspectResponse _ = dlp.HybridInspectJobTrigger(request);

        Console.WriteLine($"Hybrid job created successfully. Job name: {triggerJob.Name}");

        return triggerJob;
    }
}

Go

מידע על התקנת ספריית הלקוח של Sensitive Data Protection והשימוש בה מופיע במאמר ספריות הלקוח של Sensitive Data Protection.

כדי לבצע אימות ב-Sensitive Data Protection, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.

import (
	"context"
	"fmt"
	"io"
	"log"
	"time"

	dlp "cloud.google.com/go/dlp/apiv2"
	"cloud.google.com/go/dlp/apiv2/dlppb"
)

// inspectDataToHybridJobTrigger uses the Data Loss Prevention API to inspect sensitive
// information using Hybrid jobs trigger that scans payloads of data sent from
// virtually any source and stores findings in Google Cloud.
func inspectDataToHybridJobTrigger(w io.Writer, projectID, textToDeIdentify, jobTriggerName string) error {
	// projectId := "your-project-id"
	// jobTriggerName := "your-job-trigger-name"
	// textToDeIdentify := "My email is test@example.org"

	ctx := context.Background()

	// Initialize a client once and reuse it to send multiple requests. Clients
	// are safe to use across goroutines. When the client is no longer needed,
	// call the Close method to cleanup its resources.
	client, err := dlp.NewClient(ctx)
	if err != nil {
		return err
	}

	// Closing the client safely cleans up background resources.
	defer client.Close()

	// Specify the content to be inspected.
	contentItem := &dlppb.ContentItem{
		DataItem: &dlppb.ContentItem_Value{
			Value: textToDeIdentify,
		},
	}

	// Contains metadata to associate with the content.
	// Refer to https://cloud.google.com/dlp/docs/reference/rpc/google.privacy.dlp.v2#container for specifying the paths in container object.
	container := &dlppb.Container{
		Type:         "logging_sys",
		FullPath:     "10.0.0.2:logs1:app1",
		RelativePath: "app1",
		RootPath:     "10.0.0.2:logs1",
		Version:      "1.2",
	}

	// Set the required label.
	labels := map[string]string{
		"env":                           "prod",
		"appointment-bookings-comments": "",
	}

	hybridFindingDetails := &dlppb.HybridFindingDetails{
		ContainerDetails: container,
		Labels:           labels,
	}

	hybridContentItem := &dlppb.HybridContentItem{
		Item:           contentItem,
		FindingDetails: hybridFindingDetails,
	}

	// Activate the job trigger.
	activateJobreq := &dlppb.ActivateJobTriggerRequest{
		Name: jobTriggerName,
	}

	dlpJob, err := client.ActivateJobTrigger(ctx, activateJobreq)
	if err != nil {
		log.Printf("Error from return part %v", err)
		return err
	}
	// Build the hybrid inspect request.
	req := &dlppb.HybridInspectJobTriggerRequest{
		Name:       jobTriggerName,
		HybridItem: hybridContentItem,
	}

	// Send the hybrid inspect request.
	_, err = client.HybridInspectJobTrigger(ctx, req)
	if err != nil {
		return err
	}

	getDlpJobReq := &dlppb.GetDlpJobRequest{
		Name: dlpJob.Name,
	}

	var result *dlppb.DlpJob
	for i := 0; i < 5; i++ {
		// Get DLP job
		result, err = client.GetDlpJob(ctx, getDlpJobReq)
		if err != nil {
			fmt.Printf("Error getting DLP job: %v\n", err)
			return err
		}

		// Check if processed bytes is greater than 0
		if result.GetInspectDetails().GetResult().GetProcessedBytes() > 0 {
			break
		}

		// Wait for 5 seconds before checking again
		time.Sleep(5 * time.Second)
		i++
	}

	fmt.Fprintf(w, "Job Name: %v\n", result.Name)
	fmt.Fprintf(w, "Job State: %v\n", result.State)

	inspectionResult := result.GetInspectDetails().GetResult()
	fmt.Fprint(w, "Findings: \n")
	for _, v := range inspectionResult.GetInfoTypeStats() {
		fmt.Fprintf(w, "Infotype: %v\n", v.InfoType.Name)
		fmt.Fprintf(w, "Likelihood: %v\n", v.GetCount())
	}

	fmt.Fprint(w, "successfully inspected data using hybrid job trigger ")
	return nil
}

Java

מידע על התקנת ספריית הלקוח של Sensitive Data Protection והשימוש בה מופיע במאמר ספריות הלקוח של Sensitive Data Protection.

כדי לבצע אימות ב-Sensitive Data Protection, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.


import com.google.api.gax.rpc.InvalidArgumentException;
import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.privacy.dlp.v2.ActivateJobTriggerRequest;
import com.google.privacy.dlp.v2.Container;
import com.google.privacy.dlp.v2.ContentItem;
import com.google.privacy.dlp.v2.DlpJob;
import com.google.privacy.dlp.v2.GetDlpJobRequest;
import com.google.privacy.dlp.v2.HybridContentItem;
import com.google.privacy.dlp.v2.HybridFindingDetails;
import com.google.privacy.dlp.v2.HybridInspectJobTriggerRequest;
import com.google.privacy.dlp.v2.InfoTypeStats;
import com.google.privacy.dlp.v2.InspectDataSourceDetails;
import com.google.privacy.dlp.v2.JobTriggerName;
import com.google.privacy.dlp.v2.ListDlpJobsRequest;

public class InspectDataToHybridJobTrigger {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    // The Google Cloud project id to use as a parent resource.
    String projectId = "your-project-id";
    // The job trigger id used to for processing a hybrid job trigger.
    String jobTriggerId = "your-job-trigger-id";
    // The string to de-identify.
    String textToDeIdentify = "My email is test@example.org and my name is Gary.";
    inspectDataToHybridJobTrigger(textToDeIdentify, projectId, jobTriggerId);
  }

  // Inspects data using a hybrid job trigger.
  // Hybrid jobs trigger allows to scan payloads of data sent from virtually any source for
  // sensitive information and then store the findings in Google Cloud.
  public static void inspectDataToHybridJobTrigger(
      String textToDeIdentify, String projectId, String jobTriggerId) throws Exception {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (DlpServiceClient dlpClient = DlpServiceClient.create()) {
      // Specify the content to be inspected.
      ContentItem contentItem = ContentItem.newBuilder().setValue(textToDeIdentify).build();

      // Contains metadata to associate with the content.
      // Refer to https://cloud.google.com/dlp/docs/reference/rest/v2/Container for specifying the
      // paths in container object.
      Container container =
          Container.newBuilder()
              .setFullPath("10.0.0.2:logs1:app1")
              .setRelativePath("app1")
              .setRootPath("10.0.0.2:logs1")
              .setType("logging_sys")
              .setVersion("1.2")
              .build();

      HybridFindingDetails hybridFindingDetails =
          HybridFindingDetails.newBuilder().setContainerDetails(container).build();

      HybridContentItem hybridContentItem =
          HybridContentItem.newBuilder()
              .setItem(contentItem)
              .setFindingDetails(hybridFindingDetails)
              .build();

      // Activate the job trigger.
      ActivateJobTriggerRequest activateJobTriggerRequest =
          ActivateJobTriggerRequest.newBuilder()
              .setName(JobTriggerName.of(projectId, jobTriggerId).toString())
              .build();

      DlpJob dlpJob;

      try {
        dlpJob = dlpClient.activateJobTrigger(activateJobTriggerRequest);
      } catch (InvalidArgumentException e) {
        ListDlpJobsRequest request =
            ListDlpJobsRequest.newBuilder()
                .setParent(JobTriggerName.of(projectId, jobTriggerId).toString())
                .setFilter("trigger_name=" + JobTriggerName.of(projectId, jobTriggerId).toString())
                .build();

        // Retrieve the DLP jobs triggered by the job trigger
        DlpServiceClient.ListDlpJobsPagedResponse response = dlpClient.listDlpJobs(request);
        dlpJob = response.getPage().getResponse().getJobs(0);
      }

      // Build the hybrid inspect request.
      HybridInspectJobTriggerRequest request =
          HybridInspectJobTriggerRequest.newBuilder()
              .setName(JobTriggerName.of(projectId, jobTriggerId).toString())
              .setHybridItem(hybridContentItem)
              .build();

      // Send the hybrid inspect request.
      dlpClient.hybridInspectJobTrigger(request);

      // Build a request to get the completed job
      GetDlpJobRequest getDlpJobRequest =
          GetDlpJobRequest.newBuilder().setName(dlpJob.getName()).build();

      DlpJob result = null;

      do {
        result = dlpClient.getDlpJob(getDlpJobRequest);
        Thread.sleep(5000);
      } while (result.getInspectDetails().getResult().getProcessedBytes() <= 0);

      System.out.println("Job status: " + result.getState());
      System.out.println("Job name: " + result.getName());
      // Parse the response and process results.
      InspectDataSourceDetails.Result inspectionResult = result.getInspectDetails().getResult();
      System.out.println("Findings: ");
      for (InfoTypeStats infoTypeStat : inspectionResult.getInfoTypeStatsList()) {
        System.out.println("\tInfoType: " + infoTypeStat.getInfoType().getName());
        System.out.println("\tCount: " + infoTypeStat.getCount() + "\n");
      }
    }
  }
}

Node.js

מידע על התקנת ספריית הלקוח של Sensitive Data Protection והשימוש בה מופיע במאמר ספריות הלקוח של Sensitive Data Protection.

כדי לבצע אימות ב-Sensitive Data Protection, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.

// Imports the Google Cloud Data Loss Prevention library
const DLP = require('@google-cloud/dlp');

// Instantiates a client
const dlpClient = new DLP.DlpServiceClient();

// The project ID to run the API call under.
// const projectId = "your-project-id";

// The string to de-identify
// const string = 'My email is test@example.org';

// Job Trigger ID
// const jobTriggerId = 'your-job-trigger-id';

async function inspectDataToHybridJobTrigger() {
  // Contains metadata to associate with the content.
  const container = {
    full_path: '10.0.0.2:logs1:app1',
    relative_path: 'app1',
    root_path: '10.0.0.2:logs1',
    type: 'logging_sys',
    version: '1.2',
  };

  const labels = {env: 'prod', 'appointment-bookings-comments': ''};

  // Build the hybrid content item.
  const hybridContentItem = {
    item: {value: string},
    findingDetails: {
      containerDetails: container,
      labels,
    },
  };
  let jobName;
  const fullTriggerName = `projects/${projectId}/jobTriggers/${jobTriggerId}`;
  // Activate the job trigger.
  try {
    const response = await dlpClient.activateJobTrigger({
      name: fullTriggerName,
    });
    jobName = response[0].name;
  } catch (err) {
    console.log(err);
    if (err.code === 3) {
      const response = await dlpClient.listDlpJobs({
        parent: fullTriggerName,
        filter: `trigger_name=${fullTriggerName}`,
      });
      jobName = response[0][0].name;
    }
    // Ignore error related to job trigger already active
    if (err.code !== 3) {
      console.log(err.message);
      return;
    }
  }
  // Build the hybrid inspect request.
  const request = {
    name: `projects/${projectId}/jobTriggers/${jobTriggerId}`,
    hybridItem: hybridContentItem,
  };
  // Send the hybrid inspect request.
  await dlpClient.hybridInspectJobTrigger(request);
  // Waiting for a maximum of 15 minutes for the job to get complete.
  let job;
  let numOfAttempts = 30;
  while (numOfAttempts > 0) {
    // Fetch DLP Job status
    [job] = await dlpClient.getDlpJob({name: jobName});

    if (job.state === 'FAILED') {
      console.log('Job Failed, Please check the configuration.');
      return;
    }
    // Check if the job has completed.
    if (job.inspectDetails.result.processedBytes > 0) {
      break;
    }
    // Sleep for a short duration before checking the job status again.
    await new Promise(resolve => {
      setTimeout(() => resolve(), 30000);
    });
    numOfAttempts -= 1;
  }
  // Finish the job once the inspection is complete.
  await dlpClient.finishDlpJob({name: jobName});

  // Print out the results.
  const infoTypeStats = job.inspectDetails.result.infoTypeStats;
  if (infoTypeStats.length > 0) {
    infoTypeStats.forEach(infoTypeStat => {
      console.log(
        `  Found ${infoTypeStat.count} instance(s) of infoType ${infoTypeStat.infoType.name}.`
      );
    });
  } else {
    console.log('No findings.');
  }
}
await inspectDataToHybridJobTrigger();

PHP

מידע על התקנת ספריית הלקוח של Sensitive Data Protection והשימוש בה מופיע במאמר ספריות הלקוח של Sensitive Data Protection.

כדי לבצע אימות ב-Sensitive Data Protection, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.


use Google\ApiCore\ApiException;
use Google\Cloud\Dlp\V2\ActivateJobTriggerRequest;
use Google\Cloud\Dlp\V2\Client\DlpServiceClient;
use Google\Cloud\Dlp\V2\Container;
use Google\Cloud\Dlp\V2\ContentItem;
use Google\Cloud\Dlp\V2\DlpJob\JobState;
use Google\Cloud\Dlp\V2\GetDlpJobRequest;
use Google\Cloud\Dlp\V2\HybridContentItem;
use Google\Cloud\Dlp\V2\HybridFindingDetails;
use Google\Cloud\Dlp\V2\HybridInspectJobTriggerRequest;
use Google\Cloud\Dlp\V2\ListDlpJobsRequest;

/**
 * Inspect data hybrid job trigger.
 * Send data to the hybrid job or hybrid job trigger.
 *
 * @param string $callingProjectId  The Google Cloud project id to use as a parent resource.
 * @param string $string            The string to inspect (will be treated as text).
 */

function inspect_send_data_to_hybrid_job_trigger(
    // TODO(developer): Replace sample parameters before running the code.
    string $callingProjectId,
    string $jobTriggerId,
    string $string
): void {
    // Instantiate a client.
    $dlp = new DlpServiceClient();

    $content = (new ContentItem())
        ->setValue($string);

    $container = (new Container())
        ->setFullPath('10.0.0.2:logs1:app1')
        ->setRelativePath('app1')
        ->setRootPath('10.0.0.2:logs1')
        ->setType('logging_sys')
        ->setVersion('1.2');

    $findingDetails = (new HybridFindingDetails())
        ->setContainerDetails($container)
        ->setLabels([
            'env' => 'prod',
            'appointment-bookings-comments' => ''
        ]);

    $hybridItem = (new HybridContentItem())
        ->setItem($content)
        ->setFindingDetails($findingDetails);

    $parent = "projects/$callingProjectId/locations/global";
    $name = "projects/$callingProjectId/locations/global/jobTriggers/" . $jobTriggerId;

    $triggerJob = null;
    try {
        $activateJobTriggerRequest = (new ActivateJobTriggerRequest())
            ->setName($name);
        $triggerJob = $dlp->activateJobTrigger($activateJobTriggerRequest);
    } catch (ApiException $e) {
        $listDlpJobsRequest = (new ListDlpJobsRequest())
            ->setParent($parent)
            ->setFilter('trigger_name=' . $name);
        $result = $dlp->listDlpJobs($listDlpJobsRequest);
        foreach ($result as $job) {
            $triggerJob = $job;
        }
    }
    $hybridInspectJobTriggerRequest = (new HybridInspectJobTriggerRequest())
        ->setName($name)
        ->setHybridItem($hybridItem);

    $dlp->hybridInspectJobTrigger($hybridInspectJobTriggerRequest);

    $numOfAttempts = 10;
    do {
        printf('Waiting for job to complete' . PHP_EOL);
        sleep(10);
        $getDlpJobRequest = (new GetDlpJobRequest())
            ->setName($triggerJob->getName());
        $job = $dlp->getDlpJob($getDlpJobRequest);
        if ($job->getState() != JobState::RUNNING) {
            break;
        }
        $numOfAttempts--;
    } while ($numOfAttempts > 0);

    // Print finding counts.
    printf('Job %s status: %s' . PHP_EOL, $job->getName(), JobState::name($job->getState()));
    switch ($job->getState()) {
        case JobState::DONE:
            $infoTypeStats = $job->getInspectDetails()->getResult()->getInfoTypeStats();
            if (count($infoTypeStats) === 0) {
                printf('No findings.' . PHP_EOL);
            } else {
                foreach ($infoTypeStats as $infoTypeStat) {
                    printf(
                        '  Found %s instance(s) of infoType %s' . PHP_EOL,
                        $infoTypeStat->getCount(),
                        $infoTypeStat->getInfoType()->getName()
                    );
                }
            }
            break;
        case JobState::FAILED:
            printf('Job %s had errors:' . PHP_EOL, $job->getName());
            $errors = $job->getErrors();
            foreach ($errors as $error) {
                var_dump($error->getDetails());
            }
            break;
        case JobState::PENDING:
            printf('Job has not completed. Consider a longer timeout or an asynchronous execution model' . PHP_EOL);
            break;
        default:
            printf('Unexpected job state. Most likely, the job is either running or has not yet started.');
    }
}

Python

מידע על התקנת ספריית הלקוח של Sensitive Data Protection והשימוש בה מופיע במאמר ספריות הלקוח של Sensitive Data Protection.

כדי לבצע אימות ב-Sensitive Data Protection, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.

import time

import google.cloud.dlp


def inspect_data_to_hybrid_job_trigger(
    project: str,
    trigger_id: str,
    content_string: str,
) -> None:
    """
    Uses the Data Loss Prevention API to inspect sensitive information
    using Hybrid jobs trigger that scans payloads of data sent from
    virtually any source and stores findings in Google Cloud.
    Args:
        project: The Google Cloud project id to use as a parent resource.
        trigger_id: The job trigger identifier for hybrid job trigger.
        content_string: The string to inspect.
    """

    # Instantiate a client.
    dlp = google.cloud.dlp_v2.DlpServiceClient()

    # Construct the `item` to inspect.
    item = {"value": content_string}

    # Construct the container details that contains metadata to be
    # associated with the content. For more details, please refer to
    # https://cloud.google.com/dlp/docs/reference/rest/v2/Container
    container_details = {
        "full_path": "10.0.0.2:logs1:app1",
        "relative_path": "app1",
        "root_path": "10.0.0.2:logs1",
        "type_": "logging_sys",
        "version": "1.2",
    }

    # Construct hybrid inspection configuration.
    hybrid_config = {
        "item": item,
        "finding_details": {
            "container_details": container_details,
            "labels": {
                "env": "prod",
                "appointment-bookings-comments": "",
            },
        },
    }

    # Convert the trigger id into a full resource id.
    trigger_id = f"projects/{project}/jobTriggers/{trigger_id}"

    # Activate the job trigger.
    dlp_job = dlp.activate_job_trigger(request={"name": trigger_id})

    # Call the API.
    dlp.hybrid_inspect_job_trigger(
        request={
            "name": trigger_id,
            "hybrid_item": hybrid_config,
        }
    )

    # Get inspection job details.
    job = dlp.get_dlp_job(request={"name": dlp_job.name})

    # Wait for dlp job to get finished.
    while job.inspect_details.result.processed_bytes <= 0:
        time.sleep(5)
        job = dlp.get_dlp_job(request={"name": dlp_job.name})

    # Print the results.
    print(f"Job name: {dlp_job.name}")
    if job.inspect_details.result.info_type_stats:
        for finding in job.inspect_details.result.info_type_stats:
            print(f"Info type: {finding.info_type.name}; Count: {finding.count}")
    else:
        print("No findings.")

תרחישים אופייניים לבדיקה משולבת

בקטעים הבאים מתוארים שימושים אופייניים בבדיקה היברידית וזרימות העבודה התואמות להם.

ביצוע סריקה חד-פעמית

ביצוע סריקה חד-פעמית של מסד נתונים מחוץ ל- Google Cloud כחלק מבדיקה רבעונית של מסדי נתונים.

  1. יוצרים עבודה היברידית באמצעות Google Cloud המסוף או DLP API.

  2. שליחת נתונים למשימה על ידי קריאה ל-projects.locations.dlpJobs.hybridInspect. אם רוצים לבדוק עוד נתונים, חוזרים על השלב הזה כמה פעמים שצריך.

  3. אחרי ששולחים נתונים לבדיקה, שולחים קריאה ל-method projects.locations.dlpJobs.finish.

    ‫Sensitive Data Protection מבצע את הפעולות שצוינו בבקשה projects.locations.dlpJobs.create.

הגדרת מעקב רציף

מעקב אחרי כל התוכן החדש שנוסף מדי יום למסד נתונים שלא נתמך באופן מובנה על ידי Sensitive Data Protection.

  1. יוצרים טריגר היברידי של משרה באמצעות Google Cloud המסוף או DLP API.

  2. מפעילים את הטריגר של המשימה באמצעות השיטה projects.locations.jobTriggers.activate.

  3. שולחים נתונים להפעלת המשימה על ידי קריאה ל-projects.locations.jobTriggers.hybridInspect. אם רוצים לבדוק עוד נתונים, חוזרים על השלב הזה כמה פעמים שצריך.

במקרה כזה, אין צורך להפעיל את ה-method‏ projects.locations.dlpJobs.finish. השירות Sensitive Data Protection מחלק אוטומטית את הנתונים שאתם שולחים. כל עוד טריגר העבודה פעיל, בסוף כל יום, ההגנה מפני אובדן נתונים מבצעת את הפעולות שציינתם כשנוצר טריגר העבודה ההיברידי.

סריקת נתונים שנכנסים למסד נתונים

סריקת נתונים שנכנסים למסד נתונים, תוך שליטה באופן החלוקה של הנתונים למחיצות. כל עבודה בטריגר של עבודה היא מחיצה אחת.

  1. יוצרים טריגר היברידי של משרה באמצעות Google Cloud המסוף או DLP API.

  2. מפעילים את הטריגר של המשימה באמצעות השיטה projects.locations.jobTriggers.activate.

    המערכת מחזירה את מזהה המשימה של משימה יחידה. תצטרכו את מזהה העבודה הזה בשלב הבא.

  3. שליחת נתונים למשימה על ידי קריאה ל-projects.locations.dlpJobs.hybridInspect.

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

  4. אחרי ששולחים נתונים לעבודה, קוראים לשיטה projects.locations.dlpJobs.finish.

    ‫Sensitive Data Protection מבצע את הפעולות שצוינו בבקשה projects.locations.jobTriggers.create.

  5. אם רוצים ליצור עוד משימה למחיצה הבאה, צריך להפעיל שוב את טריגר המשימה ואז לשלוח את הנתונים למשימה שנוצרה.

מעקב אחרי תנועה משרת proxy

מעקב אחרי תנועת גולשים משרת proxy שהותקן בין שתי אפליקציות בהתאמה אישית.

  1. יוצרים טריגר היברידי של משרה באמצעות Google Cloud המסוף או DLP API.

  2. מפעילים את הטריגר של המשימה באמצעות השיטה projects.locations.jobTriggers.activate.

  3. שולחים נתונים להפעלת המשימה על ידי קריאה ל-projects.locations.jobTriggers.hybridInspect. אם רוצים לבדוק עוד נתונים, חוזרים על השלב הזה כמה פעמים שצריך.

    אפשר להפעיל את הבקשה הזו ללא הגבלה לכל תעבורת הרשת. חשוב לוודא שכללת מטא-נתונים בכל בקשה.

במקרה כזה, אין צורך להפעיל את ה-method‏ projects.locations.dlpJobs.finish. השירות Sensitive Data Protection מחלק אוטומטית את הנתונים שאתם שולחים. כל עוד טריגר העבודה פעיל, בסוף כל יום, ההגנה מפני אובדן נתונים מבצעת את הפעולות שציינתם כשנוצר טריגר העבודה ההיברידי.

המאמרים הבאים