איסוף יומני ביקורת של Workday
במאמר הזה מוסבר איך להטמיע יומני ביקורת של Workday ב-Google Security Operations באמצעות Google Cloud Storage. המנתח מזהה קודם את סוג האירוע הספציפי מהיומנים על סמך ניתוח דפוסים של נתוני ה-CSV. לאחר מכן, הוא מחלץ ומבנה שדות רלוונטיים בהתאם לסוג שזוהה, וממפה אותם למודל נתונים מאוחד (UDM) לצורך ניתוח אבטחה עקבי.
לפני שמתחילים
ודאו שאתם עומדים בדרישות המוקדמות הבאות:
- מופע של Google SecOps
- פרויקט ב-GCP עם Cloud Storage API מופעל
- הרשאות ליצירה ולניהול של מאגרי GCS
- הרשאות לניהול מדיניות IAM בקטגוריות GCS
- הרשאות ליצירת פונקציות Cloud Run, נושאי Pub/Sub ומשימות Cloud Scheduler
- גישה עם הרשאות מיוחדות ל-Workday
יצירת קטגוריה של Google Cloud Storage
- נכנסים למסוף Google Cloud.
- בוחרים פרויקט או יוצרים פרויקט חדש.
- בתפריט הניווט, עוברים אל Cloud Storage > Buckets.
- לוחצים על Create bucket.
מספקים את פרטי ההגדרה הבאים:
הגדרה ערך Name your bucket (שם הקטגוריה) מזינים שם ייחודי ברמה גלובלית (לדוגמה, workday-audit-logs)סוג המיקום בוחרים לפי הצרכים (אזור, שני אזורים, מספר אזורים) Location בוחרים את המיקום (לדוגמה, us-central1).סוג האחסון (storage class) רגיל (מומלץ ליומנים שמתבצעת אליהם גישה לעיתים קרובות) בקרת גישה אחידה (מומלץ) כלי הגנה אופציונלי: הפעלת ניהול גרסאות של אובייקטים או מדיניות שמירת נתונים לוחצים על יצירה.
יצירת משתמש במערכת השילוב (ISU) של Workday
- ב-Workday, מחפשים את האפשרות Create Integration System User > OK (יצירת משתמש מערכת לשילוב) ולוחצים על OK.
- ממלאים את שם המשתמש (לדוגמה,
audit_gcs_user). - לוחצים על OK.
- כדי לאפס את הסיסמה, עוברים אל פעולות קשורות > אבטחה > איפוס סיסמה.
- כדי למנוע את פקיעת התוקף של הסיסמה, בוחרים באפשרות שמירה על כללי הסיסמה.
- מחפשים את Create Security Group > Integration System Security Group (Unconstrained).
- מזינים שם (לדוגמה,
ISU_Audit_GCS) ומוסיפים את חשבון ה-ISU אל משתמשי מערכת השילוב. - מחפשים את Domain Security Policies for Functional Area > System (מדיניות אבטחה של דומיין לאזור פונקציונלי > מערכת).
- בקטע Audit Trail (יומן ביקורת), בוחרים באפשרות Actions > Edit Permissions (פעולות > עריכת הרשאות).
- בקטע Get Only, מוסיפים את קבוצת
ISU_Audit_GCS. - לוחצים על OK > Activate Pending Security Policy Changes.
הגדרת דוח בהתאמה אישית ב-Workday
- ב-Workday, מחפשים את האפשרות Create Custom Report (יצירת דוח בהתאמה אישית).
- מזינים את פרטי ההגדרה הבאים:
- שם: מזינים שם ייחודי (לדוגמה,
Audit_Trail_BP_CSV). - סוג: בוחרים באפשרות מתקדם.
- מקור נתונים: בוחרים באפשרות נתיב ביקורת – הגדרת תהליך עסקי.
- שם: מזינים שם ייחודי (לדוגמה,
- לוחצים על OK.
- אופציונלי: מוסיפים מסננים בסוג התהליך העסקי או בתאריך התחילה.
- עוברים לכרטיסייה פלט.
- בוחרים באפשרויות Enable as Web Service (הפעלה כשירות אינטרנט) ו-Optimized for Performance (אופטימיזציה לביצועים), ואז בוחרים באפשרות CSV Format (פורמט CSV).
- לוחצים על אישור > סיום.
- פותחים את הדוח ולוחצים על שיתוף > מוסיפים את ISU_Audit_GCS עם הרשאת צפייה > אישור.
- עוברים אל פעולות קשורות > שירות אינטרנט > הצגת כתובות URL.
מעתיקים את כתובת ה-URL של קובץ ה-CSV.
יצירת חשבון שירות לפונקציית Cloud Run
פונקציית Cloud Run צריכה חשבון שירות עם הרשאות כתיבה לקטגוריה של GCS והרשאה להפעלה על ידי Pub/Sub.
יצירת חשבון שירות
- במסוף GCP, עוברים אל IAM & Admin > Service Accounts.
- לוחצים על יצירת חשבון שירות.
- מספקים את פרטי ההגדרה הבאים:
- שם חשבון השירות: מזינים
workday-audit-collector-sa. - תיאור חשבון השירות: מזינים
Service account for Cloud Run function to collect Workday audit logs.
- שם חשבון השירות: מזינים
- לוחצים על יצירה והמשך.
- בקטע Grant this service account access to project (מתן גישה של חשבון השירות הזה לפרויקט), מוסיפים את התפקידים הבאים:
- לוחצים על בחירת תפקיד.
- מחפשים את התפקיד Storage Object Admin ובוחרים אותו.
- לוחצים על + הוספת תפקיד נוסף.
- מחפשים את האפשרות Cloud Run Invoker (הפעלת שירותים ב-Cloud Run) ולוחצים עליה.
- לוחצים על + הוספת תפקיד.
- מחפשים את האפשרות Cloud Functions Invoker (הפעלת פונקציות של Cloud Functions) ולוחצים עליה.
- לוחצים על Continue.
- לוחצים על סיום.
התפקידים האלה נדרשים כדי:
- אדמין של אובייקטים באחסון: כתיבת יומנים לקטגוריית GCS
- Cloud Run Invoker: מתן הרשאה ל-Pub/Sub להפעיל את הפונקציה
- מפעיל פונקציות של Cloud Functions: מאפשר להפעיל פונקציות
מתן הרשאות IAM בקטגוריית GCS
נותנים לחשבון השירות הרשאות כתיבה בקטגוריית GCS:
- עוברים אל Cloud Storage > Buckets (קטגוריות).
- לוחצים על שם הקטגוריה.
- עוברים לכרטיסייה Permissions.
- לוחצים על הענקת גישה.
- מספקים את פרטי ההגדרה הבאים:
- Add principals (הוספת ישויות מורשות): מזינים את כתובת האימייל בחשבון השירות (לדוגמה,
workday-audit-collector-sa@PROJECT_ID.iam.gserviceaccount.com). - הקצאת תפקידים: בוחרים באפשרות אדמין של אובייקטים באחסון.
- Add principals (הוספת ישויות מורשות): מזינים את כתובת האימייל בחשבון השירות (לדוגמה,
- לוחצים על Save.
יצירת נושא Pub/Sub
יוצרים נושא Pub/Sub ש-Cloud Scheduler יפרסם בו ופונקציית Cloud Run תירשם אליו.
- במסוף GCP, עוברים אל Pub/Sub > Topics.
- לוחצים על Create topic.
- מספקים את פרטי ההגדרה הבאים:
- מזהה הנושא: מזינים
workday-audit-trigger. - משאירים את שאר ההגדרות כברירת מחדל.
- מזהה הנושא: מזינים
- לוחצים על יצירה.
יצירת פונקציית Cloud Run לאיסוף יומנים
הפונקציה של Cloud Run מופעלת על ידי הודעות Pub/Sub מ-Cloud Scheduler כדי לאחזר יומנים מ-Workday API ולכתוב אותם ב-GCS.
- במסוף GCP, עוברים אל Cloud Run.
- לוחצים על יצירת שירות.
- בוחרים באפשרות Function (שימוש בעורך ישיר ליצירת פונקציה).
בקטע Configure (הגדרה), מזינים את פרטי ההגדרה הבאים:
הגדרה ערך שם השירות workday-audit-collectorאזור בוחרים אזור שתואם ל-GCS Bucket (לדוגמה, us-central1)זמן ריצה בוחרים באפשרות Python 3.12 או גרסה עדכנית יותר. בקטע טריגר (אופציונלי):
- לוחצים על + הוספת טריגר.
- בוחרים באפשרות Cloud Pub/Sub.
- בקטע Select a Cloud Pub/Sub topic, בוחרים את הנושא
workday-audit-trigger. - לוחצים על Save.
בקטע Authentication:
- לוחצים על דרישת אימות.
- בודקים את ניהול הזהויות והרשאות הגישה (IAM).
גוללים למטה ומרחיבים את Containers, Networking, Security (מאגרי תגים, רשתות, אבטחה).
עוברים לכרטיסייה אבטחה:
- חשבון שירות: בוחרים את חשבון השירות
workday-audit-collector-sa.
- חשבון שירות: בוחרים את חשבון השירות
עוברים לכרטיסייה מאגרי תגים:
- לוחצים על Variables & Secrets (משתנים וסודות).
- לוחצים על + Add variable לכל משתנה סביבה:
שם המשתנה ערך לדוגמה GCS_BUCKETworkday-audit-logsWD_USERaudit_gcs_userWD_PASSyour-workday-passwordWD_URLhttps://wd-servicesN.workday.com/ccx/service/customreport2/<tenant>/<user>/Audit_Trail_BP_CSV?format=csvבכרטיסייה Variables & Secrets, גוללים למטה אל Requests:
- זמן קצוב לתפוגת בקשה: מזינים
600שניות (10 דקות).
- זמן קצוב לתפוגת בקשה: מזינים
עוברים לכרטיסייה הגדרות במאגרי תגים:
- בקטע Resources:
- זיכרון: בוחרים באפשרות 512 MiB או יותר.
- מעבד (CPU): בוחרים באפשרות 1.
- לוחצים על סיום.
- בקטע Resources:
גוללים אל סביבת הפעלה:
- בוחרים באפשרות ברירת מחדל (מומלץ).
בקטע שינוי קנה מידה של העריכה:
- מספר המינימום של מופעים: מזינים
0. - מספר מקסימלי של מופעים: מזינים
100(או משנים בהתאם לעומס הצפוי).
- מספר המינימום של מופעים: מזינים
לוחצים על יצירה.
ממתינים ליצירת השירות (1-2 דקות).
אחרי שיוצרים את השירות, עורך הקוד המוטבע נפתח באופן אוטומטי.
הוספת קוד פונקציה
- מזינים main בFunction entry point
בעורך הקוד המוטבע, יוצרים שני קבצים:
- הקובץ הראשון: main.py:
import functions_framework from google.cloud import storage import os import urllib3 from datetime import datetime, timezone import base64 import gzip import io import uuid # Initialize HTTP client http = urllib3.PoolManager( timeout=urllib3.Timeout(connect=5.0, read=30.0), retries=False, ) # Initialize Storage client storage_client = storage.Client() @functions_framework.cloud_event def main(cloud_event): """ Cloud Run function triggered by Pub/Sub to fetch logs from Workday API and write to GCS. Args: cloud_event: CloudEvent object containing Pub/Sub message """ # Get environment variables bucket_name = os.environ.get('GCS_BUCKET') wd_user = os.environ.get('WD_USER') wd_pass = os.environ.get('WD_PASS') wd_url = os.environ.get('WD_URL') if not all([bucket_name, wd_user, wd_pass, wd_url]): print('Error: Missing required environment variables') return try: # Get GCS bucket bucket = storage_client.bucket(bucket_name) print(f'Fetching Workday audit report from {wd_url}') # Fetch report from Workday data = fetch_report(wd_url, wd_user, wd_pass) # Upload to GCS timestamp = datetime.now(timezone.utc) upload(bucket, data, timestamp) print(f'Successfully uploaded Workday audit report ({len(data)} bytes raw)') except Exception as e: print(f'Error processing logs: {str(e)}') raise def fetch_report(url, username, password): """Fetch report from Workday using Basic Auth.""" credentials = f"{username}:{password}" credentials_bytes = credentials.encode('utf-8') auth_header = b"Basic " + base64.b64encode(credentials_bytes) req_headers = { "Authorization": auth_header.decode('utf-8') } response = http.request('GET', url, headers=req_headers) if response.status != 200: raise Exception(f"Failed to fetch report: HTTP {response.status}") return response.data def upload(bucket, payload, ts): """Upload gzipped CSV to GCS.""" key = f"{ts:%Y/%m/%d}/workday-audit-{uuid.uuid4()}.csv.gz" buf = io.BytesIO() with gzip.GzipFile(fileobj=buf, mode='w') as gz: gz.write(payload) buf.seek(0) blob = bucket.blob(key) blob.upload_from_file(buf, content_type='application/gzip') print(f'Uploaded to gs://{bucket.name}/{key}')- הקובץ השני: requirements.txt:
functions-framework==3.* google-cloud-storage==2.* urllib3>=2.0.0לוחצים על Deploy כדי לשמור ולפרוס את הפונקציה.
ממתינים לסיום הפריסה (2-3 דקות).
יצירת משימה ב-Cloud Scheduler
Cloud Scheduler מפרסם הודעות בנושא Pub/Sub במרווחי זמן קבועים, וכך מפעיל את הפונקציה של Cloud Run.
- במסוף GCP, עוברים אל Cloud Scheduler.
- לוחצים על Create Job (יצירת משימה).
מספקים את פרטי ההגדרה הבאים:
הגדרה ערך שם workday-audit-collector-dailyאזור בחירה באותו אזור כמו פונקציית Cloud Run תדירות 20 2 * * *(פועל מדי יום בשעה 02:20 לפי שעון UTC)אזור זמן בחירת אזור זמן (מומלץ לבחור UTC) סוג הטירגוט Pub/Sub נושא בחירת הנושא workday-audit-triggerגוף ההודעה {}(אובייקט JSON ריק)לוחצים על יצירה.
אפשרויות לתדירות התזמון
בחירת התדירות בהתאם לנפח היומן ולדרישות זמן האחזור:
תדירות ביטוי Cron תרחיש לדוגמה כל 5 דקות */5 * * * *נפח גבוה, זמן אחזור נמוך כל 15 דקות */15 * * * *נפח חיפושים בינוני כל שעה 0 * * * *רגילה כל 6 שעות 0 */6 * * *נפח נמוך, עיבוד באצווה יומי 20 2 * * *איסוף נתונים היסטוריים (מומלץ)
בדיקת המשימה המתוזמנת
- במסוף Cloud Scheduler, מוצאים את המשימה.
- כדי להפעיל את הטריגר באופן ידני, לוחצים על הפעלה מאולצת.
- מחכים כמה שניות ועוברים אל Cloud Run > Services > workday-audit-collector > Logs.
- מוודאים שהפונקציה בוצעה בהצלחה.
- בודקים את דלי ה-GCS כדי לוודא שהיומנים נכתבו.
אחזור חשבון השירות של Google SecOps
Google SecOps משתמש בחשבון שירות ייחודי כדי לקרוא נתונים מהקטגוריה של GCS. צריך להעניק לחשבון השירות הזה גישה לדלי.
קבלת כתובת האימייל בחשבון השירות
- עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
- לוחצים על הוספת פיד חדש.
- לוחצים על הגדרת פיד יחיד.
- בשדה שם הפיד, מזינים שם לפיד (לדוגמה,
Workday Audit Logs). - בוחרים באפשרות Google Cloud Storage V2 בתור סוג המקור.
- בוחרים באפשרות Workday Audit (ביקורת ב-Workday) בתור סוג היומן.
לוחצים על קבלת חשבון שירות. מוצגת כתובת אימייל ייחודית של חשבון שירות, לדוגמה:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comמעתיקים את כתובת האימייל הזו כדי להשתמש בה בשלב הבא.
הענקת הרשאות IAM לחשבון השירות של Google SecOps
לחשבון השירות של Google SecOps צריך להיות התפקיד צפייה באובייקט אחסון בקטגוריה של GCS.
- נכנסים לדף Cloud Storage > Buckets.
- לוחצים על שם הקטגוריה.
- עוברים לכרטיסייה Permissions.
- לוחצים על הענקת גישה.
- מספקים את פרטי ההגדרה הבאים:
- Add principals (הוספת ישויות מורשות): מדביקים את כתובת האימייל בחשבון של חשבון השירות של Google SecOps.
- הקצאת תפקידים: בוחרים באפשרות צפייה באובייקט אחסון.
לוחצים על Save.
הגדרה של פיד ב-Google SecOps להטמעה של יומני ביקורת של Workday
- עוברים אל SIEM Settings > Feeds.
- לוחצים על הוספת פיד חדש.
- לוחצים על הגדרת פיד יחיד.
- בשדה שם הפיד, מזינים שם לפיד (לדוגמה,
Workday Audit Logs). - בוחרים באפשרות Google Cloud Storage V2 בתור סוג המקור.
- בוחרים באפשרות Workday Audit בתור Log type.
- לוחצים על הבא.
מציינים ערכים לפרמטרים הבאים של הקלט:
כתובת ה-URL של קטגוריית האחסון: מזינים את ה-URI של קטגוריית GCS עם נתיב הקידומת:
gs://workday-audit-logs/- מחליפים את
workday-audit-logsבשם הקטגוריה שלכם ב-GCS.
- מחליפים את
אפשרות למחיקת המקור: בוחרים את אפשרות המחיקה לפי ההעדפה שלכם:
- Never: אף פעם לא למחוק קבצים אחרי העברות (מומלץ לבדיקה).
- מחיקת קבצים שהועברו: הקבצים נמחקים אחרי שההעברה מסתיימת.
- מחיקת קבצים שהועברו וספריות ריקות: מחיקת קבצים וספריות ריקות אחרי שההעברה מסתיימת בהצלחה.
הגיל המקסימלי של הקובץ: כולל קבצים שעברו שינוי במספר הימים האחרון. ברירת המחדל היא 180 ימים.
מרחב השמות של הנכס: מרחב השמות של הנכס.
תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה.
לוחצים על הבא.
בודקים את ההגדרות של הפיד החדש במסך סיום ולוחצים על שליחה.
טבלת מיפוי UDM
| שדה ביומן | מיפוי UDM | היגיון |
|---|---|---|
| חשבון | metadata.event_type | אם השדה 'חשבון' לא ריק, השדה 'metadata.event_type' מוגדר לערך 'USER_RESOURCE_UPDATE_CONTENT'. |
| חשבון | principal.user.primaryId | מזהה המשתמש נשלף מהשדה "Account" באמצעות תבנית grok וממופה ל-principal.user.primaryId. |
| חשבון | principal.user.primaryName | השם המוצג של המשתמש מחולץ מהשדה 'חשבון' באמצעות תבנית grok וממופה ל-'principal.user.primaryName'. |
| ActivityCategory | metadata.event_type | אם הערך בשדה ActivityCategory הוא READ, הערך בשדה metadata.event_type הוא RESOURCE_READ. אם הערך הוא WRITE, הוא מוגדר כ-RESOURCE_WRITTEN. |
| ActivityCategory | metadata.product_event_type | מופה ישירות מהשדה ActivityCategory. |
| AffectedGroups | target.user.group_identifiers | מופה ישירות מהשדה AffectedGroups. |
| אזור | target.resource.attribute.labels.area.value | ממופה ישירות מהשדה "אזור". |
| AuthType | extensions.auth.auth_details | ממופה ישירות מהשדה AuthType. |
| AuthType | extensions.auth.type | המיפוי מתבצע מהשדה AuthType לסוגי אימות שונים שמוגדרים ב-UDM על סמך ערכים ספציפיים. |
| CFIPdeConexion | src.domain.name | אם השדה CFIPdeConexion לא מכיל כתובת IP תקינה, הוא ממופה ל-src.domain.name. |
| CFIPdeConexion | target.ip | אם השדה CFIPdeConexion הוא כתובת IP תקינה, הוא ממופה אל target.ip. |
| ChangedRelationship | metadata.description | ממופה ישירות מהשדה ChangedRelationship. |
| ClassOfInstance | target.resource.attribute.labels.class_instance.value | מופה ישירות מהשדה ClassOfInstance. |
| column18 | about.labels.utub.value | ממופה ישירות מהשדה column18. |
| CreatedBy | principal.user.userid | מזהה המשתמש מחולץ מהשדה CreatedBy באמצעות תבנית grok וממופה ל-principal.user.userid. |
| CreatedBy | principal.user.user_display_name | השם המוצג של המשתמש נשלף מהשדה CreatedBy באמצעות תבנית Grok וממופה ל-principal.user.user_display_name. |
| דומיין | about.domain.name | מופה ישירות מהשדה 'דומיין'. |
| EffectiveDate | @timestamp | הערך מנותח ל-@timestamp אחרי המרה לפורמט yyyy-MM-dd HH:mm:ss.SSSZ. |
| EntryMoment | @timestamp | מנותח ל-"@timestamp" אחרי המרה לפורמט "ISO8601". |
| EventType | security_result.description | ממופה ישירות מהשדה EventType. |
| טופס | target.resource.name | ממופה ישירות מהשדה "טופס". |
| InstancesAdded | about.resource.attribute.labels.instances_added.value | מופה ישירות מהשדה InstancesAdded. |
| InstancesAdded | target.user.attribute.roles.instances_added.name | ממופה ישירות מהשדה InstancesAdded. |
| InstancesRemoved | about.resource.attribute.labels.instances_removed.value | ממופה ישירות מהשדה InstancesRemoved. |
| InstancesRemoved | target.user.attribute.roles.instances_removed.name | ממופה ישירות מהשדה InstancesRemoved. |
| IntegrationEvent | target.resource.attribute.labels.integration_event.value | ממופה ישירות מהשדה IntegrationEvent. |
| IntegrationStatus | security_result.action_details | מופה ישירות מהשדה IntegrationStatus. |
| IntegrationSystem | target.resource.name | מופה ישירות מהשדה IntegrationSystem. |
| קניין רוחני (IP) | src.domain.name | אם השדה 'IP' לא מכיל כתובת IP תקינה, הוא ממופה ל-'src.domain.name'. |
| קניין רוחני (IP) | src.ip | אם השדה 'IP' הוא כתובת IP תקינה, הוא ממופה ל-'src.ip'. |
| IsDeviceManaged | additional.fields.additional1.value.string_value | אם הערך בשדה IsDeviceManaged הוא N, הערך שמוגדר הוא Successful. אחרת, הערך הוא 'התרחשה כניסה שנכשלה'. |
| IsDeviceManaged | additional.fields.additional2.value.string_value | אם הערך בשדה IsDeviceManaged הוא N, הערך שמוגדר הוא Successful. אחרת, הערך הוא Invalid Credentials (פרטי כניסה לא תקינים). |
| IsDeviceManaged | additional.fields.additional3.value.string_value | אם הערך בשדה IsDeviceManaged הוא N, הערך מוגדר כ-Successful. אחרת, הערך הוא Account Locked (החשבון נעול). |
| IsDeviceManaged | security_result.action_details | ממופה ישירות מהשדה IsDeviceManaged. |
| OutputFiles | about.file.full_path | ממופה ישירות מהשדה OutputFiles. |
| אדם | principal.user.primaryId | אם השדה Person מתחיל ב-INT, מזהה המשתמש מחולץ באמצעות תבנית grok וממופה ל-principal.user.primaryId. |
| אדם | principal.user.primaryName | אם השדה 'Person' מתחיל ב-'INT', שם התצוגה של המשתמש מחולץ באמצעות תבנית grok וממופה ל-'principal.user.primaryName'. |
| אדם | principal.user.user_display_name | אם השדה 'Person' לא מתחיל ב-'INT', הוא ממופה ישירות ל-'principal.user.user_display_name'. |
| אדם | metadata.event_type | אם השדה 'Person' לא ריק, השדה 'metadata.event_type' מוגדר כ-'USER_RESOURCE_UPDATE_CONTENT'. |
| ProcessedTransaction | target.resource.attribute.creation_time | הערך מנותח ל-target.resource.attribute.creation_time אחרי המרה לפורמט dd/MM/yyyy HH:mm:ss,SSS (ZZZ), dd/MM/yyyy, HH:mm:ss,SSS (ZZZ) או MM/dd/yyyy, HH:mm:ss.SSS A ZZZ. |
| ProgramBy | principal.user.userid | מופה ישירות מהשדה ProgramBy. |
| RecurrenceEndDate | principal.resource.attribute.last_update_time | הערך מנותח ל-principal.resource.attribute.last_update_time אחרי המרה לפורמט yyyy-MM-dd. |
| RecurrenceStartDate | principal.resource.attribute.creation_time | מנותח ל-"principal.resource.attribute.creation_time" אחרי המרה לפורמט "yyyy-MM-dd". |
| RequestName | metadata.description | מופה ישירות מהשדה RequestName. |
| ResponseMessage | security_result.summary | מופה ישירות מהשדה ResponseMessage. |
| RestrictedToEnvironment | security_result.about.hostname | ממופה ישירות מהשדה "RestrictedToEnvironment". |
| RevokedSecurity | security_result.outcomes.outcomes.value | מופה ישירות מהשדה RevokedSecurity. |
| RunFrequency | principal.resource.attribute.labels.run_frequency.value | ממופה ישירות מהשדה RunFrequency. |
| ScheduledProcess | principal.resource.name | מופה ישירות מהשדה ScheduledProcess. |
| SecuredTaskExecuted | target.resource.name | מופה ישירות מהשדה SecuredTaskExecuted. |
| SecureTaskExecuted | metadata.event_type | אם השדה SecureTaskExecuted מכיל את הערך Create, השדה metadata.event_type מוגדר לערך USER_RESOURCE_CREATION. |
| SecureTaskExecuted | target.resource.name | ממופה ישירות מהשדה "SecureTaskExecuted". |
| SentTime | @timestamp | הערך מנותח ל-"@timestamp" אחרי המרה לפורמט ISO8601. |
| SessionId | network.session_id | מופה ישירות מהשדה SessionId. |
| ShareBy | target.user.userid | מופה ישירות מהשדה ShareBy. |
| SignOffTime | additional.fields.additional4.value.string_value | ערך השדה AuthFailMessage ממוקם במערך additional.fields עם המפתח Enterprise Interface Builder. |
| SignOffTime | metadata.description | ממופה ישירות מהשדה AuthFailMessage. |
| SignOffTime | metadata.event_type | אם השדה SignOffTime ריק, השדה metadata.event_type מוגדר כ-USER_LOGIN. אחרת, הערך שמוגדר הוא USER_LOGOUT. |
| SignOffTime | principal.user.attribute.last_update_time | הערך מנותח ל-principal.user.attribute.last_update_time אחרי המרה לפורמט ISO8601. |
| SignOnIp | src.domain.name | אם השדה SignOnIp לא מכיל כתובת IP תקינה, הוא ממופה ל-src.domain.name. |
| SignOnIp | src.ip | אם השדה SignOnIp הוא כתובת IP תקינה, הוא ממופה ל-src.ip. |
| סטטוס | metadata.product_event_type | מופה ישירות מהשדה 'סטטוס'. |
| SystemAccount | principal.user.email_addresses | כתובת האימייל נשלפת מהשדה SystemAccount באמצעות תבנית grok וממופה ל-principal.user.email_addresses. |
| SystemAccount | principal.user.primaryId | מזהה המשתמש מחולץ מהשדה SystemAccount באמצעות תבנית grok וממופה אל principal.user.primaryId. |
| SystemAccount | principal.user.primaryName | השם המוצג של המשתמש מחולץ מהשדה SystemAccount באמצעות תבנית grok וממופה ל-principal.user.primaryName. |
| SystemAccount | src.user.userid | מזהה המשתמש המשני נשלף מהשדה SystemAccount באמצעות תבנית grok וממופה ל-src.user.userid. |
| SystemAccount | src.user.user_display_name | השם המוצג המשני של המשתמש מחולץ מהשדה SystemAccount באמצעות תבנית grok וממופה אל src.user.user_display_name. |
| SystemAccount | target.user.userid | מזהה המשתמש של היעד מחולץ מהשדה SystemAccount באמצעות תבנית grok וממופה אל target.user.userid. |
| יעד | target.user.user_display_name | מופה ישירות מהשדה 'יעד'. |
| תבנית | about.resource.name | מופה ישירות מהשדה 'תבנית'. |
| דייר (tenant) | target.asset.hostname | מופה ישירות מהשדה Tenant (דייר). |
| TlsVersion | network.tls.version | ממופה ישירות מהשדה "TlsVersion". |
| עסקה | security_result.action_details | מופה ישירות מהשדה 'עסקה'. |
| TransactionType | security_result.summary | מופה ישירות מהשדה TransactionType. |
| TypeForm | target.resource.resource_subtype | מופה ישירות מהשדה TypeForm. |
| UserAgent | network.http.parsed_user_agent | הניתוח בוצע מהשדה UserAgent באמצעות המסנן useragent. |
| UserAgent | network.http.user_agent | מופה ישירות מהשדה UserAgent. |
| WorkdayAccount | target.user.user_display_name | השם המוצג של המשתמש מחולץ מהשדה WorkdayAccount באמצעות תבנית grok וממופה אל target.user.user_display_name. |
| WorkdayAccount | target.user.userid | מזהה המשתמש מחולץ מהשדה WorkdayAccount באמצעות תבנית grok וממופה אל target.user.userid. |
| additional.fields.additional1.key | ההגדרה היא FailedSignOn. | |
| additional.fields.additional2.key | צריך להגדיר את הערך "InvalidCredentials". | |
| additional.fields.additional3.key | הערך שמוגדר הוא AccountLocked. | |
| additional.fields.additional4.key | מגדירים את האפשרות "Enterprise Interface Builder". | |
| metadata.event_type | מוגדר בהתחלה כ-"GENERIC_EVENT" ואז מתעדכן על סמך הלוגיקה שכוללת שדות אחרים. | |
| metadata.event_type | הערך שמוגדר הוא USER_CHANGE_PERMISSIONS לסוגים ספציפיים של אירועים. | |
| metadata.event_type | מוגדר כ-"RESOURCE_WRITTEN" לסוגי אירועים ספציפיים. | |
| metadata.log_type | הערך מוטמע בקוד כ-WORKDAY_AUDIT. | |
| metadata.product_name | הערך מוטמע בקוד כ-"Enterprise Interface Builder". | |
| metadata.vendor_name | הערך מוטמע בקוד כ-Workday. | |
| principal.asset.category | מגדירים את הערך Phone (טלפון) אם השדה DeviceType (סוג המכשיר) הוא Phone (טלפון). | |
| principal.resource.resource_type | הערך TASK מקודד באופן קשיח אם השדה ScheduledProcess לא ריק. | |
| security_result.action | הערך צריך להיות ALLOW או FAIL בהתאם לערכים בשדות FailedSignOn, IsDeviceManaged, InvalidCredentials ו-AccountLocked. | |
| security_result.summary | ההגדרה היא "הצליח" או הודעות שגיאה ספציפיות שמבוססות על הערכים של השדות FailedSignOn, IsDeviceManaged, InvalidCredentials ו-AccountLocked. | |
| target.resource.resource_type | מוגדר כ-TASK (משימה) עבור סוגים ספציפיים של אירועים. | |
| target.resource.resource_type | מוגדר כ-DATASET אם השדה TypeForm לא ריק. | |
| הודעה | principal.user.email_addresses | הפונקציה מחלצת את כתובת האימייל מהשדה message באמצעות תבנית grok וממזגת אותה עם principal.user.email_addresses אם נמצאה התאמה לתבנית ספציפית. |
| הודעה | src.user.userid | השדה נמחק אם השדה "event.idm.read_only_udm.principal.user.userid" תואם ל-"user_target" שחולץ מהשדה "message". |
| הודעה | src.user.user_display_name | מנקה את השדה אם השדה event.idm.read_only_udm.principal.user.userid תואם לערך user_target שחולץ מהשדה message. |
| הודעה | target.user.userid | מחלץ את מזהה המשתמש מהשדה "message" באמצעות תבנית grok וממפה אותו ל-"target.user.userid" אם יש התאמה לתבנית ספציפית. |
column11 |
SecurityGroupModified |
מופה מיומן השינויים |
SecurityGroupModified |
security_result.about.group.group_display_name |
מופה מיומן השינויים |
ChangedRelationship |
target.user.attribute.roles.name |
מופה מיומן השינויים |
יומן שינויים
צפייה ביומן השינויים של כלי הניתוח הזה
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.