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

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

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

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

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

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

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

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

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

  • אם משתמשים במסוף Google Cloud , צריך להגדיר את השדה שדות לזיהוי (מופרדים בפסיקים).
  • אם אתם משתמשים ב-DLP API, צריך להגדיר את המאפיין identifyingFields.

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

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

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

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

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

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

מסוף 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;'

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

מסוף 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]