איסוף יומנים של מתג Arista

גרסת המנתח: 3.0

נתמך ב:

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

מערכת Arista EOS (מערכת הפעלה ניתנת להרחבה) פועלת במתגי רשת של Arista ויוצרת הודעות syslog לאירועי מערכת, שינויים בממשק, אימות, חשבונאות AAA ושינויים במצב הפרוטוקול. המנתח מטפל גם בפורמטים של JSON וגם בפורמטים של syslog.

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

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

  • מופע של Google SecOps
  • ‫Windows Server 2016 ואילך, או מארח Linux עם systemd
  • קישוריות לרשת בין סוכן Bindplane לבין מתג Arista
  • אם מריצים את הסוכן מאחורי שרת proxy, מוודאים שיציאות חומת האש פתוחות בהתאם לדרישות של סוכן Bindplane
  • ‫Arista EOS 4.23.x ואילך
  • Privileged access on the Arista EOS switch

קבלת פרטי כניסה ל-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 (ניהול הרשאות גישה (IAM) & אדמין > חשבונות שירות).
  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 בספריית ה-collector של Bindplane (/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 Settings > Collection Agents (הגדרות SIEM > סוכני איסוף).
  3. מורידים את קובץ האימות להטמעת נתונים.
  4. שומרים את הקובץ בצורה מאובטחת במערכת שבה יותקן הסוכן של Bindplane.

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

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

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

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

התקנה ב-Windows

  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:
      udplog:
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/arista_switch:
        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: ARISTA_SWITCH
        raw_log_field: body
    
    service:
      pipelines:
        logs/arista_to_chronicle:
          receivers:
            - udplog
          exporters:
            - chronicle/arista_switch
    

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

מחליפים את ה-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.

מייצא API להטמעה מדור קודם

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

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

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

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

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

  • כדי להפעיל מחדש את הסוכן של Bindplane ב-Linux, מריצים את הפקודה הבאה:

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

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

      ```bash
      sudo journalctl -u observiq-otel-collector -f
      ```
      
  • כדי להפעיל מחדש את הסוכן של Bindplane ב-Windows, בוחרים באחת מהאפשרויות הבאות:

    • שורת פקודה או PowerShell כאדמין:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • מסוף השירותים:

      1. לוחצים על Win+R, מקלידים services.msc ולוחצים על Enter.
      2. מאתרים את observIQ OpenTelemetry Collector.
      3. לוחצים לחיצה ימנית ובוחרים באפשרות הפעלה מחדש.
      4. מוודאים שהשירות פועל:

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

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

הגדרת syslog במתג Arista

  1. נכנסים למתג Arista.
  2. נכנסים למצב הגדרה:

    Arista# configure terminal
    
  3. מגדירים את היעד של syslog לשליחת יומנים לסוכן Bindplane:

    Arista(config)# logging host <bindplane-server-ip> <port-number> protocol udp
    Arista(config)# logging trap informational
    Arista(config)# copy running-config startup-config
    
    • מחליפים את <bindplane-server-ip> בכתובת ה-IP של סוכן Bindplane.
    • מחליפים את <port-number> ביציאה שהוגדרה להאזנה (לדוגמה, 514).
  4. (אופציונלי) מפעילים רישום ביומן של ביצוע פקודות לחישוב עלויות של AAA:

    Arista(config)# aaa accounting commands all console start-stop logging
    Arista(config)# aaa accounting commands all default start-stop logging
    Arista(config)# aaa accounting exec console start-stop logging
    Arista(config)# aaa accounting exec default start-stop logging
    Arista(config)# copy running-config startup-config
    
  5. (אופציונלי) הפעלת רישום ביומן של הצלחה וכישלון באימות:

    Arista(config)# aaa authentication policy on-success log
    Arista(config)# aaa authentication policy on-failure log
    Arista(config)# copy running-config startup-config
    

טבלת מיפוי UDM

שדה ביומן מיפוי UDM היגיון
appname target.application ממופה ישירות מהשדה appname.
description metadata.description ממופה ישירות מהשדה description, שחולץ מהשדה message באמצעות תבניות grok שמבוססות על product_event_type.
dst_ip target.ip, target.asset.ip ממופה ישירות מהשדה dst_ip, שמחולץ מהשדה message באמצעות דפוסי grok.
dst_mac target.mac ממופה ישירות מהשדה dst_mac, שחולץ מהשדה message באמצעות תבניות grok.
dst_port target.port ממופה ישירות מהשדה dst_port, שמחולץ מהשדה message באמצעות דפוסי grok.
facility additional.fields[facility].string_value ממופה ישירות מהשדה facility.
hostname principal.hostname, principal.asset.hostname ממופה ישירות מהשדה hostname.
inner_msg metadata.description ממופה ישירות מהשדה inner_msg, שמחולץ מהשדה message באמצעות דפוסי grok.
ip_protocol network.ip_protocol ממופה ישירות מהשדה ip_protocol, שחולץ מהשדה message באמצעות תבניות grok. אם הערך הוא "tcp", הוא מומר ל-"TCP". אם סוג האירוע הוא NO_IGMP_QUERIER, הוא מוגדר כ-IGMP.
pid principal.process.pid ממופה ישירות מהשדה pid, שמחולץ מהשדה message באמצעות דפוסי grok.
prin_ip principal.ip, principal.asset.ip ממופה ישירות מהשדה prin_ip, שמחולץ מהשדה message באמצעות דפוסי grok.
product_event_type metadata.product_event_type ממופה ישירות מהשדה product_event_type, שמחולץ מהשדה message באמצעות דפוסי grok.
proto network.application_protocol אם השדה proto הוא 'sshd', השדה UDM מוגדר כ-'SSH'.
severity security_result.severity, security_result.severity_details הערך של security_result.severity נגזר מהשדה severity על סמך המיפויים הבאים: DEFAULT,‏ DEBUG,‏ INFO,‏ NOTICE -> INFORMATIONAL;‏ WARNING,‏ ERROR,‏ ERR,‏ WARN -> MEDIUM;‏ CRITICAL,‏ ALERT,‏ EMERGENCY -> HIGH. הערך הגולמי של severity ממופה אל security_result.severity_details.
session_id network.session_id ממופה ישירות מהשדה session_id, שחולץ מהשדה message באמצעות תבניות grok.
source_ip principal.ip, principal.asset.ip ממופה ישירות מהשדה source_ip, שחולץ מהשדה message באמצעות תבניות grok.
source_port principal.port ממופה ישירות מהשדה source_port, שמחולץ מהשדה message באמצעות דפוסי grok.
src_ip principal.ip, principal.asset.ip ממופה ישירות מהשדה src_ip, שמחולץ מהשדה message באמצעות דפוסי grok.
table_name target.resource.name ממופה ישירות מהשדה table_name, שחולץ מהשדה message באמצעות תבניות grok. אם השדה הזה מאוכלס, הערך של target.resource.resource_type מוגדר כ-"TABLE".
target_host target.hostname, target.asset.hostname ממופה ישירות מהשדה target_host, שחולץ מהשדה message באמצעות תבניות grok.
target_ip target.ip, target.asset.ip ממופה ישירות מהשדה target_ip, שחולץ מהשדה message באמצעות תבניות grok.
target_package target.process.command_line ממופה ישירות מהשדה target_package, שחולץ מהשדה message באמצעות תבניות grok.
target_port target.port ממופה ישירות מהשדה target_port, שחולץ מהשדה message באמצעות תבניות grok.
timestamp metadata.event_timestamp ממופה ישירות מהשדה timestamp אחרי ניתוח לאובייקט של חותמת זמן.
user principal.user.userid ממופה ישירות מהשדה user, שמחולץ מהשדה message באמצעות דפוסי grok.
user_name target.user.userid ממופה ישירות מהשדה user_name, שחולץ מהשדה message באמצעות תבניות grok.
vrf additional.fields[vrf].string_value ממופה ישירות מהשדה vrf, שמחולץ מהשדה message באמצעות דפוסי grok. השדה נגזר משילוב של השדות has_principal, ‏ has_target, ‏ user, ‏ message, ‏ product_event_type ו-description באמצעות לוגיקה מותנית מורכבת, כפי שמתואר בקוד המנתח. ערך ברירת המחדל הוא "GENERIC_EVENT". הערך מוטמע בקוד כ-ARISTA_SWITCH. הערך מוטמע בקוד כ-"Arista Switch". מקודד באופן קשיח ל-"Arista". הערך צריך להיות BLOCK אם השדה description מכיל את הערך connection rejected.
dpid additional.fields[DPID].string_value ממופה ישירות מהשדה dpid.
intf additional.fields[intf].string_value ממופה ישירות מהשדה intf.

יומן שינויים

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

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