חיפוש בטבלאות נתונים

נתמך ב:

טבלאות נתונים הן מבני נתונים מרובי עמודות שמאפשרים להזין נתונים משלכם ב-Google Security Operations. טבלאות נתונים יכולות לשמש כטבלאות חיפוש עם עמודות מוגדרות והנתונים מאוחסנים בשורות. אפשר ליצור או לייבא טבלת נתונים לחשבון Google SecOps באמצעות ממשק האינטרנט של Google SecOps, באמצעות data tables API או באמצעות שאילתה של סקירה כללית של YARA-L 2.0.

הקצאת הרשאות גישה לטבלאות נתונים באמצעות RBAC לנתונים

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

ניהול טבלאות נתונים באמצעות ממשק האינטרנט של Google SecOps

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

גישה לטבלאות הנתונים

כדי לגשת לדף טבלאות נתונים:

  • בסרגל הצד, בוחרים באפשרות חקירה > טבלאות נתונים.

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

הוספת טבלת נתונים חדשה

כשמוסיפים טבלת נתונים חדשה, אפשר להזין נתוני CSV באופן ידני, להדביק נתוני CSV או לייבא קובץ CSV או TSV לטבלת הנתונים.

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

כדי להוסיף טבלת נתונים חדשה ל-Google SecOps, מבצעים את הפעולות הבאות:

  1. בסרגל הצד, בוחרים באפשרות חקירה > טבלאות נתונים.

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

  3. בתיבת הדו-שיח יצירת טבלת נתונים חדשה, נותנים לטבלה שם ואפשר גם להוסיף תיאור.

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

    • מזינים נתוני CSV באופן ידני או מדביקים נתוני CSV באזור Text (מצב עריכה).
    • כדי לייבא נתונים מקובץ CSV או TSV לטבלת הנתונים:
    1. לוחצים על ייבוא קובץ.
    2. עוברים לקובץ ולוחצים על פתיחה. תיבת הדו-שיח ייבוא קובץ תיפתח.
    3. אם בחרתם קובץ TSV בשלב הקודם, מבצעים את הפעולות הבאות:
      1. מהרשימה סוג התו המפריד, בוחרים באפשרות זיהוי אוטומטי או Tab (טאב).
      2. ברשימה התחלת הייבוא בשורה, מציינים את השורה בקובץ שממנה רוצים לייבא את הנתונים.
    4. לוחצים על ייבוא נתונים.
  5. בוחרים במצב העריכה Table ומגדירים את האפשרויות הבאות לפי הצורך:

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

מיפוי של סוגי נתונים לעמודות בטבלת נתונים

כשמוסיפים טבלת נתונים חדשה, אפשר למפות סוגי נתונים (מחרוזת, ביטוי רגולרי, CIDR או מספר) לעמודות בטבלת הנתונים.

אפשר למפות שדות נתונים בודדים לעמודת נתונים, ולמפות שדות נתונים חוזרים לעמודת נתונים באמצעות ממשק האינטרנט או ה-API, באופן הבא:

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

  • בבקשות API, מגדירים את repeated_values לערך true.

מידע נוסף מופיע במאמר בנושא שדות חוזרים.

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

Field_value Field_name
altostrat.com FQDN
192.0.2.135 קניין רוחני (IP)
צ'רלי userid
דוגמה hostname

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

FQDN קניין רוחני (IP) Userid שם המארח
altostrat.com 192.0.2.135 צ'רלי דוגמה

הגדרת עמודות מרכזיות

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

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

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

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

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

מיפוי שמות עמודות לשדות של ישויות (אופציונלי)

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

בדוגמה הבאה של טבלת נתונים, העמודות Userid ו-Role ממופות לעמודות entity.user.userid ו-entity.user.attribute.role.name, בהתאמה:

‫Userid
(מיפוי אל entity.user.userid)
אימייל תפקיד
(מיפוי ל-entity.user.attribute.role.name)
תקע jack123@gmail.com אדמין
טוני tony123@gmail.com מהנדס

אפשר למפות עמודה בטבלת נתונים לשדה פרוטו של ישות באמצעות השדה mapped_column_path של משאב DataTable.

בעמודות ללא נתיב יישות מוגדר, כמו Email בטבלת הדוגמה הזו, צריך לציין ידנית את סוג הנתונים. בדומה לרשימות הפניה, סוגי הנתונים הנתמכים בטבלאות נתונים הם number,‏ string,‏ regex ו-cidr.

כדי לכלול בטבלת נתונים עמודות ממופות ועמודות לא ממופות, צריך לציין תנאי join.

עמודות שלא מופו נשמרות בשדה additional של הישות שהטבלה מצטרפת אליה. הם מתווספים כצמדי מפתח/ערך, כאשר key הוא שם העמודה ו-value הוא ערך השורה התואם.

הוספת שורה חדשה לטבלת נתונים

כדי להוסיף שורה חדשה:

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

עריכת שורה בטבלת נתונים

כדי לערוך שורה:

  1. לוחצים על השדה שרוצים לשנות. השדה הופך לעריכה.
  2. מבצעים את השינויים הרצויים.
  3. לוחצים על Save.

