שליחת שאילתות על ממצאים של Sensitive Data Protection ב-BigQuery

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

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

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

למידע נוסף על הרצת שאילתות, קראו את המאמרים הבאים:

עמודות בטבלה ב-BigQuery

העמודות בטבלה של הממצאים שיוצאו מבוססות על המאפיינים של האובייקט Finding.

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

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

  • אם אתם משתמשים במסוף Google Cloud , הגדירו את השדה Identifying fields (comma separated).
  • אם אתם משתמשים ב-DLP API, הגדירו את המאפיין identifyingFields.

כשהבדיקה תסתיים והממצאים ייצאו ל-BigQuery, כל ממצא יכיל את הערכים המתאימים של העמודות שציינתם. הערכים האלה יופיעו בשדה location.content_locations.record_location.record_key.id_values. לאחר מכן תוכלו להשתמש בערכים האלה כדי לקשר את הממצא בחזרה לשורה הספציפית בטבלה ב-BigQuery שנבדקה.

שאילתות לדוגמה

אתם יכולים להשתמש בשאילתות לדוגמה הבאות כדי לנתח את הממצאים. אפשר גם להשתמש בשאילתות בכלי להמחשה חזותית כמו Data Studio. השאילתות האלה נועדו לעזור לכם להתחיל לשלוח שאילתות לגבי נתוני הממצאים.

בכל אחת מהשאילתות הבאות, מחליפים את הערכים הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט
  • ‫DATASET: השם של מערך הנתונים ב-BigQuery
  • ‫TABLE_ID: מזהה הטבלה

בחירת מספר המופעים של כל infoType

מסוף Google Cloud

SELECT info_type.name,
COUNT(info_type.name) AS count
FROM `PROJECT_ID.DATASET.TABLE_ID`
GROUP BY info_type.name
ORDER BY count DESC;

שורת הפקודה

bq query --use_legacy_sql=false ' SELECT info_type.name,
COUNT(info_type.name) AS count
FROM `PROJECT_ID.DATASET.TABLE_ID`
GROUP BY info_type.name ORDER BY count DESC;'

בחירת מספר המופעים של כל infoType לפי יום

מסוף Google Cloud

SELECT info_type.name, cast(TIMESTAMP_SECONDS(create_time.seconds) as date) as day,
COUNT(locations.container_name) AS count
FROM `PROJECT_ID.DATASET.TABLE_ID`,
UNNEST(location.content_locations) AS locations
GROUP BY info_type.name, day
ORDER BY count DESC;

שורת הפקודה

bq query --use_legacy_sql=false ' SELECT info_type.name,
cast(TIMESTAMP_SECONDS(create_time.seconds) as date) as day,
COUNT(locations.container_name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID`,
UNNEST(location.content_locations) AS locations
GROUP BY info_type.name, day ORDER BY count DESC;'

בוחר את הספירה של כל infoType בכל מאגר

מסוף Google Cloud

SELECT info_type.name, locations.container_name,
COUNT(locations.container_name) AS count
FROM `PROJECT_ID.DATASET.TABLE_ID`,
UNNEST(location.content_locations) AS locations
GROUP BY locations.container_name, info_type.name
ORDER BY count DESC;

שורת הפקודה

bq query --use_legacy_sql=false ' SELECT info_type.name, locations.container_name,
COUNT(locations.container_name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID`,
UNNEST(location.content_locations) AS locations
GROUP BY locations.container_name,info_type.name ORDER BY count DESC;'

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

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

מסוף Google Cloud

SELECT
  table_counts.field_name,
  STRING_AGG( CONCAT(" ",table_counts.name," [count: ",CAST(table_counts.count_total AS String),"]")
  ORDER BY
    table_counts.count_total DESC) AS infoTypes
FROM (
  SELECT
    locations.record_location.field_id.name AS field_name,
    info_type.name,
    COUNT(*) AS count_total
  FROM
    `PROJECT_ID.DATASET.TABLE_ID`,
    UNNEST(location.content_locations) AS locations
  WHERE
    (likelihood = 'LIKELY'
      OR likelihood = 'VERY_LIKELY'
      OR likelihood = 'POSSIBLE')
  GROUP BY
    locations.record_location.field_id.name,
    info_type.name
  HAVING
    count_total>200 ) AS table_counts
GROUP BY
  table_counts.field_name
ORDER BY
  table_counts.field_name

השאילתה שלמעלה עשויה להניב תוצאה כמו זו של טבלה לדוגמה, שבה העמודה infoTypes מציינת כמה מופעים של כל infoType נמצאו בעמודה הנתונה.

field_name infoTypes
field1 CUSTOM_USER_US [count: 7004], CUSTOM_USER_EU [count: 2996]
field2 US_VEHICLE_IDENTIFICATION_NUMBER [count: 9597]
field3 EMAIL_ADDRESS [count: 10000]
field4 IP_ADDRESS [count: 10000]
field5 PHONE_NUMBER [count: 7815]
field6 US_SOCIAL_SECURITY_NUMBER [count: 10000]
field7 CREDIT_CARD_NUMBER [count: 10000]