איסוף יומנים של מסד נתונים ב-Teradata

נתמך ב:

במאמר הזה מוסבר איך להטמיע יומנים של Teradata Database ב-Google Security Operations באמצעות Bindplane.

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

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

חשוב לוודא שמתקיימות הדרישות המוקדמות הבאות:

  • מופע של Google SecOps
  • ‫Windows Server 2016 ואילך, או מארח Linux עם systemd
  • קישוריות לרשת בין סוכן Bindplane לבין שרת מסד הנתונים של Teradata
  • אם מריצים את הסוכן מאחורי שרת proxy, מוודאים שיציאות חומת האש פתוחות בהתאם לדרישות של סוכן Bindplane
  • גישה מיוחדת למערכת מסד הנתונים של Teradata עם הרשאות אדמין

קבלת פרטי כניסה ל-Google SecOps בשביל סוכן Bindplane

כדי לאמת את סוכן Bindplane ב-Google SecOps, בוחרים אחת מהשיטות הבאות:

  • פריסות חדשות: משתמשים ב-Chronicle API (אפשרות 1).
  • פריסות קודמות: ממשיכים להשתמש בקובץ האימות להטמעת נתונים (אפשרות 2) עד שה-Ingestion API יופסק ב-20 ביולי 2027.
  1. נכנסים למסוףGoogle Cloud ובוחרים את הפרויקט ב- Google Cloud שמקושר למכונה של Google SecOps.
  2. נכנסים לדף IAM & Admin > Service Accounts.
  3. לוחצים על יצירת חשבון שירות.
  4. מזינים את פרטי ההגדרה הבאים:
    • Service account name: מזינים שם לחשבון (לדוגמה, bindplane-ingest).
    • Service account description: מזינים תיאור (לדוגמה, Bindplane agent log ingestion).
  5. לוחצים על Create and continue.
  6. בקטע Grant this service account access to project, לוחצים על Select a role ובוחרים באפשרות Chronicle Editor.
  7. לוחצים על המשך ואז על סיום.
  8. לוחצים על חשבון השירות שיצרתם ועוברים לכרטיסייה Keys.
  9. לוחצים על Add key > Create new key.
  10. בוחרים באפשרות JSON ולוחצים על Create. קובץ המפתח יורד למחשב.
  11. שומרים את קובץ המפתח בשם ingestion-auth.json בספריית Bindplane Collector (/opt/observiq-otel-collector/ingestion-auth.json ב-Linux או C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json ב-Windows), או מעדכנים את creds_file_path ב-config.yaml כך שיתאים לנתיב שבו שומרים את הקובץ.
  12. עוברים אל IAM & Admin > Settings ומעתיקים את הערך של Project number. תצטרכו אותו כדי להגדיר את כלי הייצוא.

אפשרות 2: הורדת קובץ אימות להטמעת נתונים (גרסה מדור קודם)

  1. נכנסים למסוף Google SecOps.
  2. עוברים אל הגדרות SIEM > סוכני איסוף.
  3. מורידים את קובץ האימות להטמעת נתונים.
  4. שומרים את הקובץ בצורה מאובטחת במערכת שבה יותקן הסוכן של Bindplane.

איך מוצאים את מספר הלקוח ב-Google SecOps

  1. נכנסים למסוף Google SecOps.
  2. עוברים אל SIEM Settings > Profile.
  3. מעתיקים את מזהה הלקוח מהקטע פרטי הארגון ושומרים אותו.

התקנת הסוכן של Bindplane

מתקינים את סוכן Bindplane במערכת ההפעלה Windows או Linux לפי ההוראות הבאות.

התקנת חלונות

  1. פותחים את שורת הפקודה או את PowerShell כאדמין.
  2. מריצים את הפקודה הבאה:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. מחכים שההתקנה תסתיים.

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

    sc query observiq-otel-collector
    

השירות אמור להופיע כ-RUNNING.