חיפוש שורות בטבלת הנתונים

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

ניהול ה-TTL של שורה בטבלה

כדי לנהל את הערך של אורך החיים (TTL) של שורות בטבלה, מבצעים את הפעולות הבאות:

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

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

  3. מזינים ערך חדש של TTL בשדה שעות או ימים. הערך המינימלי הוא שעה אחת. הערך המקסימלי הוא 365 ימים.

  4. לוחצים על Save.

התנהגות של שינוי TTL ברמת השורה

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

מחיקת שורה בטבלה

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

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

הסרת טבלת נתונים

כדי להסיר טבלת נתונים:

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

  2. לוחצים על Delete.

ניהול טבלאות נתונים באמצעות Chronicle API

אפשר גם להשתמש במשאבי REST שזמינים ב-Chronicle API כדי לנהל טבלאות נתונים ב-Google SecOps. ה-API יכול לשכפל את כל התכונות שזמינות בממשק האינטרנט, והוא כולל כמה תכונות נוספות שמאפשרות לכם לנהל טבלאות נתונים עם ביצועים טובים יותר ועם יכולת התרחבות גדולה יותר.

אלה משאבי REST של טבלת הנתונים:

דוגמה: תחביר של מסנן

בדוגמה הבאה של Chronicle API אפשר לראות איך משתמשים בתחביר filter כדי לחפש את google.com בשורות של טבלת נתונים:

  curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://staging-chronicle.sandbox.googleapis.com/v1alpha/projects/{$PROJECT}/locations/${REGION}/instances/${INSTANCE}/dataTables/${DATA_TABLE_NAME}/dataTableRows?filter=google.com"

שימוש בטבלאות נתונים ב-Google SecOps

אחרי שמוסיפים טבלאות נתונים למופע של Google SecOps, אפשר להשתמש בהן כדי לסנן, לשפר ולהעשיר את הנתונים באמצעות שאילתות YARA-L. המסמך הזה כולל דוגמאות רבות בתחביר YARA-L, שאפשר לשלב ב-Google SecOps.

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

אפשר להשתמש בטבלאות נתונים בדרכים הבאות:

סינון נתוני אירועים וישויות של UDM באמצעות טבלת נתונים

אפשר לסנן אירועים וישויות של UDM על ידי השוואה שלהם לרשומות בטבלת נתונים. מצטרפים לטבלת הנתונים עם אירוע או ישות של UDM באמצעות השוואות מבוססות שורה או מבוססות עמודה.

השוואות מבוססות-שורות ומבוססות-עמודות בטבלאות נתונים

סוג ההשוואה לוגיקה של מפתחות אופרטורים נפוצים תחביר לדוגמה מתי משתמשים
מבוסס על שורות כל התנאים צריכים להתקיים באותה שורה =, !=, >, >=, <, <= $e.field = %table.col_a כשחשוב להגדיר את הקשר בין כמה ערכים בעמודות באותה שורה.
על בסיס עמודות הערך חייב להופיע בכל מקום בעמודה IN, IN regex, IN cidr $e.field IN %table.col_b כשבודקים אם ערך מסוים קיים בקבוצת ערכים בעמודה אחת.

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

  • כדי לקשר אירועים של UDM לטבלאות נתונים באמצעות השוואה מבוססת-שורות, משתמשים באופרטורים של שוויון (=, ‏ !=, ‏ >, ‏ >=, ‏ <, ‏ <=).

    לדוגמה: $<udm_variable>.<field_path> = %<data_table_name>.<column_name>

    • אם משתמשים בכמה הצהרות השוואה, כל השדות או התנאים צריכים להיות זהים בשורה של טבלת הנתונים.
    • כדי להשתמש באופרטורים (כמו not, !=, >, >=, <, <=) בשאילתה, צריך לכלול לפחות תנאי join אחד בין שדות UDM לבין שורות בטבלת נתונים.

    • מערכת Google SecOps מתייחסת לכל כלל עם טבלת נתונים join כאל כלל מרובה אירועים, שנדרש בו קטע match בהגדרת הכלל.

  • כדי לסנן נתונים לפי ערכים תואמים מאירועי UDM לעומת שורות בטבלת הנתונים, אפשר להשתמש בתחביר הבא של הצטרפות:

    • תחביר נכון של הצטרפות:

      לדוגמה, כדי להשתמש ב'החרגה משולבת' שמבוססת על שורות, צריך להשתמש ב-left outer join ובסעיף where כדי לבדוק אם יש nulls.

    • תחביר שגוי של הצטרפות:

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

      לדוגמה, אל תשתמשו בתחביר הזה: NOT (field1 = %table.col1 AND field2 = %table.col2)

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

  • כדי להשתמש בעמודה בטבלת נתונים מהסוגים CIDR או regex להשוואה מבוססת-שורה, צריך להשתמש בתחביר הבא:

    net.ip_in_range_cidr($e.principal.ip, %<data_table_name>.<column_name>)
    
    re.regex($e.principal.hostname, %<data_table_name>.<column_name>)
    
  • כדי לקשר אירועי UDM לטבלאות נתונים באמצעות השוואה מבוססת-עמודות, משתמשים במילת המפתח in.

    לדוגמה: $<udm_variable>.<field_path> in %<data_table_name>.<column_name>

  • כדי לסנן אירועים שבהם ערך השדה קיים בעמודה שצוינה (לדוגמה, רשימת חסימה או רשימת היתרים), משתמשים בתחביר הבא: NOT (... IN %table.column)

    לדוגמה: not ($evt_username in %my_data_table.username)

  • כדי להשתמש בעמודה בטבלת נתונים מהסוגים CIDR או regex לצורך השוואה מבוססת-עמודות, צריך להשתמש בתחביר הבא:

    $e.principal.ip in cidr %cidr_data_table.column_name
    
    $e.principal.hostname in regex %regex_data_table.column_name
    
  • כשמשווים עמודות בטבלאות נתונים שהן מסוגי הנתונים CIDR או ביטוי רגולרי, מילות המפתח cidr ו-regex הן אופציונליות.

  • אפשר להשתמש באופרטור not גם עם טבלאות נתונים.

    שאילתת הדוגמה הבאה מסננת רשומות שבהן כתובות ה-IP ‏ ($e.principal.ip) לא תואמות לאף אחד מטווחי ה-CIDR שמופיעים בעמודה benign_ip בטבלה cidr_data_table:

    not $e.principal.ip in %data_table.benign_ip
    

