איסוף יומני ביקורת של HashiCorp Vault

נתמך ב:

במאמר הזה מוסבר איך להטמיע יומני ביקורת של HashiCorp Vault ב-Google Security Operations באמצעות Bindplane.

‫HashiCorp Vault היא פלטפורמה לניהול סודות ולהגנה על נתונים, שמספקת אחסון מאובטח, יצירה דינמית של סודות, הצפנת נתונים ובקרת גישה מבוססת-זהויות. שירות Vault יוצר יומני ביקורת שמתעדים את כל הבקשות והתשובות ל-Vault, כולל אימות, גישה לסודות ושינויים במדיניות. אפשר להעביר את יומני הביקורת האלה באמצעות syslog ל-SIEM לצורך ניטור לצורכי אבטחה ותאימות.

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

חשוב לוודא שיש לכם את הדברים הבאים:

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

קבלת קובץ אימות להטמעת נתונים ב-Google SecOps

  1. נכנסים למסוף Google SecOps.
  2. עוברים אל SIEM Settings > Collection Agents.
  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](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](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 /etc/bindplane-agent/config.yaml
    
  • ‫Windows:

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

עריכת קובץ ההגדרות

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

    receivers:
      tcplog:
        listen_address: "0.0.0.0:1514"
    
    exporters:
      chronicle/vault:
        compression: gzip
        creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
        customer_id: 'your-customer-id-here'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: HASHICORP
        raw_log_field: body
        ingestion_labels:
          env: production
    
    service:
      pipelines:
        logs/vault_to_chronicle:
          receivers:
            - tcplog
          exporters:
            - chronicle/vault
    

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

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

  • הגדרת מקלט:

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

    • ‫creds_file_path: הנתיב המלא לקובץ האימות להטמעת נתונים:
      • Linux: /etc/bindplane-agent/ingestion-auth.json
      • ‫Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • ‫customer_id: מספר הלקוח שלכם ב-Google SecOps.
    • ‫endpoint: כתובת ה-URL של נקודת הקצה האזורית:
      • ארה"ב: malachiteingestion-pa.googleapis.com
      • אירופה: europe-malachiteingestion-pa.googleapis.com
      • אסיה: asia-southeast1-malachiteingestion-pa.googleapis.com
      • רשימה מלאה של נקודות הקצה האזוריות מופיעה במאמר Regional Endpoints.
    • ‫ingestion_labels: תוויות אופציונליות בפורמט YAML (לדוגמה, env: production).

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

אחרי העריכה, שומרים את הקובץ:

  • ‫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"
    

הגדרת העברה של יומן ביקורת של HashiCorp Vault באמצעות syslog

יומני הביקורת של מכשירי Vault מתעדים את כל הבקשות והתגובות. אתם יכולים להפעיל מכשיר ביקורת של syslog כדי להעביר את יומני הביקורת לסוכן Bindplane.

הפעלת מכשיר לביקורת ב-syslog

  1. פותחים טרמינל עם גישה ל-Vault CLI ואסימון Vault תקין.
  2. מריצים את הפקודה הבאה כדי להפעיל את מכשיר הביקורת של syslog:

    vault audit enable syslog tag="vault" facility="AUTH"
    
  3. מוודאים שהמכשיר לביקורת מופעל:

    vault audit list
    

הפלט צריך להראות שמכשיר syslog audit מופעל.

הגדרת העברת syslog לסוכן Bindplane

אחרי שמפעילים את מכשיר הביקורת של Vault syslog, מגדירים את שד ה-syslog של המערכת (rsyslog או syslog-ng) כדי להעביר את יומני הביקורת של Vault לסוכן Bindplane.

אפשרות – הגדרת rsyslog

  1. יוצרים קובץ תצורה חדש של rsyslog:

    sudo nano /etc/rsyslog.d/50-vault-forward.conf
    
  2. מוסיפים את ההגדרות הבאות:

    # Forward Vault audit logs to Bindplane agent
    if $programname == 'vault' then @@BINDPLANE_IP:1514
    

    מחליפים את BINDPLANE_IP בכתובת ה-IP של המארח של סוכן Bindplane.

  3. מפעילים מחדש את rsyslog:

    sudo systemctl restart rsyslog
    

אפשרות – הגדרת syslog-ng

  1. עורכים את קובץ ההגדרות של syslog-ng:

    sudo nano /etc/syslog-ng/conf.d/vault-forward.conf
    
  2. מוסיפים את ההגדרה הבאה:

    destination d_bindplane {
        network("BINDPLANE_IP" port(1514) transport("tcp"));
    };
    
    filter f_vault {
        program("vault");
    };
    
    log {
        source(s_src);
        filter(f_vault);
        destination(d_bindplane);
    };
    

    מחליפים את BINDPLANE_IP בכתובת ה-IP של המארח של סוכן Bindplane.

  3. מפעילים מחדש את syslog-ng:

    sudo systemctl restart syslog-ng
    

חלופה – ביקורת מבוססת-קבצים עם כלי להעברת יומנים

אם אתם לא מעדיפים ביקורת של syslog, אתם יכולים להפעיל מכשיר לביקורת קבצים ולהעביר את תוכן הקובץ:

  1. הפעלת ביקורת על קבצים במכשיר:

    vault audit enable file file_path=/var/log/vault/audit.log
    
  2. מגדירים את rsyslog כדי לעקוב אחרי הקובץ ולהעביר אותו:

    sudo nano /etc/rsyslog.d/50-vault-file-forward.conf
    
    module(load="imfile")
    input(type="imfile"
        File="/var/log/vault/audit.log"
        Tag="vault-audit"
        Severity="info"
        Facility="auth")
    
    if $syslogtag == 'vault-audit' then @@BINDPLANE_IP:1514
    

    מחליפים את BINDPLANE_IP בכתובת ה-IP של המארח של סוכן Bindplane.

  3. מפעילים מחדש את rsyslog:

    sudo systemctl restart rsyslog
    

אימות העברת היומנים

  1. ביצוע פעולה ב-Vault (לדוגמה, התחברות או קריאת סוד):

    vault login token=<YOUR_TOKEN>
    
  2. בודקים את היומנים של סוכן Bindplane כדי לוודא שהיומנים מתקבלים.

מידע נוסף זמין במסמכי התיעוד בנושא מכשירי ביקורת של HashiCorp Vault.

טבלת מיפוי UDM

שדה ביומן מיפוי UDM היגיון
auth.client_token network.session_id הערך נלקח מ-auth.client_token (מגובב).
auth.display_name principal.user.user_display_name הערך נלקח מ-auth.display_name.
auth.metadata.role_name principal.user.attribute.roles.name הערך נלקח מ-auth.metadata.role_name.
auth.policies principal.user.attribute.permissions.name הערכים נלקחים מהמערך auth.policies.
auth.token_type additional.fields הערך נלקח מ-auth.token_type ונוסף עם המפתח token_type.
request.id metadata.product_log_id הערך נלקח מ-request.id.
request.operation metadata.product_event_type הערך נלקח מ-request.operation.
request.path target.resource.name הערך נלקח מ-request.path.
request.remote_address principal.ip הערך נלקח מ-request.remote_address.
request.namespace.id target.namespace הערך נלקח מ-request.namespace.id.
response.auth.client_token network.session_id הערך נלקח מהתשובה client_token (מגובב).
type metadata.product_event_type מצורף לפעולה (לדוגמה, request או response).
time metadata.event_timestamp מנותח כחותמת זמן של RFC 3339.
error security_result.description הערך נלקח מהשדה error אם הוא קיים.
metadata.vendor_name מגדירים את האפשרות HashiCorp.
metadata.product_name מגדירים את האפשרות Vault.
metadata.event_type מגדירים את הערך USER_RESOURCE_ACCESS לפעולות סודיות, USER_LOGIN לפעולות אימות ו-GENERIC_EVENT לכל שאר הפעולות.
response.auth.metadata.username event.idm.read_only_udm.target.user.userid מופה מיומן השינויים
appname event.idm.read_only_udm.target.application מופה מיומן השינויים
priority event.idm.read_only_udm.security_result.priority_details מופה מיומן השינויים
proc_id event.idm.read_only_udm.observer.process.pid מופה מיומן השינויים
auth.policies event.idm.read_only_udm.additional.fields מופה מיומן השינויים
auth.token_policies event.idm.read_only_udm.additional.fields מופה מיומן השינויים
request.policy_override event.idm.read_only_udm.target.resource.attribute.labels מופה מיומן השינויים
response.data.admin_password event.idm.read_only_udm.target.resource.attribute.labels מופה מיומן השינויים
response.data.admin_token event.idm.read_only_udm.target.resource.attribute.labels מופה מיומן השינויים
response.data.admin_user event.idm.read_only_udm.target.resource.attribute.labels מופה מיומן השינויים
response.data.certificate event.idm.read_only_udm.target.resource.attribute.labels מופה מיומן השינויים
response.data.check_url event.idm.read_only_udm.target.resource.attribute.labels מופה מיומן השינויים
response.data.keystore event.idm.read_only_udm.target.resource.attribute.labels מופה מיומן השינויים
response.data.keystore_password event.idm.read_only_udm.target.resource.attribute.labels מופה מיומן השינויים
response.data.private_key event.idm.read_only_udm.target.resource.attribute.labels מופה מיומן השינויים
type event.idm.read_only_udm.additional.fields מופה מיומן השינויים
auth.identity_policies event.idm.read_only_udm.additional.fields מופה מיומן השינויים
request.data event.idm.read_only_udm.additional.fields מופה מיומן השינויים
facility event.idm.read_only_udm.additional.fields מופה מיומן השינויים
task event.idm.read_only_udm.additional.fields מופה מיומן השינויים
jsonPayload.auth.policy_results.granting_policies.type", "jsonPayload.auth.policy_results.granting_policies.name", and "jsonPayload.auth.policy_results.granting_policies.namespace_id additional.fields מופה מיומן השינויים
jsonPayload.request.namespace.id target.namespace מופה מיומן השינויים
jsonPayload.cos.googleapis.com/container_id", "jsonPayload.cos.googleapis.com/container_name", "jsonPayload.cos.googleapis.com/stream additional.fields מופה מיומן השינויים
resource.labels.instance_id principal.resource.product_object_id מופה מיומן השינויים
principal.resource.attribute.cloud.availability_zone resource.labels.zone מופה מיומן השינויים
logName security_result.category_details מופה מיומן השינויים
resource.labels.namespace_name target.namespace מופה מיומן השינויים
resource.labels.pod_name", "resource.labels.container_name additional.fields מופה מיומן השינויים
resource.labels.project_id target.cloud.project.name מופה מיומן השינויים
resource.labels.location target.location.name מופה מיומן השינויים
insertId metadata.product_log_id מופה מיומן השינויים
labels.k8s-pod/app_kubernetes_io/instance", "labels.k8s-pod/app_kubernetes_io/name", "labels.k8s-pod/component", "labels.k8s-pod/helm_sh/chart", "labels.k8s-pod/controller-revision-hash", "labels.k8s-pod/vault-initialized", "labels.k8s-pod/vault-version", "labels.k8s-pod/vault-sealed", "labels.k8s-pod/vault-perf-standby", and "labels.k8s-pod/vault-active target.resource.attribute.labels מופה מיומן השינויים
labels.compute.googleapis.com/resource_name target.resource.name מופה מיומן השינויים
status network.http.response_code מופה מיומן השינויים
runner principal.user.userid מופה מיומן השינויים
job_id", "job_status additional.fields מופה מיומן השינויים
host observer.hostname מופה מיומן השינויים
cluster observer.resource.name מופה מיומן השינויים
cluster observer.resource.resource_type מופה מיומן השינויים

יומן שינויים

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

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