התקנה ב-Linux

  1. פותחים טרמינל עם הרשאות root או sudo.
  2. מריצים את הפקודה הבאה:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. מחכים שההתקנה תסתיים.

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

    sudo systemctl status observiq-otel-collector
    

השירות אמור להופיע כ-active (running).

מקורות מידע נוספים להתקנה

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

הגדרה של סוכן Bindplane להטמעה של syslog ושליחה אל Google SecOps

מאתרים את קובץ התצורה

  • Linux:

    sudo nano /opt/observiq-otel-collector/config.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

עריכת קובץ התצורה

  • מחליפים את כל התוכן של config.yaml בהגדרות הבאות:

    receivers:
      tcplog:
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/teradata_db:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: chronicle.googleapis.com
        log_type: TERADATA_DB
        raw_log_field: body
    
    service:
      pipelines:
        logs/teradata_db_to_chronicle:
          receivers:
            - tcplog
          exporters:
            - chronicle/teradata_db
    

פרמטרים להגדרה

מחליפים את ה-placeholders הבאים:

  • הגדרת המקלט:

    • ‫listen_address: כתובת ה-IP והיציאה להאזנה:
      • 0.0.0.0 כדי להאזין בכל הממשקים (מומלץ)
      • יציאה 514 היא יציאת syslog הרגילה (נדרש root ב-Linux; צריך להשתמש ב-1514 ללא root)
  • הגדרת כלי הייצוא:

    • ‫creds_file_path: הנתיב המלא לקובץ המפתח של חשבון השירות בפורמט JSON (אפשרות 1):
      • Linux: /opt/observiq-otel-collector/ingestion-auth.json
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • ‫customer_id: מספר הלקוח שהועתק ממסוף Google SecOps
    • ‫location: מחליפים את <LOCATION> באזור של מופע Google SecOps (לדוגמה, us,‏ europe או asia-southeast1). ערך זה מתווסף לתחילית chronicle.googleapis.com של הכלי לייצוא. לרשימה המלאה, ראו נקודות קצה אזוריות.
    • ‫project: מחליפים את <PROJECT_NUMBER> במספר הפרויקט שמופיע בקטע IAM & Admin > Settings.
    • ‫endpoint: צריך להשאיר את ההגדרה chronicle.googleapis.com.

כלי לייצוא נתונים מ-Legacy ingestion API

  • אם אתם משתמשים בקובץ האימות להטמעת נתונים מאפשרות 2, החליפו את הבלוק exporters בקוד הבא. מגדירים את creds_file_path לנתיב של קובץ האימות להטמעת נתונים. אם המכונה נמצאת מחוץ לארה"ב, מחליפים את malachiteingestion-pa.googleapis.com בנקודת הקצה האזורית (לדוגמה, europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/teradata_db:
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: TERADATA_DB
        raw_log_field: body
    

שמירת קובץ התצורה

  • אחרי שמסיימים לערוך, שומרים את הקובץ:
    • Linux: מקישים על Ctrl+O, אחר כך על Enter ואז על Ctrl+X
    • ‫Windows: לוחצים על קובץ > שמירה.

מפעילים מחדש את הסוכן של Bindplane כדי להחיל את השינויים.

כדי להפעיל מחדש את סוכן Bindplane ב-Linux:

  1. מריצים את הפקודה הבאה:

    sudo systemctl restart observiq-otel-collector
    
  2. מוודאים שהשירות פועל:

    sudo systemctl status observiq-otel-collector
    
  3. בודקים אם יש שגיאות ביומנים:

    sudo journalctl -u observiq-otel-collector -f
    

כדי להפעיל מחדש את סוכן Bindplane ב-Windows:

  1. בוחרים אחת מהאפשרויות האלה:

    • שורת הפקודה או PowerShell כאדמין:
    net stop observiq-otel-collector && net start observiq-otel-collector
    
    • מסוף השירותים:
      1. לוחצים על Win+R, מקלידים services.msc ולוחצים על Enter.
      2. מחפשים את observIQ OpenTelemetry Collector.
      3. לוחצים לחיצה ימנית ובוחרים באפשרות הפעלה מחדש.
  2. מוודאים שהשירות פועל:

    sc query observiq-otel-collector
    
  3. בודקים אם יש שגיאות ביומנים:

    type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
    