שימוש בטבלת נתונים כרשימת הפניות מרובת עמודות

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

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

בדוגמה הבאה, טבלת הנתונים badApps מכילה שתי עמודות: hostname ו-ip. השאילתה מתאימה לשני הערכים (הערך שמבוסס על שדה UDM והערך שמבוסס על טבלת הנתונים, שניהם מסוג נתוני מחרוזת) באופן עצמאי.

  • דוגמה לכלל:

    rule udm_in_data_table {
    meta:
      description = "Use data table as multicolumn reference list"
    events:
      $e.metadata.event_type = "NETWORK_CONNECTION"
      $e.security_result.action = "ALLOW"
      $e.target.asset.asset_id = $assetid
    
      // Event hostname matches at least one value in table column hostname.
      $e.target.hostname in %badApps.hostname
    
      // Event IP matches at least one value in table column ip.
      $e.target.ip in %badApps.ip
    
    match:
      $assetid over 1h
    
    condition:
      $e
    }
    
  • דוגמה לחיפוש:

    events:
      $e.metadata.event_type = "NETWORK_CONNECTION"
      $e.security_result.action = "ALLOW"
      $e.target.asset.asset_id = $assetid
    
      // Event hostname matches at least one value in table column hostname.
      $e.target.hostname in %badApps.hostname
    
      // Event IP matches at least one value in table column ip.
      $e.target.ip in %badApps.ip
    

צירופים מבוססי-שורה בין טבלת נתונים לבין אירוע או ישות של UDM

אתם יכולים לקשר אירועים של UDM לטבלת נתונים באמצעות אופרטורים של שוויון והשוואה (=, !=, >, >=, <, <=) כדי לבצע השוואות ברמת השורה. הגישה הזו מאפשרת לכם לסנן נתונים לפי ערכים תואמים מאירועי UDM בהשוואה לשורות בטבלת הנתונים. אם משתמשים בכמה הצהרות השוואה, כל השדות או התנאים צריכים להיות זהים בשורה של אותה טבלת נתונים.

כדי להשתמש באופרטורים (כמו not, !=, >, >=, <, <=) בשאילתה, צריך לכלול לפחות join תנאי בין שדות UDM לבין שורות בטבלת הנתונים. מערכת Google SecOps מתייחסת לכל כלל עם טבלת נתונים join כאל כלל מרובה אירועים, שנדרש עבורו קטע match תואם בהגדרת הכלל.

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

  • יש תמיכה ב-placeholder לטבלאות נתונים בקטע event של שאילתה, אבל צריך לקשר אותם לאירוע או לישות של UDM.

  • בדוגמה הבאה נעשה שימוש בעמודה של טבלת נתונים מסוג string.

    • בדוגמה הזו של שאילתת YARA-L נבדק אם אירוע התחברות של משתמש תואם לשורה ב-example_table.

      • אחד התנאים הוא שuser ID קיים ב-example_table.
      • שני התנאים צריכים להתקיים באותה שורה ב-example_table כדי שהכלל יופעל.
    • דוגמה לכלל:

      // Check if user exists in a data table and is active in all user login events.
      rule udm_join_data_table {
      
      meta:
        description = "Join data table with UDM event"
      
      events:
        $e.metadata.event_type = "USER_LOGIN"
        $e.security_result.action = "ALLOW"
        $e.principal.user.userid = $userid
      
      // Event must match at least 1 row in the data table 
      // where the uid in the data table row is the userid on the event 
      // and the active date in the same data table row is before the event timestamp.
      %example_table.uid = $userid
      $e.principal.hostname = %example_table.hostname
      
      match:
        $userid over 1h
      
      condition:
        $e
      }
      
    • דוגמה לחיפוש:

      events:
      $e.metadata.event_type = "USER_LOGIN"
      $e.security_result.action = "ALLOW"
      $e.principal.user.userid = $userid
      
      // Event must match at least 1 row in the data table 
      // where the uid in the data table row is the userid on the event 
      // and the active date in the same data table row is before the event timestamp
      
      %example_table.uid = $userid
      $e.principal.hostname = %example_table.hostname
      
  • הדוגמה הבאה ממחישה איך טבלת נתונים ונתוני אירועים של UDM פועלים יחד.

    על סמך הלוגיקה בשאילתת YARA-L הקודמת, משתמש עם user ID 32452 מופיע בזיהוי כhostname של המשתמש מהמערכת, ותואם לhostname בטבלת הנתונים.

    טבלת נתונים
    uid title שם מארח
    32452 משאבי אנוש host1
    64452 כספים host2
    46364 איטלקית host3
    טבלת אירועים של UDM
    principal מטא-נתונים security_result principal
    32452 USER_LOGIN אישור host1
    64589 USER_LOGIN אישור host9
    87352 USER_LOGIN אישור host4

