איסוף יומני ביקורת של 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
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Collection Agents.
- מורידים את קובץ האימות להטמעת נתונים.
- שומרים את הקובץ באופן מאובטח במערכת שבה יותקן Bindplane.
איך מוצאים את מספר הלקוח ב-Google SecOps
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Profile (הגדרות SIEM > פרופיל).
- מעתיקים את מזהה הלקוח מהקטע פרטי הארגון ושומרים אותו.
התקנת סוכן Bindplane
מתקינים את הסוכן של Bindplane במערכת ההפעלה Windows או Linux לפי ההוראות הבאות.
התקנה ב-Windows
- פותחים את שורת הפקודה או את PowerShell כאדמין.
מריצים את הפקודה הבאה:
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מחכים שההתקנה תסתיים.
כדי לוודא שההתקנה בוצעה, מריצים את הפקודה:
sc query observiq-otel-collector
השירות צריך להופיע עם הערך RUNNING.
התקנה ב-Linux
- פותחים טרמינל עם הרשאות root או sudo.
מריצים את הפקודה הבאה:
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מחכים שההתקנה תסתיים.
כדי לוודא שההתקנה בוצעה, מריצים את הפקודה:
sudo systemctl status observiq-otel-collector
השירות אמור להופיע כ-active (running).
מקורות מידע נוספים להתקנה
אפשרויות התקנה נוספות ופתרון בעיות מפורטים במדריך להתקנת סוכן Bindplane.
הגדרה של סוכן Bindplane לקליטת syslog ושליחה ל-Google SecOps
מאתרים את קובץ התצורה
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
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
- Linux:
-
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:
מריצים את הפקודה הבאה:
sudo systemctl restart observiq-otel-collectorמוודאים שהשירות פועל:
sudo systemctl status observiq-otel-collectorבודקים אם יש שגיאות ביומנים:
sudo journalctl -u observiq-otel-collector -f
כדי להפעיל מחדש את סוכן Bindplane ב-Windows:
בוחרים אחת מהאפשרויות האלה:
- שורת הפקודה או PowerShell כאדמין:
net stop observiq-otel-collector && net start observiq-otel-collector- מסוף השירותים:
- מקישים על
Win+R, מקלידיםservices.mscומקישים על Enter. - מאתרים את observIQ OpenTelemetry Collector.
- לוחצים לחיצה ימנית ובוחרים באפשרות הפעלה מחדש.
- מקישים על
מוודאים שהשירות פועל:
sc query observiq-otel-collectorבודקים אם יש שגיאות ביומנים:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
הגדרת העברה של יומן ביקורת של HashiCorp Vault באמצעות syslog
יומני הביקורת של מכשירי Vault מתעדים את כל הבקשות והתגובות. אתם יכולים להפעיל מכשיר ביקורת של syslog כדי להעביר את יומני הביקורת לסוכן Bindplane.
הפעלת מכשיר לביקורת ב-syslog
- פותחים טרמינל עם גישה ל-Vault CLI ואסימון Vault תקין.
מריצים את הפקודה הבאה כדי להפעיל את מכשיר הביקורת של syslog:
vault audit enable syslog tag="vault" facility="AUTH"מוודאים שהמכשיר לביקורת מופעל:
vault audit list
הפלט צריך להראות שמכשיר syslog audit מופעל.
הגדרת העברת syslog לסוכן Bindplane
אחרי שמפעילים את מכשיר הביקורת של Vault syslog, מגדירים את שד ה-syslog של המערכת (rsyslog או syslog-ng) כדי להעביר את יומני הביקורת של Vault לסוכן Bindplane.
אפשרות – הגדרת rsyslog
יוצרים קובץ תצורה חדש של rsyslog:
sudo nano /etc/rsyslog.d/50-vault-forward.confמוסיפים את ההגדרות הבאות:
# Forward Vault audit logs to Bindplane agent if $programname == 'vault' then @@BINDPLANE_IP:1514מחליפים את
BINDPLANE_IPבכתובת ה-IP של המארח של סוכן Bindplane.מפעילים מחדש את rsyslog:
sudo systemctl restart rsyslog
אפשרות – הגדרת syslog-ng
עורכים את קובץ ההגדרות של syslog-ng:
sudo nano /etc/syslog-ng/conf.d/vault-forward.confמוסיפים את ההגדרה הבאה:
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.מפעילים מחדש את syslog-ng:
sudo systemctl restart syslog-ng
חלופה – ביקורת מבוססת-קבצים עם כלי להעברת יומנים
אם אתם לא מעדיפים ביקורת של syslog, אתם יכולים להפעיל מכשיר לביקורת קבצים ולהעביר את תוכן הקובץ:
הפעלת ביקורת על קבצים במכשיר:
vault audit enable file file_path=/var/log/vault/audit.logמגדירים את rsyslog כדי לעקוב אחרי הקובץ ולהעביר אותו:
sudo nano /etc/rsyslog.d/50-vault-file-forward.confmodule(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.מפעילים מחדש את rsyslog:
sudo systemctl restart rsyslog
אימות העברת היומנים
ביצוע פעולה ב-Vault (לדוגמה, התחברות או קריאת סוד):
vault login token=<YOUR_TOKEN>בודקים את היומנים של סוכן 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.