הגדרת העברת syslog של מסד נתונים של Teradata

  1. נכנסים לשרת Teradata Database כאדמינים.
  2. מגדירים העברה של syslog באמצעות כלי הרישום של Teradata Database Gateway. עורכים את קובץ התצורה של rsyslog:

    sudo nano /etc/rsyslog.d/teradata.conf
    
  3. כדי להעביר את היומנים של Teradata לסוכן Bindplane, מוסיפים את השורות הבאות:

    # Forward Teradata Database logs to Bindplane agent
    if $programname == 'teradata' then @@<bindplane-ip>:514
    
    • מחליפים את <bindplane-ip> בכתובת ה-IP של המארח של סוכן Bindplane.
  4. מפעילים מחדש את שירות rsyslog:

    sudo systemctl restart rsyslog
    
  5. כדי לוודא שהיומנים נשלחים, בודקים את היומנים של סוכן Bindplane.

טבלת מיפוי UDM

שדה ביומן מיפוי UDM היגיון
additional.fields המיזוג מתבצע מתוויות שונות כמו collect_timestamp_label, ‏ logon_date_time_label, ‏ logon_source_label, ‏ protocol_label, ‏ remote_hostname_label, ‏ logon_details_label, ‏ port_label, ‏ connection_id_label, ‏ cid_label, ‏ jdbc_driver_info_label, ‏ request_mode_label, ‏ statement_group_label, ‏ statement_type_label
app_id target.asset.product_object_id הערך הועתק ישירות
client_addr principal.asset.hostname, principal.asset.ip, principal.hostname, principal.ip הערך הועתק ישירות לכל
client_id target.asset.asset_id משורשר כ-CLIENT_ID:%{client_id}
collect_timestamp metadata.collected_timestamp ההמרה מתבצעת באמצעות התאמה לתאריך עם הפורמטים RFC 3339, ‏ UNIX_MS, ‏ UNIX, ‏ ISO8601, ‏ yyyy-MM-dd HH:mm:ss
default_database target.resource.name, target.resource.resource_type הערך מועתק ישירות לשם; הערך הוא DATABASE עבור resource_type
error_code network.http.response_code, additional.fields הומר למספר שלם עבור response_code; הועתק ל-error_code_label ומוזג לתוך additional.fields
error_text security_result.summary הערך הועתק ישירות
host_name principal.asset.hostname, principal.hostname הערך הועתק ישירות לשני המאפיינים
logon_date_time metadata.event_timestamp ההמרה בוצעה באמצעות התאמת תאריך בפורמטים ISO8601, ‏ yyyy-MM-dd HH:mm:ss
logon_source target.resource.parent הערך הועתק ישירות
logon_source additional.fields חולץ logonSource באמצעות grok, ואז הוגדר כ-%{logonSource}LSS ב-logon_source_label שמוזג ל-additional.fields
logon_source additional.fields הפרוטוקול, remote_hostname, היציאה, פרטי הכניסה, connection_id,‏ cid ו-jdbc_driver_info חולצו באמצעות grok, ואז הוגדרו בתוויות המתאימות שמוזגו ל-additional.fields
proc_id target.resource.id הערך הועתק ישירות
profile_name target.resource.attribute.labels ההגדרה ב-profile_name_label מוזגה ל-attribute.labels
query_text target.process.command_line הערך הועתק ישירות
request_mode target.resource.resource_subtype, additional.fields הערך הועתק ישירות אל resource_subtype; הערך שהוגדר ב-request_mode_label מוזג אל additional.fields
session_id network.session_id הערך הועתק ישירות
statement_group principal.user.groupid, additional.fields הערך הועתק ישירות ל-groupid; הערך שהוגדר ב-statement_group_label מוזג ל-additional.fields
statement_type security_result.about.labels, additional.fields הוגדר ב-statementtype_value_label ומוזג ל-about.labels; הוגדר ב-statement_type_label ומוזג ל-additional.fields
ts metadata.event_timestamp ההמרה בוצעה באמצעות התאמת תאריך עם הפורמטים MMM d HH:mm:ss, ‏ MMM dd HH:mm:ss, ‏ SYSLOGTIMESTAMP, ‏ RFC 3339, ‏ UNIX, ‏ ISO8601, ‏ UNIX_MS
tt_granularity target.resource.product_object_id הערך הועתק ישירות
user_id principal.user.userid הערך הועתק ישירות
user_name principal.user.user_display_name הערך הועתק ישירות
metadata.event_type הערך מוגדר כ-USER_RESOURCE_ACCESS אם has_principal,‏ has_principal_user,‏ has_target_resource הם true. אחרת, הערך מוגדר כ-STATUS_UPDATE אם has_principal הוא true. אחרת, הערך מוגדר כ-GENERIC_EVENT
metadata.product_name ההגדרה היא TERADATA_DB
metadata.vendor_name צריך להגדיר את הערך "TERADATA"
profile_name event.idm.read_only_udm.target.resource.attribute.labels מופה מיומן השינויים
proc_id event.idm.read_only_udm.target.resource.id מופה מיומן השינויים
user_id event.idm.read_only_udm.principal.user.userid מופה מיומן השינויים
collect_timestamp event.idm.read_only_udm.metadata.collected_timestamp מופה מיומן השינויים
logon_date_time event.idm.read_only_udm.metadata.event_timestamp מופה מיומן השינויים
user_name event.idm.read_only_udm.principal.user.user_display_name מופה מיומן השינויים
logon_source event.idm.read_only_udm.target.resource.parent מופה מיומן השינויים
app_id event.idm.read_only_udm.target.asset.product_object_id מופה מיומן השינויים
client_id event.idm.read_only_udm.target.asset.asset_id מופה מיומן השינויים
error_code event.idm.read_only_udm.network.http.response_code מופה מיומן השינויים
statement_type event.idm.read_only_udm.security_result.about.labels מופה מיומן השינויים
statement_group event.idm.read_only_udm.principal.user.groupid מופה מיומן השינויים
request_mode event.idm.read_only_udm.target.resource.resource_subtype מופה מיומן השינויים
tt_granularity event.idm.read_only_udm.target.resource.product_object_id מופה מיומן השינויים
protocol event.idm.read_only_udm.additional.fields מופה מיומן השינויים
remote_hostname event.idm.read_only_udm.additional.fields מופה מיומן השינויים
logon_details event.idm.read_only_udm.additional.fields מופה מיומן השינויים
connection_id event.idm.read_only_udm.additional.fields מופה מיומן השינויים
port event.idm.read_only_udm.additional.fields מופה מיומן השינויים
cid event.idm.read_only_udm.additional.fields מופה מיומן השינויים
jdbc_driver_info event.idm.read_only_udm.additional.fields מופה מיומן השינויים
app_id principal.application מופה מיומן השינויים
collect_timestamp event.idm.read_only_udm.additional.fields מופה מיומן השינויים
error_code security_result.detection_fields מופה מיומן השינויים
logon_date_time event.idm.read_only_udm.additional.fields מופה מיומן השינויים
logon_source event.idm.read_only_udm.additional.fields מופה מיומן השינויים
proc_id principal.process.pid מופה מיומן השינויים
request_mode event.idm.read_only_udm.additional.fields מופה מיומן השינויים
statement_group event.idm.read_only_udm.additional.fields מופה מיומן השינויים
statement_type event.idm.read_only_udm.additional.fields מופה מיומן השינויים
user_id target.user.userid מופה מיומן השינויים
user_name target.user.user_display_name מופה מיומן השינויים

יומן שינויים

צפייה ביומן השינויים של המנתח הזה

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