כתיבת תוצאות משאילתות YARA-L לטבלאות נתונים

אפשר לכתוב את התוצאות משאילתות YARA-L לטבלת נתונים. התכונה הזו מאפשרת ליצור טבלאות נתונים מהנתונים של Google SecOps ולהשתמש בטבלאות האלה כדי לסנן ולשפר נתונים אחרים.

אפשר להשתמש בתחביר של כתיבת שאילתות ב-YARA-L כדי:

  • הגדרת תחביר YARA-L לכתיבת תוצאות שאילתות לטבלאות נתונים.

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

  • הנתונים צריכים להיות בהתאם לתחביר ולמוסכמות של YARA-L.

כתיבת זיהויים והתראות לטבלאות נתונים באמצעות YARA-L

אתם יכולים להשתמש בשאילתת YARA-L כדי לשלוח זיהויים והתראות לטבלאות נתונים.

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

מציינים את הפונקציה write_row בקטע הייצוא של שאילתת YARA-L. הפעולה האחרונה בשאילתה חייבת להיות כתיבת נתונים לטבלת הנתונים. כתוצאה מכך, משתני התוצאה נכתבים בטבלת הנתונים.

  • דוגמה

    export:
      %<data_table_name>.write_row(
      data_table_column_x_name: <value>,
      data_table_column_y_name: <value>,
      ...,
      ...,
      data_table_column_z_name: <value>
    )
    // depending on the key column(s), the rows will be updated for existing keys 
    and appended for new keys
    
  • דוגמה: ייצוא תוצאות חיפוש לטבלת נתונים

    events:
      $e.metadata.event_type = "USER_LOGIN"
      $e.security_result.action = "ALLOW"
    
    outcome:
      $user = $e.principal.user.userid
      $ip = $e.target.ip[0] // Assuming target.ip is an array
      $timestamp = $e.metadata.event_timestamp.seconds
    
    export:
      // Write to the data table named 'successful_logins'
      %successful_logins.write_row(
        user: $user,          // Maps $user variable to 'user' column
        ip: $ip,              // Maps $ip variable to 'ip' column
        first_seen: $timestamp // Maps $timestamp variable to 'first_seen' column
      )
    

שינוי טבלת נתונים באמצעות YARA-L

בדוגמה הבאה מוצג איך לשנות טבלת נתונים באמצעות YARA-L:

TableName: ip_user_domain_table (עמודות המפתח של המפתח הראשי מוגדרות בזמן היצירה)

כתובת IP employee_id* דומיין
192.0.2.10 Dana altostrat.com
192.0.2.20 Quinn altostrat.com
192.0.2.30 Lee cymbalgroup.com

‫* מציין את המפתח הראשי.

השאילתה הבאה מתעדת שילובים ייחודיים של principal.ip, principal.user.employee_id ו-target.domain. היא מסננת את התוצאות על סמך השכיחות של target.domain:

  • דוגמה

    events:
      $e.principal.ip = $principal_ip
      $e.principal.user.employee_id = $principal_user_employee_id
      $e.target.domain.name = $target_domain
      $e.target.domain.prevalence.day_count < 5
    
    // To run this query as a rule, add Condition Section here 
    // condition:$e
    

תוצאות השאילתה:

ip empid דומיין
192.0.2.10 Dana altostrat.com
192.0.2.30 Lee examplepetstore.com
192.0.2.20 Quinn altostrat.com

דוגמה: שימוש בפונקציה write_row כדי לכתוב פלט של שאילתה בטבלת נתונים

  • דוגמה לכלל:

    rule udm_write_data_table {
    meta:
        description = "Writeto data table"
    events:
      $e.principal.user.employee_id = $principal_user_employee_id
      $e.target.domain.name = $target_domain
      $e.target.domain.prevalence.day_count < 5
    
    outcome:
      $hostname = $target_domain
      $principal_emp_id = $principal_user_employee_id
    
    condition:
      $e
    
    export:
      %ips_with_hostnames.write_row(
          employeeid:$principal_emp_id,
          hostname:$hostname
      )
    }
    
  • דוגמה לחיפוש:

    events:
      $e.principal.user.employee_id = $principal_user_employee_id
      $e.target.domain.name = $target_domain
      $e.target.domain.prevalence.day_count < 5
    
    outcome:
      $hostname = $target_domain
      $principal_emp_id = $principal_user_employee_id
    
    export:
      %ips_with_hostnames.write_row(
        employeeid:$principal_emp_id,
        hostname:$hostname
      )
    

