איסוף יומנים של התראות Dataminr
גרסת מנתח הנתונים: 2.0
במאמר הזה מוסבר איך להטמיע יומני Dataminr Alerts ב-Google Security Operations באמצעות Google Cloud Storage V2, פונקציה של Cloud Run ו-Cloud Scheduler.
Dataminr Pulse מספקת תובנות בזמן אמת שמבוססות על AI מתוך יותר מ-500,000 מקורות נתונים ציבוריים גלובליים, כולל הרשת העמוקה והאפלה. הפלטפורמה מספקת אזהרות מוקדמות לגבי איומי סייבר חדשים, נקודות חולשה, מתקפות של תוכנות כופר, פרצות אבטחה וסיכונים דיגיטליים שמשפיעים על הארגון ועל צדדים שלישיים. ה-API של Dataminr Pulse משתמש באימות של פרטי כניסה של לקוח OAuth 2.0 ובחלוקה לעמודים מבוססת-סמן כדי לאחזר התראות.
לפני שמתחילים
חשוב לוודא שמתקיימות הדרישות המוקדמות הבאות:
- מופע של Google SecOps
- פרויקט ב-Google Cloud עם ממשקי ה-API הבאים שמופעלים בו:
- Cloud Storage API
- Cloud Run functions API
- Cloud Scheduler API
- Cloud Pub/Sub API
- הרשאות ליצירה ולניהול של קטגוריות GCS, פונקציות Cloud Run, נושאי Pub/Sub ועבודות Cloud Scheduler
- הרשאות לניהול מדיניות IAM בקטגוריות GCS
- חשבון פעיל ב-Dataminr Pulse עם גישה ל-API
- פרטי הכניסה ל-Dataminr Pulse API (מזהה לקוח וסוד לקוח)
- לפחות רשימת התראות אחת של Dataminr Pulse שהוגדרה בחשבון Dataminr
יצירת קטגוריה של Google Cloud Storage
- נכנסים אל מסוף Google Cloud.
- בוחרים פרויקט או יוצרים פרויקט חדש.
- בתפריט הניווט, עוברים אל Cloud Storage > Buckets.
- לוחצים על Create bucket.
מזינים את פרטי ההגדרה הבאים:
הגדרה ערך Name your bucket (שם הקטגוריה) מזינים שם ייחודי גלובלית (לדוגמה, dataminr-alert-logs)סוג מיקום בוחרים לפי הצרכים שלכם (אזור, בשני אזורים, במספר אזורים) Location בוחרים את המיקום (לדוגמה, us-central1).סוג אחסון (storage class) רגיל (מומלץ ליומנים שמתבצעת אליהם גישה לעיתים קרובות) בקרת גישה אחיד (מומלץ) כלים להגנה אופציונלי: הפעלת ניהול גרסאות של אובייקטים או מדיניות שמירת נתונים לוחצים על יצירה.
איסוף פרטי הכניסה ל-Dataminr
כדי לאפשר לפונקציית Cloud Run לאחזר נתוני התראות, צריך לקבל מנציג Dataminr בחשבון שלכם פרטי כניסה ל-API עם אימות פרטי לקוח OAuth 2.0.
קבלת פרטי כניסה ל-API
- כדי לבקש גישה ל-API, צריך לפנות לנציג התמיכה או לאיש הקשר שאחראי לחשבון שלכם ב-Dataminr.
- מציינים את הפרטים הבאים:
- שם הארגון
- תרחיש לדוגמה: שילוב עם Google Chronicle SIEM
- הגישה הנדרשת: Dataminr Pulse API for Cyber Risk
Dataminr מספקת פרטי כניסה ל-API ונותנת לכם:
- Client ID: מזהה הלקוח הייחודי שלכם ב-OAuth 2.0
- סוד הלקוח: מפתח הסוד של לקוח OAuth 2.0
אימות פרטי הכניסה ל-API
כדי לוודא שהפרטים שלכם תקינים, מריצים את הפקודה הבאה:
curl -X POST https://gateway.dataminr.com/auth/2/token \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=api_key"תגובה מוצלחת מחזירה אובייקט JSON שמכיל שדה
access_token:{ "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI...", "token_type": "Bearer", "expire": 3600 }
איסוף מזהים של רשימת התראות
- נכנסים לאפליקציית האינטרנט Dataminr Pulse בכתובת
https://app.dataminr.com. - עוברים לרשימות ההתראות (רשימות המעקב) שהגדרתם.
רושמים את המזהים של רשימות ההתראות שרוצים להעביר ל-Google SecOps.
יצירת חשבון שירות לפונקציית Cloud Run
- ב-מסוף Google Cloud, עוברים אל IAM & Admin > חשבונות שירות.
- לוחצים על יצירת חשבון שירות.
- מזינים את פרטי ההגדרה הבאים:
- שם חשבון השירות: מזינים
dataminr-alert-collector - תיאור חשבון השירות: מזינים
Service account for Dataminr Alerts Cloud Run function to write alert data to GCS
- שם חשבון השירות: מזינים
- לוחצים על יצירה והמשך.
- בקטע Grant this service account access to project (מתן גישה של חשבון השירות הזה לפרויקט), מוסיפים את התפקידים הבאים:
- לוחצים על Select a role, מחפשים את התפקיד Storage Object Admin ובוחרים בו.
- לוחצים על Add Another Role (הוספת תפקיד נוסף), מחפשים את התפקיד Cloud Run Invoker (הפעלת Cloud Run) ובוחרים בו.
- לוחצים על Continue.
- לוחצים על סיום.
מתן הרשאות IAM בקטגוריית GCS
- נכנסים אל Cloud Storage > Buckets (קטגוריות).
- לוחצים על שם הקטגוריה (לדוגמה,
dataminr-alert-logs). - עוברים לכרטיסייה Permissions.
- לוחצים על הענקת גישה.
- מזינים את פרטי ההגדרה הבאים:
- Add principals (הוספת ישויות מורשות): מזינים את כתובת האימייל בחשבון השירות (לדוגמה,
dataminr-alert-collector@PROJECT_ID.iam.gserviceaccount.com). - הקצאת תפקידים: בוחרים באפשרות אדמין של אובייקטים באחסון.
- Add principals (הוספת ישויות מורשות): מזינים את כתובת האימייל בחשבון השירות (לדוגמה,
- לוחצים על Save.
יוצרים נושא Pub/Sub
נושא Pub/Sub מפעיל את פונקציית Cloud Run כש-Cloud Scheduler מפרסם הודעה.
- במסוף Google Cloud, עוברים אל Pub/Sub > Topics.
- לוחצים על יצירת נושא.
- מזינים את פרטי ההגדרה הבאים:
- מזהה הנושא: מזינים
dataminr-alert-trigger - הוספת מינוי ברירת מחדל: משאירים את התיבה מסומנת
- מזהה הנושא: מזינים
- לוחצים על יצירה.
יצירת פונקציית Cloud Run
- במסוף Google Cloud, עוברים אל Cloud Run functions.
- לוחצים על יצירת פונקציה.
מזינים את פרטי ההגדרה הבאים:
הגדרה ערך סביבה דור שני שם הפונקציה dataminr-alert-collectorאזור בוחרים את אותו אזור כמו בדלי GCS סוג הטריגר Cloud Pub/Sub נושא Pub/Sub dataminr-alert-triggerהזיכרון שהוקצה 512 MiB פסק זמן 540 שניות חשבון שירות בזמן ריצה dataminr-alert-collectorלוחצים על הבא.
מגדירים את Runtime ל-Python 3.12.
מגדירים את Entry point ל-
main.מוסיפים את יחסי התלות הבאים לקובץ
requirements.txt:functions-framework==3.* google-cloud-storage==2.* requests==2.*בקובץ
main.py, מדביקים את הקוד הבא:import functions_framework import json import os import logging import time from datetime import datetime, timedelta, timezone from google.cloud import storage import requests logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) storage_client = storage.Client() TOKEN_URL = "https://gateway.dataminr.com/auth/2/token" ALERTS_URL = "https://gateway.dataminr.com/api/3/alerts" def _get_access_token(client_id: str, client_secret: str) -> str: """Obtain an OAuth 2.0 access token from Dataminr.""" payload = { "client_id": client_id, "client_secret": client_secret, "grant_type": "api_key", } headers = {"Content-Type": "application/x-www-form-urlencoded"} resp = requests.post(TOKEN_URL, data=payload, headers=headers, timeout=30) resp.raise_for_status() token_data = resp.json() access_token = token_data.get("access_token") if not access_token: raise ValueError("No access_token in token response") logger.info("Successfully obtained Dataminr access token.") return access_token def _load_state(bucket_name: str, state_key: str) -> dict: """Load the last cursor (alertId) from GCS.""" try: bucket = storage_client.bucket(bucket_name) blob = bucket.blob(state_key) if blob.exists(): data = json.loads(blob.download_as_text()) logger.info(f"Loaded state: {data}") return data except Exception as e: logger.warning(f"State read error: {e}") logger.info("No previous state found.") return {} def _save_state(bucket_name: str, state_key: str, state: dict) -> None: """Save the cursor state to GCS.""" bucket = storage_client.bucket(bucket_name) blob = bucket.blob(state_key) blob.upload_from_string( json.dumps(state), content_type="application/json" ) logger.info(f"Saved state: {state}") def _fetch_alerts( access_token: str, alert_lists: str, page_size: int, cursor: str = None, ) -> tuple: """Fetch a page of alerts from the Dataminr Pulse API.""" headers = { "Authorization": f"Bearer {access_token}", "Accept": "application/json", } params = { "lists": alert_lists, "num": page_size, } if cursor: params["from"] = cursor resp = requests.get( ALERTS_URL, headers=headers, params=params, timeout=60 ) # Handle rate limiting via response headers rate_remaining = resp.headers.get("x-ratelimit-remaining") rate_reset = resp.headers.get("x-ratelimit-reset") if resp.status_code == 429: reset_time = int(rate_reset) if rate_reset else 60 wait_seconds = max(reset_time - int(time.time()), 1) logger.warning( f"Rate limited. Waiting {wait_seconds}s before retry." ) time.sleep(wait_seconds) resp = requests.get( ALERTS_URL, headers=headers, params=params, timeout=60 ) resp.raise_for_status() if rate_remaining is not None: logger.info( f"Rate limit remaining: {rate_remaining}, reset: {rate_reset}" ) data = resp.json() alerts = data if isinstance(data, list) else data.get("data", []) return alerts @functions_framework.cloud_event def main(cloud_event): """Cloud Run function entry point triggered by Pub/Sub.""" bucket_name = os.environ["GCS_BUCKET"] prefix = os.environ.get("GCS_PREFIX", "dataminr_alerts") state_key = os.environ.get("STATE_KEY", "dataminr_state/cursor.json") client_id = os.environ["CLIENT_ID"] client_secret = os.environ["CLIENT_SECRET"] alert_lists = os.environ["ALERT_LISTS"] max_records = int(os.environ.get("MAX_RECORDS", "1000")) page_size = min(int(os.environ.get("PAGE_SIZE", "40")), 40) lookback_hours = int(os.environ.get("LOOKBACK_HOURS", "24")) try: access_token = _get_access_token(client_id, client_secret) state = _load_state(bucket_name, state_key) cursor = state.get("last_cursor") is_first_run = cursor is None all_alerts = [] total_fetched = 0 pages_fetched = 0 while total_fetched < max_records: logger.info( f"Fetching page {pages_fetched + 1} (cursor: {cursor})..." ) alerts = _fetch_alerts( access_token, alert_lists, page_size, cursor=cursor ) if not alerts: logger.info("No more alerts returned. Stopping pagination.") break # Filter by lookback window on first run (no prior cursor) if is_first_run: cutoff_ms = int( ( datetime.now(timezone.utc) - timedelta(hours=lookback_hours) ).timestamp() * 1000 ) alerts = [ a for a in alerts if a.get("eventTime", 0) >= cutoff_ms ] all_alerts.extend(alerts) total_fetched += len(alerts) pages_fetched += 1 # Update cursor to the last alertId in this page last_alert = alerts[-1] if alerts else None if last_alert and "alertId" in last_alert: cursor = last_alert["alertId"] else: break # Stop if we received fewer alerts than requested if len(alerts) < page_size: logger.info("Received partial page. Stopping pagination.") break logger.info( f"Collected {len(all_alerts)} alerts across {pages_fetched} pages." ) if not all_alerts: logger.info("No new alerts to write.") return "No new alerts", 200 # Write alerts as NDJSON to GCS now_str = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ") blob_path = f"{prefix}/{now_str}.ndjson" ndjson_body = "\n".join( json.dumps(alert, separators=(",", ":")) for alert in all_alerts ) bucket = storage_client.bucket(bucket_name) blob = bucket.blob(blob_path) blob.upload_from_string( ndjson_body, content_type="application/x-ndjson" ) _save_state( bucket_name, state_key, { "last_cursor": cursor, "last_run": datetime.now(timezone.utc).isoformat(), }, ) msg = ( f"Wrote {len(all_alerts)} alerts to " f"gs://{bucket_name}/{blob_path}" ) logger.info(msg) return msg, 200 except Exception as e: logger.error(f"Error collecting Dataminr alerts: {e}") raiseלוחצים על פריסה.
מחכים שהפונקציה תופעל. הסטטוס משתנה לסימן וי ירוק כשהפריסה מסתיימת.
הגדרת משתני סביבה
- אחרי שהפונקציה נפרסת, עוברים אל Cloud Run Functions > dataminr-alert-collector.
- לוחצים על עריכה ופריסה של גרסה חדשה.
- לוחצים על הכרטיסייה Variables and Secrets (משתנים וסודות) (או מרחיבים את Runtime, build, connections and security settings (הגדרות של זמן ריצה, build, חיבורים ואבטחה) בדור הראשון).
מוסיפים את משתני הסביבה הבאים:
מפתח ערך לדוגמה GCS_BUCKETdataminr-alert-logsGCS_PREFIXdataminr_alertsSTATE_KEYdataminr_state/cursor.jsonCLIENT_IDמזהה הלקוח שלכם ב-OAuth 2.0 של Dataminr CLIENT_SECRETהסוד של לקוח OAuth 2.0 של Dataminr ALERT_LISTSרשימה של מזהי התראות של Dataminr, מופרדים בפסיקים MAX_RECORDS1000PAGE_SIZE40LOOKBACK_HOURS24לוחצים על פריסה.
יצירת משימה ב-Cloud Scheduler
Cloud Scheduler מפרסם הודעה בנושא Pub/Sub לפי לוח זמנים, וכך מפעיל את פונקציית Cloud Run כדי לבצע סקר ב-Dataminr Pulse לגבי התראות חדשות.
- במסוף Google Cloud, עוברים אל Cloud Scheduler.
- לוחצים על יצירת משימה.
מזינים את פרטי ההגדרה הבאים:
הגדרה ערך שם dataminr-alert-pollאזור בוחרים את אותו אזור כמו הפונקציה תדירות */5 * * * *(כל 5 דקות)אזור זמן בוחרים את אזור הזמן (לדוגמה, UTC)לוחצים על Continue.
בקטע Configure the execution (הגדרת ההפעלה):
- Target type (סוג היעד): בוחרים באפשרות Pub/Sub.
- נושא: בוחרים באפשרות
dataminr-alert-trigger - גוף ההודעה: מזינים
{"poll": true}
לוחצים על יצירה.
אימות פונקציית Cloud Run
- ב-Cloud Scheduler, מאתרים את המשימה
dataminr-alert-poll. - לוחצים על הפעלה מאולצת כדי להפעיל ביצוע מיידי.
- עוברים אל Cloud Run Functions > dataminr-alert-collector > Logs.
כדי לוודא שהפונקציה בוצעה בהצלחה, בודקים אם יש רשומות ביומן כמו:
Successfully obtained Dataminr access token. Fetching page 1 (cursor: None)... Collected 35 alerts across 1 pages. Wrote 35 alerts to gs://dataminr-alert-logs/dataminr_alerts/20250115T103000Z.ndjsonעוברים אל Cloud Storage > Buckets > dataminr-alert-logs.
עוברים לקידומת
dataminr_alerts/.מוודאים שקובצי NDJSON נוצרים עם נתוני התראות של Dataminr.
אחזור חשבון השירות של Google SecOps והגדרת הפיד
Google SecOps משתמש בחשבון שירות ייחודי כדי לקרוא נתונים ממאגר GCS שלכם. צריך להעניק לחשבון השירות הזה גישה לדלי.
קבלת כתובת האימייל בחשבון השירות
- עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
- לוחצים על הוספת פיד חדש.
- לוחצים על הגדרת פיד יחיד.
- בשדה שם הפיד, מזינים שם לפיד (לדוגמה,
Dataminr Alerts). - בוחרים באפשרות Google Cloud Storage V2 בתור סוג המקור.
- בוחרים באפשרות Dataminr Alerts (התראות Dataminr) בתור סוג היומן.
- לוחצים על Get Service Account (קבלת חשבון שירות).
תוצג כתובת האימייל בחשבון שירות ייחודי, לדוגמה:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comמעתיקים את כתובת האימייל הזו לשימוש בקטע הבא.
לוחצים על הבא.
מציינים ערכים לפרמטרים הבאים של הקלט:
כתובת ה-URL של קטגוריית האחסון: מזינים את ה-URI של קטגוריית GCS עם נתיב הקידומת:
gs://dataminr-alert-logs/dataminr_alerts/אפשרות למחיקת המקור: בוחרים את אפשרות המחיקה לפי ההעדפה שלכם:
- אף פעם: לא נמחקים קבצים אחרי ההעברה (מומלץ לבדיקות).
- מחיקת קבצים שהועברו: הקבצים נמחקים אחרי שההעברה מסתיימת בהצלחה.
מחיקת קבצים שהועברו וספריות ריקות: מחיקת קבצים וספריות ריקות אחרי שההעברה מסתיימת בהצלחה.
הגיל המקסימלי של הקובץ: כולל קבצים ששונו במספר הימים האחרון (ברירת המחדל היא 180 ימים).
מרחב שמות של נכס: asset namespace.
תוויות להעלאת נתונים: התווית שתצורף לאירועים מהפיד הזה (לדוגמה,
DATAMINR_ALERT).
לוחצים על הבא.
בודקים את ההגדרות של הפיד החדש במסך סיום ולוחצים על שליחה.
הענקת הרשאות IAM לחשבון השירות של Google SecOps
לחשבון השירות של Google SecOps צריכה להיות ההרשאה צפייה באובייקט אחסון בקטגוריה של GCS.
- נכנסים אל Cloud Storage > Buckets (קטגוריות).
- לוחצים על שם הקטגוריה (לדוגמה,
dataminr-alert-logs). - עוברים לכרטיסייה Permissions.
- לוחצים על הענקת גישה.
- מזינים את פרטי ההגדרה הבאים:
- Add principals (הוספת ישויות מורשות): מדביקים את כתובת האימייל בחשבון של חשבון השירות של Google SecOps.
- הקצאת תפקידים: בוחרים באפשרות צפייה באובייקט אחסון.
לוחצים על Save.
טבלת מיפוי UDM
| שדה היומן | מיפוי UDM | לוגיקה |
|---|---|---|
| alertId | metadata.product_log_id | הערך הועתק ישירות |
| alertType.color | about.labels.alertType_color | הערך הועתק ישירות |
| alertType.id | about.labels.alertType_id | הערך הועתק ישירות |
| alertType.name | about.labels.alertType_name | הערך הועתק ישירות |
| availableRelatedAlerts | about.labels.availableRelatedAlerts | הומר למחרוזת |
| כיתוב | metadata.description | הערך הועתק ישירות |
| cat.name | security_result.category_details | הערך הועתק ישירות |
| cat.id | security_result.detection_fields.categories_id | הערך הועתק ישירות |
| cat.idStr | security_result.detection_fields.categories_idStr | הערך הועתק ישירות |
| cat.path | security_result.detection_fields.categories_path | הערך הועתק ישירות |
| cat.requested | security_result.detection_fields.categories_requested | הערך הועתק ישירות |
| cat.retired | security_result.detection_fields.categories_retired | הומר למחרוזת |
| cat.topicType | about.labels.categories_topicType | הערך הועתק ישירות |
| cat.name | security_result.category | POLICY_VIOLATION אם cat.name == "Cybersecurity - Policy"; NETWORK_MALICIOUS אם in ["Cybersecurity - Threats & Vulnerabilities", "Cybersecurity - Crime & Malicious Activity", "Threats & Precautions", "Threats"]; NETWORK_SUSPICIOUS אם =~ "Cybersecurity"; MAIL_PHISHING אם =~ "Email and Web Servers"; DATA_EXFILTRATION אם =~ "Data Exposure and Breaches"; POLICY_VIOLATION אם =~ "Government, Policy, & Political Affairs"; PHISHING אם =~ "(Malware |
| comp.dm_bucket.name | security_result.about.resource.attribute.labels.dmbucket%{bucket.id} | הערך הועתק ישירות |
| comp.dm_sector.name | security_result.about.resource.attribute.labels.dmsector%{sector.id} | הערך הועתק ישירות |
| comp.id | security_result.about.resource.attribute.labels.companies_id | הערך הועתק ישירות |
| comp.idStr | security_result.about.resource.attribute.labels.companies_idStr | הערך הועתק ישירות |
| comp.locations.city | security_result.about.location.city | הערך מ-loc.city אם loc_index == 0 |
| comp.locations.country, comp.locations.state.symbol | security_result.about.location.country_or_region | המחרוזת המחוברת היא %{loc.country} - %{loc.state.symbol} אם loc_index == 0 ושני הערכים לא ריקים |
| comp.locations.postalCode | security_result.about.resource.attribute.labels.locations_postalCode | הערך מועתק ישירות אם loc_index == 0 והוא לא ריק |
| comp.locations.state.name | security_result.about.location.state | הערך מועתק ישירות אם loc_index == 0 |
| comp.locations.city | about.labels.loc_%{loc_index}_city | הערך מועתק ישירות אם loc_index != 0 והוא לא ריק |
| comp.locations.country, comp.locations.state.symbol | about.labels.loc_%{loc_index}_country_or_region | המחרוזת המחוברת היא %{loc.country} - %{loc.state.symbol} אם loc_index != 0 ושני הערכים לא ריקים |
| comp.locations.postalCode | securityresult.about.resource.attribute.labels.locations%{loc_index}_postalCode | הערך מועתק ישירות אם loc_index != 0 והוא לא ריק |
| comp.locations.state.name | about.labels.loc_%{loc_index}_state_name | הערך מועתק ישירות אם loc_index != 0 והוא לא ריק |
| comp.name | security_result.about.resource.name | הערך הועתק ישירות |
| comp.requested | security_result.about.resource.attribute.labels.companies_requested | הערך הועתק ישירות |
| comp.retired | security_result.about.resource.attribute.labels.companies_retired | הומר למחרוזת |
| comp.ticker | security_result.about.resource.attribute.labels.companies_ticker | הערך הועתק ישירות |
| comp.topicType | security_result.about.resource.attribute.labels.companies_topicType | הערך הועתק ישירות |
| eventLocation.coordinates.0 | principal.location.region_coordinates.latitude | הערך הועתק ישירות |
| eventLocation.coordinates.1 | principal.location.region_coordinates.longitude | הערך הועתק ישירות |
| eventLocation.name | principal.location.name | הערך הועתק ישירות |
| eventLocation.places | principal.labels.location_places | הצטרפות ממערך עם מפריד פסיק |
| eventLocation.probability | principal.labels.eventLocation_probability | הומר למחרוזת |
| eventLocation.radius | principal.labels.eventLocation_radius | הומר למחרוזת |
| eventMapLargeURL | principal.labels.eventMapLargeURL | הערך הועתק ישירות |
| eventMapSmallURL | principal.labels.eventMapSmallURL | הערך הועתק ישירות |
| eventTime | @timestamp | ההמרה בוצעה מ-epoch ms לחותמת זמן |
| eventVolume | about.labels.eventVolume | הומר למחרוזת |
| expandAlertURL | metadata.url_back_to_product | הערך הועתק ישירות |
| expandMapURL | principal.labels.expandMapURL | הערך הועתק ישירות |
| headerColor | about.labels.headerColor | הערך הועתק ישירות |
| headerLabel | about.labels.headerLabel | הערך הועתק ישירות |
| metadata.cyber.addresses.ip | principal.ip | הערך מחולץ באמצעות תבנית grok אם index == 0 |
| metadata.cyber.addresses.port | principal.port | הערך מועתק ישירות אם index == 0, מומר למספר שלם |
| metadata.cyber.addresses.port | principal.labels.addresses_%{index}_port | הערך מועתק ישירות אם האינדקס שונה מ-0 |
| metadata.cyber.addresses.version | principal.labels.metadata_cyberaddresses%{index}_version | הערך הועתק ישירות |
| metadata.cyber.asns | network.asn | הערך מועתק ישירות אם index == 0 |
| metadata.cyber.asns | about.labels.metadatacyber%{index}_asn | הערך מועתק ישירות אם האינדקס שונה מ-0 |
| metadata.cyber.hashValues.value | security_result.about.file.sha1 | הערך מועתק ישירות אם הסוג הוא SHA1, באותיות קטנות |
| metadata.cyber.hashValues.value | security_result.about.file.sha256 | הערך מועתק ישירות אם הסוג הוא SHA256, באותיות קטנות |
| metadata.cyber.malwares | security_result.associations.name | הערך הועתק ישירות |
| metadata.cyber.malwares | security_result.associations.type | הגדרה ל-MALWARE |
| metadata.cyber.orgs | network.organization_name | הערך מועתק ישירות אם index == 0 |
| metadata.cyber.orgs | about.labels.metadatacyber%{index}_orgs | הערך מועתק ישירות אם האינדקס שונה מ-0 |
| metadata.cyber.products | principal.application | הערך מועתק ישירות אם index == 0 |
| metadata.cyber.products | principal.labels.metadata_cyberproducts%{index} | הערך מועתק ישירות אם האינדקס שונה מ-0 |
| metadata.cyber.threats | security_result.threat_name | הערך מועתק ישירות אם index == 0 |
| metadata.cyber.threats | security_result.about.labels.metadata_cyberthreats%{index} | הערך מועתק ישירות אם האינדקס שונה מ-0 |
| metadata.cyber.URLs | security_result.about.url | הערך מועתק ישירות אם index == 0 |
| metadata.cyber.URLs | securityresult.about.labels.url%{index} | הערך מועתק ישירות אם האינדקס שונה מ-0 |
| metadata.cyber.malwares.0 | security_result.category | הערך הוא SOFTWARE_MALICIOUS אם הוא קיים |
| metadata.cyber.vulnerabilities.cvss | extensions.vulns.vulnerabilities.cvss_base_score | הערך הועתק ישירות |
| metadata.cyber.vulnerabilities.exploitPocLinks | extensions.vulns.vulnerabilities.cve_description | הצטרף ממערך עם מפריד ' n' |
| metadata.cyber.vulnerabilities.id | extensions.vulns.vulnerabilities.cve_id | הערך הועתק ישירות |
| metadata.cyber.vulnerabilities.products.productName | extensions.vulns.vulnerabilities.about.application | הערך מועתק ישירות אם index == 0 |
| metadata.cyber.vulnerabilities.products.productVendor | extensions.vulns.vulnerabilities.vendor | הערך מועתק ישירות אם index == 0 |
| metadata.cyber.vulnerabilities.products.productVersion | extensions.vulns.vulnerabilities.about.platform_version | הערך מועתק ישירות אם האינדקס == 0, הרווחים מוסרים |
| metadata.cyber.vulnerabilities.products.productName | extensions.vulns.vulnerabilities.about.labels.productName_%{index} | הערך מועתק ישירות אם האינדקס שונה מ-0 |
| metadata.cyber.vulnerabilities.products.productVendor | extensions.vulns.vulnerabilities.about.labels.productVendor_%{index} | הערך מועתק ישירות אם האינדקס שונה מ-0 |
| metadata.cyber.vulnerabilities.products.productVersion | extensions.vulns.vulnerabilities.about.labels.productVersion_%{index} | הערך מועתק ישירות אם האינדקס שונה מ-0, הרווחים מוסרים |
| parentAlertId | about.labels.parentAlertId | הערך הועתק ישירות |
| post.languages.lang | target.labels.post_languageslang%{index} | הערך הועתק ישירות |
| post.languages.position | target.labels.post_languagesposition%{index} | הומר למחרוזת |
| post.link | target.labels.post_link | הערך הועתק ישירות |
| post.media.link | principal.resource.name | הערך מועתק ישירות אם index == 0 |
| post.media.description | target.resource.attribute.labels.post_media_description | הערך מועתק ישירות אם index == 0 |
| post.media.display_url | target.resource.attribute.labels.post_media_display_url | הערך מועתק ישירות אם index == 0 |
| post.media.isSafe | target.resource.attribute.labels.post_media_isSafe | הומר למחרוזת אם index == 0 |
| post.media.media_url | target.resource.attribute.labels.post_media_media_url | הערך מועתק ישירות אם index == 0 |
| post.media.sizes.large.h | target.resource.attribute.labels.post_media_sizes_large_h | הומר למחרוזת אם index == 0 |
| post.media.sizes.large.resize | target.resource.attribute.labels.post_media_sizes_large_resize | הערך מועתק ישירות אם index == 0 |
| post.media.sizes.large.w | target.resource.attribute.labels.post_media_sizes_large_w | הומר למחרוזת אם index == 0 |
| post.media.sizes.medium.h | target.resource.attribute.labels.post_media_sizes_medium_h | הומר למחרוזת אם index == 0 |
| post.media.sizes.medium.resize | target.resource.attribute.labels.post_media_sizes_medium_resize | הערך מועתק ישירות אם index == 0 |
| post.media.sizes.medium.w | target.resource.attribute.labels.post_media_sizes_medium_w | הומר למחרוזת אם index == 0 |
| post.media.sizes.small.h | target.resource.attribute.labels.post_media_sizes_small_h | הומר למחרוזת אם index == 0 |
| post.media.sizes.small.resize | target.resource.attribute.labels.post_media_sizes_small_resize | הערך מועתק ישירות אם index == 0 |
| post.media.sizes.small.w | target.resource.attribute.labels.post_media_sizes_small_w | הומר למחרוזת אם index == 0 |
| post.media.sizes.thumb.h | target.resource.attribute.labels.post_media_sizes_thumb_h | הומר למחרוזת אם index == 0 |
| post.media.sizes.thumb.resize | target.resource.attribute.labels.post_media_sizes_thumb_resize | הערך מועתק ישירות אם index == 0 |
| post.media.sizes.thumb.w | target.resource.attribute.labels.post_media_sizes_thumb_w | הומר למחרוזת אם index == 0 |
| post.media.source | target.resource.attribute.labels.post_media_source | הערך מועתק ישירות אם index == 0 |
| post.media.thumbnail | target.resource.attribute.labels.post_media_thumbnail | הערך מועתק ישירות אם index == 0 |
| post.media.title | target.resource.attribute.labels.post_media_title | הערך מועתק ישירות אם index == 0 |
| post.media.url | target.resource.attribute.labels.post_media_url | הערך מועתק ישירות אם index == 0 |
| post.media.video_info.duration_millis | target.resource.attribute.labels.post_media_video_info_duration_millis | הומר למחרוזת אם index == 0 |
| post.media.video_info.aspect_ratio | target.resource.attribute.labels.post_media_video_info_aspect_ratio | מחוברות כמחרוזת כ- %{med.video_info.aspect_ratio.0}, %{med.video_info.aspect_ratio.1} אם index == 0 |
| post.media.video_info.variants.bitrate | target.resource.attribute.labels.post_media_video_info_variantsbitrate%{var_index} | הומר למחרוזת |
| post.media.video_info.variants.content_type | target.resource.attribute.labels.post_media_video_info_variants_contenttype%{var_index} | הערך הועתק ישירות |
| post.media.video_info.variants.url | target.resource.attribute.labels.post_media_video_info_variantsurl%{var_index} | הערך הועתק ישירות |
| post.media.type | principal.resource.resource_subtype | הערך מועתק ישירות אם index == 0 |
| post.media.link | about.resource.name | הערך מועתק ישירות אם האינדקס שונה מ-0 |
| post.media.description | about.resource.attribute.labels.post_media_description | הערך מועתק ישירות אם האינדקס שונה מ-0 |
| post.media.display_url | about.resource.attribute.labels.post_media_display_url | הערך מועתק ישירות אם האינדקס שונה מ-0 |
| post.media.isSafe | about.resource.attribute.labels.post_media_isSafe | הערך מומר למחרוזת אם index != 0 |
| post.media.media_url | about.resource.attribute.labels.post_media_media_url | הערך מועתק ישירות אם האינדקס שונה מ-0 |
| post.media.sizes.large.h | about.resource.attribute.labels.post_media_sizes_large_h | הערך מומר למחרוזת אם index != 0 |
| post.media.sizes.large.resize | about.resource.attribute.labels.post_media_sizes_large_resize | הערך מועתק ישירות אם האינדקס שונה מ-0 |
| post.media.sizes.large.w | about.resource.attribute.labels.post_media_sizes_large_w | הערך מומר למחרוזת אם index != 0 |
| post.media.sizes.medium.h | about.resource.attribute.labels.post_media_sizes_medium_h | הערך מומר למחרוזת אם index != 0 |
| post.media.sizes.medium.resize | about.resource.attribute.labels.post_media_sizes_medium_resize | הערך מועתק ישירות אם האינדקס שונה מ-0 |
| post.media.sizes.medium.w | about.resource.attribute.labels.post_media_sizes_medium_w | הערך מומר למחרוזת אם index != 0 |
| post.media.sizes.small.h | about.resource.attribute.labels.post_media_sizes_small_h | הערך מומר למחרוזת אם index != 0 |
| post.media.sizes.small.resize | about.resource.attribute.labels.post_media_sizes_small_resize | הערך מועתק ישירות אם האינדקס שונה מ-0 |
| post.media.sizes.small.w | about.resource.attribute.labels.post_media_sizes_small_w | הערך מומר למחרוזת אם index != 0 |
| post.media.sizes.thumb.h | about.resource.attribute.labels.post_media_sizes_thumb_h | הערך מומר למחרוזת אם index != 0 |
| post.media.sizes.thumb.resize | about.resource.attribute.labels.post_media_sizes_thumb_resize | הערך מועתק ישירות אם האינדקס שונה מ-0 |
| post.media.sizes.thumb.w | about.resource.attribute.labels.post_media_sizes_thumb_w | הערך מומר למחרוזת אם index != 0 |
| post.media.source | about.resource.attribute.labels.post_media_source | הערך מועתק ישירות אם האינדקס שונה מ-0 |
| post.media.thumbnail | about.resource.attribute.labels.post_media_thumbnail | הערך מועתק ישירות אם האינדקס שונה מ-0 |
| post.media.title | about.resource.attribute.labels.post_media_title | הערך מועתק ישירות אם האינדקס שונה מ-0 |
| post.media.url | about.resource.attribute.labels.post_media_url | הערך מועתק ישירות אם האינדקס שונה מ-0 |
| post.media.video_info.duration_millis | about.resource.attribute.labels.post_media_video_info_duration_millis | הערך מומר למחרוזת אם index != 0 |
| post.media.video_info.aspect_ratio | about.resource.attribute.labels.post_media_video_info_aspect_ratio | הערכים מחוברים כמחרוזת %{med.video_info.aspect_ratio.0}, %{med.video_info.aspect_ratio.1} אם index != 0 |
| post.media.video_info.variants.bitrate | about.resource.attribute.labels.post_media_video_info_variantsbitrate%{var_index} | הומר למחרוזת |
| post.media.video_info.variants.content_type | about.resource.attribute.labels.post_media_video_info_variants_contenttype%{var_index} | הערך הועתק ישירות |
| post.media.video_info.variants.url | about.resource.attribute.labels.post_media_video_info_variantsurl%{var_index} | הערך הועתק ישירות |
| post.media.type | about.resource.resource_subtype | הערך מועתק ישירות אם האינדקס שונה מ-0 |
| post.translatedText | target.labels.post_translatedText | הערך הועתק ישירות |
| post.text | target.labels.post_text | הערך הועתק ישירות |
| post.timestamp | target.resource.attribute.creation_time | ההמרה בוצעה מ-epoch ms לחותמת זמן |
| publisherCategory.color | target.labels.publisherCategory_color | הערך הועתק ישירות |
| publisherCategory.name | target.labels.publisherCategory_name | הערך הועתק ישירות |
| publisherCategory.shortName | target.labels.publisherCategory_shortName | הערך הועתק ישירות |
| relatedTerms.url | principal.labels.relatedTerms_%{terms.text} | הערך הועתק ישירות |
| relatedTermsQueryURL | principal.labels.relatedTermsQueryURL | הערך הועתק ישירות |
| sect.id | about.labels.sectors_id | הערך הועתק ישירות |
| sect.idStr | about.labels.sectors_idStr | הערך הועתק ישירות |
| sect.name | about.labels.sectors_name | הערך הועתק ישירות |
| sect.retired | about.labels.sectors_retired | הומר למחרוזת |
| sect.topicType | about.labels.sectors_topicType | הערך הועתק ישירות |
| source.channels.0 | principal.application | הערך הועתק ישירות |
| source.displayName | principal.user.user_display_name | הערך הועתק ישירות |
| source.link | principal.url | הערך הועתק ישירות |
| source.verified | principal.labels.source_verified | הומר למחרוזת |
| subCaption.bullets.content | about.labels.subCaption_bullets_content | הערך הועתק ישירות |
| subCaption.bullets.media | about.labels.subCaption_bullets_media | הערך הועתק ישירות |
| subCaption.bullets.source | about.labels.subCaption_bullets_source | הערך הועתק ישירות |
| watchlist.id | about.labels.watchlistsMatchedByType_id | הערך הועתק ישירות |
| watchlist.externalTopicIds | about.labels.watchlistsMatchedByType_externalTopicIds | הצטרפות ממערך עם מפריד פסיק |
| watchlist.name | about.labels.watchlistsMatchedByType_name | הערך הועתק ישירות |
| watchlist.type | about.labels.watchlistsMatchedByType_type | הערך הועתק ישירות |
| watchlist.userProperties.omnilist | about.labels.watchlistsMatchedByType_userProperties_omnilist | הערך הועתק ישירות |
| watchlist.userProperties.uiListType | about.labels.watchlistsMatchedByType_userProperties_uiListType | הערך הועתק ישירות |
| watchlist.userProperties.watchlistColor | about.labels.watchlistsMatchedByType_userProperties_watchlistColor | הערך הועתק ישירות |
| watchlist.locationGroups.locations.id | about.labels.watchlistsMatchedByTypelocationGroups%{lg_i}_locationsid%{loc_i} | הערך הועתק ישירות |
| watchlist.locationGroups.locations.lng | about.labels.watchlistsMatchedByTypelocationGroups%{lg_i}_locationslng%{loc_i} | הערך מומר למחרוזת אם lg_i != 0 או loc_i != 0 |
| watchlist.locationGroups.locations.lat | about.labels.watchlistsMatchedByTypelocationGroups%{lg_i}_locationslat%{loc_i} | הערך מומר למחרוזת אם lg_i != 0 או loc_i != 0 |
| watchlist.locationGroups.locations.name | about.labels.watchlistsMatchedByTypelocationGroups%{lg_i}_locationsname%{loc_i} | הערך מועתק ישירות אם lg_i != 0 או loc_i != 0 |
| watchlist.locationGroups.id | about.labels.watchlistsMatchedByType_locationGroupsid%{lg_i} | הערך הועתק ישירות |
| watchlist.locationGroups.name | about.labels.watchlistsMatchedByType_locationGroupsname%{lg_i} | הערך הועתק ישירות |
| watchlist.locationGroups.locations.lng | about.location.region_coordinates.longitude | הערך מועתק ישירות אם lg_i == 0 ו-loc_i == 0 |
| watchlist.locationGroups.locations.lat | about.location.region_coordinates.latitude | הערך מועתק ישירות אם lg_i == 0 ו-loc_i == 0 |
| watchlist.locationGroups.locations.name | about.location.name | הערך מועתק ישירות אם lg_i == 0 ו-loc_i == 0 |
| source.entityName | principal.hostname | הערך הועתק ישירות |
| metadata.event_type | הערך שמוגדר הוא GENERIC_EVENT. אם principal_ip או principal.hostname לא ריקים, הערך משתנה ל-SCAN_HOST. |
שנה רישום
צפייה ביומן השינויים של כלי הניתוח הזה
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.