דוגמה: הסבר על write_row

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

  • דוגמה לכלל:

    rule udm_write_data_table {
    meta:
      description = "Write data table"
    events:
      $e.metadata.event_type = "USER_LOGIN"
      all $e.security_result.action != "BLOCK"
      all $e.security_result.action != "UNKNOWN_ACTION"
    
      $user = $e.principal.user.userid
      $ip = $e.target.ip
      $ts = $e.metadata.event_timestamp.seconds
    
    match:
      $user, $ip over 1h
    
    outcome:
      $first_seen = min($ts)
    
    condition:
      $e
    
    export:
      %successful_logins.write_row(user:$user, ip:$ip)
    }
    
  • דוגמה לחיפוש:

    events:
      $e.metadata.event_type = "USER_LOGIN"
      all $e.security_result.action != "BLOCK"
      all $e.security_result.action != "UNKNOWN_ACTION"
    
      $ts = $e.metadata.event_timestamp.seconds
    
    outcome:
      $user = $e.principal.user.userid
      $ip = $e.target.ip[0]
    
    export:
      %successful_logins.write_row(user:$user, ip:$ip)
    

    אלה נתוני האירוע:

    metadata: {
      event_type: USER_LOGIN
      event_timestamp: { seconds: 1283299200 }
    }
    principal: {
      user: {
        userid: "charlie"
      }
    }
    target: {
      ip: ["192.0.2.135", "192.0.2.136"]
    }
    security_result: {
      action: ALLOW
    }
    
  • הזיהויים הבאים מוחזרים כשמריצים את השאילתה הזו ככלל:

    מזהה הזיהוי התאמה ל-$user Match $ip
    0 צ'רלי 192.0.2.135
    1 צ'רלי 192.0.2.136

    טבלת הנתונים מכילה את הפרטים הבאים:

    user ip
    צ'רלי 192.0.2.135
    צ'רלי 192.0.2.136
  • שאילתת החיפוש הבאה ממחישה את התמיכה שמוצעת בחיפוש לכתיבת ערכים סקלריים בטבלאות נתונים.

    events:
      $e.metadata.event_type = "NETWORK_CONNECTION"
    
    export:
      %summary_table.write_row(col_name: $e.metadata.product_name, Vendor_name: $e.metadata.vendor_name)
    

הוספת טבלת נתונים לגרף של ישויות

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

אפשר להשתמש בתבנית הכלל הבאה כדי לשנות גרף ישויות:

  • תבנית כלל

    rule entity_graph_template {
    
      meta:
        ...
    
      setup:
        // import the data table into entity graph
        <enrichment_keyword> <join_condition>
    
      events:
        ...
    
      match:
        ...
    
      condition:
        ...
    }
    

אתם יכולים להשתמש בפונקציות הבאות של YARA-L 2.0 כדי לשפר את גרף הישויות באמצעות טבלת נתונים:

  • graph_override: החלפת השורות בתרשים הישות שתואמות לתנאי הצירוף בנתונים מטבלת הנתונים.

    לדוגמה: [graph_override](?tab=t.0#heading=h.v0fps7eke1if)

  • graph_append: הוספת השורות מטבלת הנתונים לשורות בתרשים הישות. הפעולה graph_append דורשת מערך שכולל משתנה של טבלת נתונים ומשתנה של אירוע ישות, ולא תנאי של צירוף.

    בדוגמה הבאה, $g1 הוא משתנה של גרף הישויות ו-example_table הוא טבלת הנתונים: graph_append [$g1, %example_table]

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

    • start_time (ממופה ל-metadata.interval.start_time.seconds)

    • end_time (ממופה ל-metadata.interval.end_time.seconds)

    אי אפשר למפות עמודות בטבלת נתונים לשדות מטא נתונים באמצעות ממשק האינטרנט. בappend תרחישי שימוש, צריך ליצור טבלאות נתונים באמצעות Chronicle API (https://cloud.google.com/chronicle/docs/reference/rest/v1alpha/projects.locations.instances.dataTables/create)

  • graph_exclude: הסרת השורות בתרשים הישות שתואמות לתנאי join.

    לדוגמה: [graph_exclude](?tab=t.0#heading=h.o0qbb5paki6g)

תנאי הצירוף חייב להיות ביטוי שוויון בין העמודה בטבלת הנתונים לבין השדה בתרשים הישות. התחביר של הפונקציות graph_override ו-graph_exclude לגישה לטבלת נתונים הוא:

<data_table_name>.<column_name>

כל מסנן שצוין עבור <entity_variable> בקטע האירוע מוחל אחרי השיפור שלו באמצעות טבלת הנתונים.

אחרי שהישות בתרשים הישויות מתעשרת בישות בטבלת הנתונים, צריך לצרף את משתנה הישות בתרשים הישויות לישות ב-UDM.

החלפת גרף הישות בנתונים מטבלת נתונים

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

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

דוגמה: התאמה בהצטרפות יחידה

בדוגמה הבאה, השורות בתרשים הישויות שתואמות לתנאי הצירוף בין העמודה בטבלת הנתונים לבין השדה בתרשים הישויות ($g1.graph.entity.ip = %example_table.my_ip) מוחלפות על ידי טבלת הנתונים.

  • דוגמה

    rule rule_override {
      meta:
      description = "Override entity context with data table before joining with UDM event"
    
      setup:
      //Rows in the entity graph that match the join condition are overridden by the data table
        graph_override ($g1.graph.entity.ip = %example_table.my_ip)
    
      events:
        $e.metadata.event_type = "NETWORK_CONNECTION"
        $e.security_result.action = "ALLOW"
    
        // Filter will be applied after graph is overridden by data table
        $g1.graph.entity.hostname = "ftp01"
    
        // Accessing unmapped columns
        $g1.graph.additional.fields["Owner"] = "alice"
    
        // Joining the UDM event with the enriched entity graph
        $e.target.ip = $iocip
        $g1.graph.entity.ip = $iocip
    
      match:
        $iocip over 1h
    
      condition:
        $e and $g1
    }
    

כדי להשתמש בעמודה לא ממופה (למשל, Owner) של טבלת הנתונים, צריך להשתמש בהצהרה מקבילה עבור $g1.graph.entity.owner = "alice" is $g1.graph.additional.fields["Owner"] = "alice". הסיבה לכך היא שכל העמודות שלא מופו בטבלת הנתונים נכנסות לשדה additional של גרף הישות ($g1).

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

גרף ישויות קיים
שם מארח IP MAC
ftp01 10.1.1.4 …:01
www01 10.1.1.5 …:02
טבלת נתונים
שם מארח IP MAC בעלים
ftp01 10.1.1.4 …:bb alice
h1 10.1.1.6 …:cc bob
h2 10.1.1.7 …:dd chris
h3 10.1.1.4 …:ee אלפי

גרף ישויות מועשר
שם מארח IP MAC בעלים
ftp01 10.1.1.4 …:bb alice
www01 10.1.1.5 …:02
h3 10.1.1.4 …:ee אלפי

דוגמה: התאמה בכמה הצטרפויות

בדוגמה הבאה, השורות בתרשים הישות שתואמות לכמה תנאי הצטרפות ($g1.graph.entity.ip = %example_table.my_ip ו-$g1.graph.entity.hostname = %example_table.my_hostname) מוחלפות על ידי טבלת הנתונים.

  • דוגמה

    rule rule_override {
    meta:
      description = "Override Entity context with Data Table before joining with UDM event"
    setup:
      // example with more than one condition
      graph_override ($g1.graph.entity.ip = %example_table.my_ip and
      $g1.graph.entity.hostname = %example_table.my_hostname) 
    events:
      $e.metadata.event_type = "NETWORK_CONNECTION"
      $e.security_result.action = "ALLOW"
    
      // Filter will be applied after graph is overridden by data table
      $g1.graph.entity.hostname = "ftp01"
    
      // joining the UDM event with the enriched entity graph
      $e.target.ip = $iocip
      $g1.graph.entity.ip = $iocip
    
    match:
      $iocip over 1h
    
    condition:
      $e and $g1
    }
    

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

גרף ישויות קיים
שם מארח IP MAC
ftp01 10.1.1.4 …:01
www01 10.1.1.5 …:02
טבלת נתונים
שם מארח IP MAC בעלים
ftp01 10.1.1.4 …:bb alice
h1 10.1.1.5 …:cc bob
h2 10.1.1.6 …:dd chris
h3 10.1.1.4 …:ee אלפי
גרף ישויות מועשר
שם מארח IP MAC בעלים
ftp01 10.1.1.4 …:bb alice
www01 10.1.1.5 …:02

צירוף נתונים מטבלת הנתונים לגרף הישויות

כשמשתמשים בפונקציה graph_append, לא צריך לציין תנאי לצירוף.

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

  • דוגמה

    rule rule_append {
    meta:
      description = "Data table append entity"
    
    setup:
      graph_append [$g1, %example_table]
    
    events:
      // filter UDM events
      $e.metadata.event_type = "NETWORK_CONNECTION"
      $e.security_result.action = "ALLOW"
    
      // Join the filtered UDM events with the enriched graph
      $e.target.ip = $iocip
      $g1.graph.entity.ip = $iocip
    
    match:
      $iocip over 1h
    
    condition:
      $e and $g1
    }
    

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

גרף ישויות קיים
שם מארח IP MAC
ftp01 10.1.1.4 …:01
www01 10.1.1.5 …:02
טבלת נתונים
IP MAC בעלים
10.1.1.4 …:01 alice
10.1.1.6 …:cc bob
10.1.1.7 …:dd chris
10.1.1.4 …:ee אלפי
גרף ישויות מועשר
שם מארח IP MAC בעלים
ftp01 10.1.1.4 …:01
www01 10.1.1.5 …:02
10.1.1.4 …:bb alice
10.1.1.6 …:cc bob
10.1.1.7 …:dd chris
10.1.1.4 …:ee אלפי

שימוש ב-graph_exclude כדי להסיר שורות מתרשים הישויות

באמצעות הפונקציה graph_exclude, השורות בתרשים הישויות שתואמות לתנאי הצירוף מוסרות מתרשים הישויות.

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

  • דוגמה

    rule rule_exclude {
    
        meta:
        setup:
          graph_exclude ($g1.graph.entity.ip = %example_table.ip)
    
        events:
            $e.metadata.event_type = "NETWORK_CONNECTION"
            $e.security_result.action = "ALLOW"
            $e.target.ip = $iocip
            $g1.graph.entity.ip = $iocip
    
        match:
            $iocip over 1h
    
        condition:
          $e and $g1
    }
    

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

גרף ישויות קיים
שם מארח IP MAC
ftp01 10.1.1.4 …:01
www01 10.1.1.5 …:02
טבלת נתונים
IP MAC בעלים
10.1.1.4 …:bb alice
10.1.1.6 …:cc bob
10.1.1.7 …:dd chris
גרף ישויות מועשר
שם מארח IP MAC
www01 10.1.1.5 …:02

מגבלות קצב של ממשקי API

מכסות השאילתות לדקה (QPM) הבאות נאכפות לכל פרויקט ולכל משתמש כשקוראים לנקודות הקצה של Google SecOps Data Table ו-Data Table Row REST API:

משאב פעולת API מגבלת קצב (סטנדרטית)
DataTables CreateDataTable (data_table/create_requests) ‫60 QPM
DataTables GetDataTable (data_table/get_requests) ‫120 QPM
DataTables ListDataTables (data_table/list_requests) ‫120 QPM
DataTables UpdateDataTable (data_table/update_requests) ‫60 QPM
DataTables DeleteDataTable (data_table/delete_requests) ‫60 QPM
DataTableRows CreateDataTableRow (data_table_row/create_requests) ‫60 QPM
DataTableRows GetDataTableRow (data_table_row/get_requests) ‫120 QPM
DataTableRows ListDataTableRows (data_table_row/list_requests) ‫120 QPM
DataTableRows UpdateDataTableRow (data_table_row/update_requests) ‫60 QPM
DataTableRows DeleteDataTableRow (data_table_row/delete_requests) ‫60 QPM
DataTableRows BulkCreateDataTableRows (סנכרון / אסינכרוני) ‫30 QPM
DataTableRows BulkReplaceDataTableRows (סנכרון / אסינכרוני) ‫30 QPM
DataTableRows BulkUpdateDataTableRows (סנכרון / אסינכרוני) ‫10 QPM
DataTableRows BulkDeleteDataTableRows (סנכרון / אסינכרוני) ‫30 QPM
DataTableRows BulkGetDataTableRows (data_table_row/bulk_get_requests) ‫120 QPM

מגבלות

  • המספר המקסימלי של טבלאות נתונים בחשבון Google SecOps: 1,000.

  • טבלאות נתונים תומכות רק בנתוני CSV. טבלאות נתונים תומכות בערכים מופרדים בטאבים רק כשמוסיפים טבלת נתונים חדשה ומייבאים קובץ של ערכים מופרדים בטאבים (TSV).

  • השדות בטבלת הנתונים לא תומכים בתו פסיק (,).

  • המגבלות על מספר הצהרות in כשמפנים לרשימת הפניות בשאילתה חלות גם על הצהרות in בטבלת נתונים.

  • מספר ההצהרות המקסימלי של in בשאילתה לעמודות מסוג הנתונים String ו-Number: 10.

  • המספר המקסימלי של הצהרות in עם אופרטורים של ביטויים רגולריים: 5.

  • המספר המקסימלי של הצהרות in עם אופרטורים של CIDR: ‏ 5.

  • מספר ההצהרות המקסימלי של = (JOIN): 10.

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

  • מספר השורות המקסימלי לכל טבלת נתונים: 10 מיליון.

  • מגבלת התצוגה המקסימלית בדף אינטרנט לשורות של טבלת נתונים בתצוגת עורך הטקסט והטבלאות: 10,000 שורות.

  • נפח הנתונים המקסימלי בטבלת נתונים: 10GB.

  • אסור להשתמש בplaceholder בקטע ההגדרה.

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

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

  • חיפושים בטבלת נתונים: אין תמיכה בתווים כלליים לחיפוש של ביטויים רגולריים, ומונחי החיפוש מוגבלים ל-100 תווים.

מגבלות על שאילתות איחוד (join) של טבלאות נתונים בכללים

ההגבלות הבאות חלות על צירופים של טבלאות נתונים בכללים.

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

  • בניגוד לישויות ול-UDM, טבלאות נתונים לא תומכות בפלייסהולדרים. הדבר מוביל למגבלות הבאות:

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

    • אי אפשר להחיל קבוצה שונה של מסננים על אותה טבלת נתונים בזמן שמצטרפים אליה עם placeholder אחר של UDM.

    לדוגמה, טבלת נתונים בשם dt עם שלוש עמודות: my_hostname, ‏ org ו-my_email, ועם הכלל הבא:

    events:
      $e1.principal.hostname =  %dt.my_hostname
      %dt.org ="hr"
    
      $e2.principal.email =  %dt.my_email
      %dt.org !="hr"
    

כל המסננים בטבלת נתונים מופעלים קודם, ואז השורות המסוננות מטבלת הנתונים מצורפות ל-UDM. במקרה הזה, המסננים הסותרים (%dt.org ="hr" and %dt.org !="hr") בטבלה dt יוצרים טבלת נתונים ריקה, שמצורפת לטבלאות e1 ו-e2.

מגבלות בשימוש בטבלאות נתונים עם כללים

המגבלות הבאות חלות על טבלאות נתונים כשמשתמשים בהן עם כללים.

מגבלות על תדירות ההפעלה

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

מגבלות על פלט לטבלאות נתונים

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

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

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

  • רשימות העמודות חייבות לכלול את עמודות המפתח הראשי של טבלאות הנתונים.

  • אפשר להגדיר עד 20 תוצאות.

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

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

  • אין ערובה לכך שכלל של יצרן יוכל להוסיף שורות לטבלת נתונים לפני שכלל של צרכן עבור אותה טבלת נתונים יתחיל.

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

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

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

  • אפשר להחיל רק פעולת העשרה אחת (override,‏ append או exclude) על משתנה אחד של גרף ישויות.

  • כל פעולת העשרה יכולה להשתמש רק בטבלת נתונים אחת.

  • אפשר להגדיר עד שתי פעולות העשרה מכל סוג בקטע setup של כלל YARA-L.

בדוגמה הבאה, פעולת override מוחלת על משתנה גרף הישות $g1 ופעולת append מוחלת על משתנה גרף הישות $g2.

  • none setup: graph_override($g1.graph.entity.user.userid = %table1.myids) graph_append [$g2, %table1]

בדוגמה הקודמת, אותה טבלת נתונים (table1) משמשת לשיפור גרפים שונים של ישויות. אפשר גם להשתמש בטבלאות נתונים שונות כדי לשפר את תרשימי הישויות השונים, באופן הבא:

  • none setup: graph_override($g1.graph.entity.user.userid = %table1.myids) graph_append [$g2, %table2]

מגבלות בשימוש בטבלאות נתונים עם חיפוש

המגבלות הבאות חלות על טבלאות נתונים כשמשתמשים בהן עם חיפוש:

  • אי אפשר להריץ שאילתות חיפוש בטבלאות נתונים באמצעות Chronicle API. אפשר להשתמש בשאילתות רק דרך ממשק האינטרנט.

  • הפעלת שאילתה אחת יכולה להפיק עד מיליון שורות לטבלת נתונים או עד 1GB, לפי המגבלה הראשונה שמתקבלת.

  • אם גודל הפלט של חיפוש בטבלת נתונים חורג מ-5MB, שורות האירועים לא נכללות בו.

  • אין תמיכה בהעשרה של ישויות בחיפוש.

  • אין תמיכה בטבלאות נתונים למשתמשים במפתחות הצפנה בניהול הלקוח (CMEK).

  • הכתיבה מוגבלת ל-6 פעמים בדקה לכל לקוח.

  • אין תמיכה ב-API לפעולות בטבלאות נתונים שקשורות לחיפוש.

  • טבלת נתונים וצירופים של טבלאות נתונים נתמכים רק באירועי UDM, ולא בישויות.

    נתמך: %datatable1.column1 = %datatable2.column1

    לא נתמך: graph.entity.hostname = %sample.test

  • אי אפשר לכלול משתנה match בקטע export של שאילתת נתונים סטטיסטיים.

    לדוגמה, אין תמיכה ב:

      match:
          principal.hostname
      export:
          %sample.write_row(
          row: principal.hostname
        )
    
    

מגבלות כשמשנים את השם של טבלאות נתונים או מוחקים אותן באמצעות Chronicle API או Terraform

  • אין תמיכה בשינוי שם דרך הפלטפורמה או ה-API.
  • אי אפשר למחוק טבלת נתונים (דרך הפלטפורמה או ה-API) אם יש הפניה אליה בכלל.
  • ב-Terraform, שינוי השם של טבלת נתונים מפעיל פעולת השמדה ויצירה מחדש. אם יש הפניה לטבלת הנתונים בכלל, הפעולה הזו תיכשל כי ה-API חוסם את המחיקה של הטבלה הישנה.
  • סיכון לאובדן נתונים ב-Terraform: גם אם טבלת נתונים לא מוזכרת בכלל, שינוי השם שלה באמצעות Terraform גורם לאובדן נתונים בלתי הפיך. ‫Terraform משמיד את הטבלה הקיימת ומחליף אותה בטבלה חדשה וריקה שלא מכילה נתונים מהטבלה המקורית.
  • פתרון עקיף מומלץ:
    • יוצרים טבלת נתונים חדשה עם השם החדש.
    • כדי להתחיל להשתמש בטבלת הנתונים החדשה, צריך לעדכן את הכללים.
    • מוחקים את טבלת הנתונים הישנה.

הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.